mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 06:36:46 +00:00

This adds basic support for while and do..while loops. Support for break and continue are left for a subsequent patch.
71 lines
1.5 KiB
Plaintext
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: }
|