| // 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 (%arg0 = %0) : (tensor<i32>) -> 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> |
| } do { |
| ^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> |
| } |
| 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 (%arg0 = %0) : (tensor<i32>) -> 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> |
| } do { |
| ^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> |
| } |
| 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 (%arg0 = %0) : (tensor<i32>) -> 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> |
| } do { |
| ^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> |
| } |
| 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 (%arg0 = %0) : (tensor<i32>) -> 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> |
| } do { |
| ^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> |
| } |
| check.expect_eq_const(%1, dense<4> : tensor<i32>) : tensor<i32> |
| return |
| } |