[clang] [CIR] Emit allocas into the proper lexical scope (PR #132468)
Morris Hafner via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 24 05:13:23 PDT 2025
================
@@ -44,3 +44,100 @@ void l0() {
// OGCG: br label %[[FOR_COND:.*]]
// OGCG: [[FOR_COND]]:
// OGCG: br label %[[FOR_COND]]
+
+void l1() {
+ for (int i = 0; ; ) {
+ }
+}
+
+// CIR: cir.func @l1
+// CIR-NEXT: cir.scope {
+// CIR-NEXT: %[[I:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init] {alignment = 4 : i64}
+// CIR-NEXT: %[[ZERO:.*]] = cir.const #cir.int<0> : !s32i
+// CIR-NEXT: cir.store %[[ZERO]], %[[I]] : !s32i, !cir.ptr<!s32i>
+// CIR-NEXT: cir.for : cond {
+// CIR-NEXT: %[[TRUE:.*]] = cir.const #true
+// CIR-NEXT: cir.condition(%[[TRUE]])
+// CIR-NEXT: } body {
+// CIR-NEXT: cir.yield
+// CIR-NEXT: } step {
+// CIR-NEXT: cir.yield
+// CIR-NEXT: }
+// CIR-NEXT: }
+// CIR-NEXT: cir.return
+// CIR-NEXT: }
+
+// LLVM: define void @l1()
+// LLVM: %[[I:.*]] = alloca i32, i64 1, align 4
+// LLVM: br label %[[LABEL1:.*]]
+// LLVM: [[LABEL1]]:
+// LLVM: store i32 0, ptr %[[I]], align 4
+// LLVM: br label %[[LABEL2:.*]]
+// LLVM: [[LABEL2]]:
+// LLVM: br i1 true, label %[[LABEL3:.*]], label %[[LABEL5:.*]]
+// LLVM: [[LABEL3]]:
+// LLVM: br label %[[LABEL4:.*]]
+// LLVM: [[LABEL4]]:
+// LLVM: br label %[[LABEL2]]
+// LLVM: [[LABEL5]]:
+// LLVM: br label %[[LABEL6:.*]]
+// LLVM: [[LABEL6]]:
+// LLVM: ret void
+
+// OGCG: define{{.*}} void @_Z2l1v()
+// OGCG: entry:
+// OGCG: %[[I:.*]] = alloca i32, align 4
+// OGCG: store i32 0, ptr %[[I]], align 4
+// OGCG: br label %[[FOR_COND:.*]]
+// OGCG: [[FOR_COND]]:
+// OGCG: br label %[[FOR_COND]]
+
+void l2() {
+ for (;;) {
----------------
mmha wrote:
Can you add another test without any braces so we have a for loop body without a `CompoundStmt`?
https://github.com/llvm/llvm-project/pull/132468
More information about the cfe-commits
mailing list