| // 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 | |
| } |