https://github.com/Men-cotton updated 
https://github.com/llvm/llvm-project/pull/172663

>From 326addd57e92ad32094d4c81b412e279ee2ad130 Mon Sep 17 00:00:00 2001
From: mencotton <[email protected]>
Date: Wed, 17 Dec 2025 21:28:59 +0900
Subject: [PATCH 1/3] [CIR] Handle optional alignment in alloca lowering

---
 clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp |  7 +++++--
 clang/test/CIR/Lowering/alloca.cir                  | 13 +++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/CIR/Lowering/alloca.cir

diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp 
b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index 7d854997848aa..82e556f6e65db 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -1515,8 +1515,11 @@ mlir::LogicalResult 
CIRToLLVMAllocaOpLowering::matchAndRewrite(
   assert(!cir::MissingFeatures::addressSpace());
   assert(!cir::MissingFeatures::opAllocaAnnotations());
 
-  rewriter.replaceOpWithNewOp<mlir::LLVM::AllocaOp>(
-      op, resultTy, elementTy, size, op.getAlignmentAttr().getInt());
+  unsigned alignment = 0;
+  if (auto alignAttr = op.getAlignmentAttr())
+    alignment = alignAttr.getInt();
+  rewriter.replaceOpWithNewOp<mlir::LLVM::AllocaOp>(op, resultTy, elementTy,
+                                                    size, alignment);
 
   return mlir::success();
 }
diff --git a/clang/test/CIR/Lowering/alloca.cir 
b/clang/test/CIR/Lowering/alloca.cir
new file mode 100644
index 0000000000000..51980d393eb6f
--- /dev/null
+++ b/clang/test/CIR/Lowering/alloca.cir
@@ -0,0 +1,13 @@
+// RUN: cir-opt %s --cir-to-llvm | FileCheck %s
+
+!s32i = !cir.int<s, 32>
+
+module {
+  // CHECK-LABEL: llvm.func @alloca_no_align
+  // CHECK:         %[[SIZE:.*]] = llvm.mlir.constant(1 : i64) : i64
+  // CHECK-NEXT:    %{{.*}} = llvm.alloca %[[SIZE]] x i32 : (i64) -> !llvm.ptr
+  cir.func @alloca_no_align() {
+    %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["var_name"]
+    cir.return
+  }
+}

>From 22db0a6f09ef69f2e0e2b99d8d931e51ed5dad1e Mon Sep 17 00:00:00 2001
From: Akimasa Watanuki <[email protected]>
Date: Thu, 18 Dec 2025 00:09:28 +0900
Subject: [PATCH 2/3] fix: avoid use auto

Co-authored-by: Sirui Mu <[email protected]>
---
 clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp 
b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index 82e556f6e65db..50fb63f523b81 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -1516,7 +1516,7 @@ mlir::LogicalResult 
CIRToLLVMAllocaOpLowering::matchAndRewrite(
   assert(!cir::MissingFeatures::opAllocaAnnotations());
 
   unsigned alignment = 0;
-  if (auto alignAttr = op.getAlignmentAttr())
+  if (mlir::IntegerAttr alignAttr = op.getAlignmentAttr())
     alignment = alignAttr.getInt();
   rewriter.replaceOpWithNewOp<mlir::LLVM::AllocaOp>(op, resultTy, elementTy,
                                                     size, alignment);

>From 916a4458e8d1fccf03c6ef240bceea25a81b304d Mon Sep 17 00:00:00 2001
From: mencotton <[email protected]>
Date: Fri, 19 Dec 2025 13:00:17 +0900
Subject: [PATCH 3/3] fix: make cir.alloca alignment mandatory with default
 value 0

---
 clang/include/clang/CIR/Dialect/IR/CIROps.td        | 2 +-
 clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 5 +----
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td 
b/clang/include/clang/CIR/Dialect/IR/CIROps.td
index 0e91d008dc52d..3a5f72afa672a 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIROps.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td
@@ -530,7 +530,7 @@ def CIR_AllocaOp : CIR_Op<"alloca", [
     StrAttr:$name,
     UnitAttr:$init,
     UnitAttr:$constant,
-    ConfinedAttr<OptionalAttr<I64Attr>, [IntMinValue<0>]>:$alignment,
+    ConfinedAttr<DefaultValuedAttr<I64Attr, "0">, [IntMinValue<0>]>:$alignment,
     OptionalAttr<ArrayAttr>:$annotations
   );
 
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp 
b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index 50fb63f523b81..d2692dea6e728 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -1515,11 +1515,8 @@ mlir::LogicalResult 
CIRToLLVMAllocaOpLowering::matchAndRewrite(
   assert(!cir::MissingFeatures::addressSpace());
   assert(!cir::MissingFeatures::opAllocaAnnotations());
 
-  unsigned alignment = 0;
-  if (mlir::IntegerAttr alignAttr = op.getAlignmentAttr())
-    alignment = alignAttr.getInt();
   rewriter.replaceOpWithNewOp<mlir::LLVM::AllocaOp>(op, resultTy, elementTy,
-                                                    size, alignment);
+                                                    size, op.getAlignment());
 
   return mlir::success();
 }

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to