[clang] [CIR][NFC] Upstream IR roundtrip tests for branch and loop ops (PR #189006)
Akimasa Watanuki via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 27 07:24:16 PDT 2026
https://github.com/Men-cotton created https://github.com/llvm/llvm-project/pull/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.
>From 4a37bf88406dad5abad05ba2a1866eaebc29e7d2 Mon Sep 17 00:00:00 2001
From: mencotton <mencotton0410 at gmail.com>
Date: Fri, 27 Mar 2026 23:11:17 +0900
Subject: [PATCH] [CIR][NFC] Upstream IR roundtrip tests for branch and loop
ops
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 in the CIR IR tests.
Partially addresses #156747.
---
clang/test/CIR/IR/branch.cir | 33 +++++++++++++++++++++++++++++++++
clang/test/CIR/IR/do-while.cir | 17 +++++++++++++++++
clang/test/CIR/IR/for.cir | 21 +++++++++++++++++++++
clang/test/CIR/IR/while.cir | 17 +++++++++++++++++
4 files changed, 88 insertions(+)
create mode 100644 clang/test/CIR/IR/branch.cir
create mode 100644 clang/test/CIR/IR/do-while.cir
create mode 100644 clang/test/CIR/IR/for.cir
create mode 100644 clang/test/CIR/IR/while.cir
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