[clang] c78f80c - [CIR][NFC] Upstream IR roundtrip tests for branch and loop ops (#189006)

via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 16 16:57:49 PDT 2026


Author: Akimasa Watanuki
Date: 2026-04-17T08:57:43+09:00
New Revision: c78f80c405a005346f8b2dd3f8605851df294900

URL: https://github.com/llvm/llvm-project/commit/c78f80c405a005346f8b2dd3f8605851df294900
DIFF: https://github.com/llvm/llvm-project/commit/c78f80c405a005346f8b2dd3f8605851df294900.diff

LOG: [CIR][NFC] Upstream IR roundtrip tests for branch and loop ops (#189006)

Add `clang/test/CIR/IR` roundtrip tests for `cir.br`, `cir.brcond`,
`cir.for`, `cir.while`, and `cir.do`.

This adds parser/printer coverage for the textual forms of these
control-flow operations.

Partially addresses #156747.

Added: 
    clang/test/CIR/IR/branch.cir
    clang/test/CIR/IR/do-while.cir
    clang/test/CIR/IR/for.cir
    clang/test/CIR/IR/while.cir

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/clang/test/CIR/IR/branch.cir b/clang/test/CIR/IR/branch.cir
new file mode 100644
index 0000000000000..d673fdaaa98e9
--- /dev/null
+++ b/clang/test/CIR/IR/branch.cir
@@ -0,0 +1,33 @@
+// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
+
+cir.func @branch_with_block_argument(%cond: !cir.bool) {
+  cir.br ^bb1
+^bb1:
+  cir.br ^bb2(%cond : !cir.bool)
+^bb2(%value: !cir.bool):
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @branch_with_block_argument
+// CHECK-SAME: %[[COND:.*]]: !cir.bool
+// CHECK-NEXT:   cir.br ^bb1
+// CHECK-NEXT: ^bb1:
+// CHECK-NEXT:   cir.br ^bb2(%[[COND]] : !cir.bool)
+// CHECK-NEXT: ^bb2(%{{.*}}: !cir.bool):
+// CHECK-NEXT:   cir.return
+
+cir.func @conditional_branch(%cond : !cir.bool) {
+  cir.brcond %cond ^bb1, ^bb2
+^bb1:
+  cir.return
+^bb2:
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @conditional_branch
+// CHECK-SAME: %[[COND:.*]]: !cir.bool
+// CHECK-NEXT:   cir.brcond %[[COND]] ^bb1, ^bb2
+// CHECK-NEXT: ^bb1:
+// CHECK-NEXT:   cir.return
+// CHECK-NEXT: ^bb2:
+// CHECK-NEXT:   cir.return

diff  --git a/clang/test/CIR/IR/do-while.cir b/clang/test/CIR/IR/do-while.cir
new file mode 100644
index 0000000000000..2a3eb698ecfeb
--- /dev/null
+++ b/clang/test/CIR/IR/do-while.cir
@@ -0,0 +1,17 @@
+// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
+
+cir.func @do_while_loop(%cond : !cir.bool) -> !cir.void {
+  cir.do {
+    cir.yield
+  } while {
+    cir.condition(%cond)
+  }
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @do_while_loop
+// CHECK-SAME: %[[COND:.*]]: !cir.bool
+// CHECK:       cir.do
+// CHECK-NEXT:    cir.yield
+// CHECK-NEXT:  while
+// CHECK-NEXT:    cir.condition(%[[COND]])

diff  --git a/clang/test/CIR/IR/for.cir b/clang/test/CIR/IR/for.cir
new file mode 100644
index 0000000000000..0efb593e14d02
--- /dev/null
+++ b/clang/test/CIR/IR/for.cir
@@ -0,0 +1,21 @@
+// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
+
+cir.func @for_loop(%cond : !cir.bool) {
+  cir.for : cond {
+    cir.condition(%cond)
+  } body {
+    cir.yield
+  } step {
+    cir.yield
+  }
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @for_loop
+// CHECK-SAME: %[[COND:.*]]: !cir.bool
+// CHECK:       cir.for : cond
+// CHECK-NEXT:    cir.condition(%[[COND]])
+// CHECK-NEXT:  body
+// CHECK-NEXT:    cir.yield
+// CHECK-NEXT:  step
+// CHECK-NEXT:    cir.yield

diff  --git a/clang/test/CIR/IR/while.cir b/clang/test/CIR/IR/while.cir
new file mode 100644
index 0000000000000..e381fe534b9db
--- /dev/null
+++ b/clang/test/CIR/IR/while.cir
@@ -0,0 +1,17 @@
+// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
+
+cir.func @while_loop(%cond : !cir.bool) {
+  cir.while {
+    cir.condition(%cond)
+  } do {
+    cir.yield
+  }
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @while_loop
+// CHECK-SAME: %[[COND:.*]]: !cir.bool
+// CHECK:       cir.while
+// CHECK-NEXT:    cir.condition(%[[COND]])
+// CHECK-NEXT:  do
+// CHECK-NEXT:    cir.yield


        


More information about the cfe-commits mailing list