Andy Kaylor 9f3d8e8fb8
[CIR] Upstream support for while and do..while loops (#133157)
This adds basic support for while and do..while loops. Support for break
and continue are left for a subsequent patch.
2025-04-01 13:03:24 -07:00

71 lines
1.5 KiB
Plaintext

// RUN: cir-opt %s -cir-flatten-cfg -o - | FileCheck %s
!s32i = !cir.int<s, 32>
module {
cir.func @testFor(%arg0 : !cir.bool) {
cir.for : cond {
cir.condition(%arg0)
} body {
cir.yield
} step {
cir.yield
}
cir.return
}
}
// CHECK: cir.func @testFor(%arg0: !cir.bool) {
// CHECK: cir.br ^bb[[#COND:]]
// CHECK: ^bb[[#COND]]:
// CHECK: cir.brcond %arg0 ^bb[[#BODY:]], ^bb[[#EXIT:]]
// CHECK: ^bb[[#BODY]]:
// CHECK: cir.br ^bb[[#STEP:]]
// CHECK: ^bb[[#STEP]]:
// CHECK: cir.br ^bb[[#COND:]]
// CHECK: ^bb[[#EXIT]]:
// CHECK: cir.return
// CHECK: }
// Test while cir.loop operation lowering.
cir.func @testWhile(%arg0 : !cir.bool) {
cir.while {
cir.condition(%arg0)
} do {
cir.yield
}
cir.return
}
// CHECK: cir.func @testWhile(%arg0: !cir.bool) {
// CHECK: cir.br ^bb[[#COND:]]
// CHECK: ^bb[[#COND]]:
// CHECK: cir.brcond %arg0 ^bb[[#BODY:]], ^bb[[#EXIT:]]
// CHECK: ^bb[[#BODY]]:
// CHECK: cir.br ^bb[[#COND:]]
// CHECK: ^bb[[#EXIT]]:
// CHECK: cir.return
// CHECK: }
// Test do-while cir.loop operation lowering.
cir.func @testDoWhile(%arg0 : !cir.bool) {
cir.do {
cir.yield
} while {
cir.condition(%arg0)
}
cir.return
}
// CHECK: cir.func @testDoWhile(%arg0: !cir.bool) {
// CHECK: cir.br ^bb[[#BODY:]]
// CHECK: ^bb[[#COND]]:
// CHECK: cir.brcond %arg0 ^bb[[#BODY:]], ^bb[[#EXIT:]]
// CHECK: ^bb[[#BODY]]:
// CHECK: cir.br ^bb[[#COND:]]
// CHECK: ^bb[[#EXIT]]:
// CHECK: cir.return
// CHECK: }