@@ -125,7 +125,7 @@ func.func @for_yield_index(%arg0 : index, %arg1 : index, %arg2 : index) -> index
125125// CHECK: }
126126
127127
128- func.func @for_yield_i32 (%arg0 : index , %arg1 : index , %arg2 : index ) -> i32 {
128+ func.func @for_yield_i32 (%arg0 : index , %arg1 : index , %arg2 : index ) -> i32 {
129129 %zero = arith.constant 0 : i32
130130 %r = scf.for %i0 = %arg0 to %arg1 step %arg2 iter_args (%acc = %zero ) -> i32 {
131131 scf.yield %acc : i32
@@ -145,3 +145,31 @@ func.func @for_yield_index(%arg0 : index, %arg1 : index, %arg2 : index) -> index
145145// CHECK: }
146146// CHECK: return %3 : i32
147147// CHECK: }
148+
149+
150+ func.func @for_yield_update_loop_carried_var (%arg0 : index , %arg1 : index , %arg2 : index ) -> index {
151+ %zero = arith.constant 0 : index
152+ %r = scf.for %i0 = %arg0 to %arg1 step %arg2 iter_args (%acc = %zero ) -> index {
153+ %sn = arith.addi %acc , %acc : index
154+ scf.yield %sn: index
155+ }
156+ return %r : index
157+ }
158+
159+ // CHECK: func.func @for_yield_update_loop_carried_var(%arg0: index, %arg1: index, %arg2: index) -> index {
160+ // CHECK: %0 = builtin.unrealized_conversion_cast %arg2 : index to !emitc.size_t
161+ // CHECK: %1 = builtin.unrealized_conversion_cast %arg1 : index to !emitc.size_t
162+ // CHECK: %2 = builtin.unrealized_conversion_cast %arg0 : index to !emitc.size_t
163+ // CHECK: %c0 = arith.constant 0 : index
164+ // CHECK: %3 = builtin.unrealized_conversion_cast %c0 : index to !emitc.size_t
165+ // CHECK: %4 = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.size_t
166+ // CHECK: emitc.assign %3 : !emitc.size_t to %4 : !emitc.size_t
167+ // CHECK: emitc.for %arg3 = %2 to %1 step %0 {
168+ // CHECK: %6 = builtin.unrealized_conversion_cast %4 : !emitc.size_t to index
169+ // CHECK: %7 = arith.addi %6, %6 : index
170+ // CHECK: %8 = builtin.unrealized_conversion_cast %7 : index to !emitc.size_t
171+ // CHECK: emitc.assign %8 : !emitc.size_t to %4 : !emitc.size_t
172+ // CHECK: }
173+ // CHECK: %5 = builtin.unrealized_conversion_cast %4 : !emitc.size_t to index
174+ // CHECK: return %5 : index
175+ // CHECK: }
0 commit comments