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 <[email protected]> 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 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
