[clang] [CIR][NFC] Upstream mem2reg.cir from ClangIR (PR #194517)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 27 19:58:43 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clangir
Author: Akimasa Watanuki (Men-cotton)
<details>
<summary>Changes</summary>
Upstream `mem2reg.cir` from ClangIR.
Check that stack slots are promoted away after CFG flattening.
Partially addresses #<!-- -->156747.
---
Full diff: https://github.com/llvm/llvm-project/pull/194517.diff
1 Files Affected:
- (added) clang/test/CIR/Transforms/mem2reg.cir (+24)
``````````diff
diff --git a/clang/test/CIR/Transforms/mem2reg.cir b/clang/test/CIR/Transforms/mem2reg.cir
new file mode 100644
index 0000000000000..85688d77e57ca
--- /dev/null
+++ b/clang/test/CIR/Transforms/mem2reg.cir
@@ -0,0 +1,24 @@
+// RUN: cir-opt %s -cir-flatten-cfg -mem2reg -o - | FileCheck %s \
+// RUN: --implicit-check-not=cir.alloca \
+// RUN: --implicit-check-not=cir.load \
+// RUN: --implicit-check-not=cir.store
+
+!s32i = !cir.int<s, 32>
+
+module {
+ // Promote CIR stack slots through the generic mem2reg pass after CFG flattening.
+ cir.func @promote_simple_stack_slots() -> !s32i {
+ %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
+ %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["y", init] {alignment = 4 : i64}
+ %2 = cir.const #cir.int<42> : !s32i
+ cir.store %2, %1 : !s32i, !cir.ptr<!s32i>
+ %3 = cir.load %1 : !cir.ptr<!s32i>, !s32i
+ cir.store %3, %0 : !s32i, !cir.ptr<!s32i>
+ %4 = cir.load %0 : !cir.ptr<!s32i>, !s32i
+ cir.return %4 : !s32i
+ }
+
+ // CHECK-LABEL: cir.func @promote_simple_stack_slots
+ // CHECK: %[[CONST:.*]] = cir.const #cir.int<42>
+ // CHECK: cir.return %[[CONST]]
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/194517
More information about the cfe-commits
mailing list