| // These following tests executes the following pseudo code with different |
| // constant values: |
| // |
| // i = ?, n = ? |
| // while (i <= 3) { |
| // i += n |
| // } |
| |
| // i = 4, n = 2 |
| func.func @while_test_iter0() { |
| %0 = util.unfoldable_constant dense<4> : tensor<i32> |
| %1 = "tosa.while_loop"(%0) ( { |
| ^bb0(%arg0: tensor<i32>): |
| %2 = "tosa.const"() {value = dense<3> : tensor<i32>} : () -> tensor<i32> |
| %3 = "tosa.greater_equal"(%2, %arg0) : (tensor<i32>, tensor<i32>) -> tensor<i1> |
| "tosa.yield"(%3) : (tensor<i1>) -> () |
| }, { |
| ^bb0(%arg0: tensor<i32>): |
| %2 = "tosa.const"() {value = dense<2> : tensor<i32>} : () -> tensor<i32> |
| %3 = "tosa.add"(%arg0, %2) : (tensor<i32>, tensor<i32>) -> tensor<i32> |
| "tosa.yield"(%3) : (tensor<i32>) -> () |
| }) : (tensor<i32>) -> (tensor<i32>) |
| check.expect_eq_const(%1, dense<4> : tensor<i32>) : tensor<i32> |
| return |
| } |
| |
| // i = 2, n = 2 |
| func.func @while_test_iter1() { |
| %0 = util.unfoldable_constant dense<2> : tensor<i32> |
| %1 = "tosa.while_loop"(%0) ( { |
| ^bb0(%arg0: tensor<i32>): |
| %2 = "tosa.const"() {value = dense<3> : tensor<i32>} : () -> tensor<i32> |
| %3 = "tosa.greater_equal"(%2, %arg0) : (tensor<i32>, tensor<i32>) -> tensor<i1> |
| "tosa.yield"(%3) : (tensor<i1>) -> () |
| }, { |
| ^bb0(%arg0: tensor<i32>): |
| %2 = "tosa.const"() {value = dense<2> : tensor<i32>} : () -> tensor<i32> |
| %3 = "tosa.add"(%arg0, %2) : (tensor<i32>, tensor<i32>) -> tensor<i32> |
| "tosa.yield"(%3) : (tensor<i32>) -> () |
| }) : (tensor<i32>) -> (tensor<i32>) |
| check.expect_eq_const(%1, dense<4> : tensor<i32>) : tensor<i32> |
| return |
| } |
| |
| // i = 0, n = 2 |
| func.func @while_test_iter2() { |
| %0 = util.unfoldable_constant dense<0> : tensor<i32> |
| %1 = "tosa.while_loop"(%0) ( { |
| ^bb0(%arg0: tensor<i32>): |
| %2 = "tosa.const"() {value = dense<3> : tensor<i32>} : () -> tensor<i32> |
| %3 = "tosa.greater_equal"(%2, %arg0) : (tensor<i32>, tensor<i32>) -> tensor<i1> |
| "tosa.yield"(%3) : (tensor<i1>) -> () |
| }, { |
| ^bb0(%arg0: tensor<i32>): |
| %2 = "tosa.const"() {value = dense<2> : tensor<i32>} : () -> tensor<i32> |
| %3 = "tosa.add"(%arg0, %2) : (tensor<i32>, tensor<i32>) -> tensor<i32> |
| "tosa.yield"(%3) : (tensor<i32>) -> () |
| }) : (tensor<i32>) -> (tensor<i32>) |
| check.expect_eq_const(%1, dense<4> : tensor<i32>) : tensor<i32> |
| return |
| } |
| |
| // i = 0, n = 1 |
| func.func @while_test_iter4() { |
| %0 = util.unfoldable_constant dense<0> : tensor<i32> |
| %1 = "tosa.while_loop"(%0) ( { |
| ^bb0(%arg0: tensor<i32>): |
| %2 = "tosa.const"() {value = dense<3> : tensor<i32>} : () -> tensor<i32> |
| %3 = "tosa.greater_equal"(%2, %arg0) : (tensor<i32>, tensor<i32>) -> tensor<i1> |
| "tosa.yield"(%3) : (tensor<i1>) -> () |
| }, { |
| ^bb0(%arg0: tensor<i32>): |
| %2 = "tosa.const"() {value = dense<1> : tensor<i32>} : () -> tensor<i32> |
| %3 = "tosa.add"(%arg0, %2) : (tensor<i32>, tensor<i32>) -> tensor<i32> |
| "tosa.yield"(%3) : (tensor<i32>) -> () |
| }) : (tensor<i32>) -> (tensor<i32>) |
| check.expect_eq_const(%1, dense<4> : tensor<i32>) : tensor<i32> |
| return |
| } |