[clang] a11feef - [CIR] Make cir.alloca alignment mandatory (#172663)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 14 16:15:29 PST 2026
Author: Akimasa Watanuki
Date: 2026-01-14T16:15:25-08:00
New Revision: a11feef2e11da15e4f874bf72dcdc827e60464cb
URL: https://github.com/llvm/llvm-project/commit/a11feef2e11da15e4f874bf72dcdc827e60464cb
DIFF: https://github.com/llvm/llvm-project/commit/a11feef2e11da15e4f874bf72dcdc827e60464cb.diff
LOG: [CIR] Make cir.alloca alignment mandatory (#172663)
Fixed a crash in `CIRToLLVMAllocaOpLowering` where `cir.alloca`
operations without an explicit alignment attribute caused failures.
Modified the ODS definition of `cir.alloca` to use
`ConfinedAttr<I64Attr, [IntMinValue<0>]>`. This ensures the attribute is
always present.
Added a regression test in `clang/test/CIR/Lowering/alloca.cir`.
---------
Co-authored-by: Sirui Mu <msrlancern at gmail.com>
Added:
clang/test/CIR/Lowering/alloca.cir
Modified:
clang/include/clang/CIR/Dialect/IR/CIROps.td
clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
clang/test/CIR/IR/invalid-complex.cir
clang/test/CIR/IR/invalid-throw.cir
clang/test/CIR/IR/invalid-try-catch.cir
clang/test/CIR/IR/invalid-vector.cir
clang/test/CIR/IR/resume-flat.cir
clang/test/CIR/IR/struct.cir
clang/test/CIR/IR/throw.cir
clang/test/CIR/IR/vector.cir
clang/test/CIR/Transforms/complex-create-fold.cir
clang/test/CIR/Transforms/complex-imag-fold.cir
clang/test/CIR/Transforms/complex-real-fold.cir
clang/test/CIR/Transforms/ternary-fold.cir
clang/test/CIR/Transforms/vector-extract-fold.cir
Removed:
################################################################################
diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td
index ceb9899a00ac4..6686dbe60877e 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIROps.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td
@@ -539,7 +539,7 @@ def CIR_AllocaOp : CIR_Op<"alloca", [
StrAttr:$name,
UnitAttr:$init,
UnitAttr:$constant,
- ConfinedAttr<OptionalAttr<I64Attr>, [IntMinValue<0>]>:$alignment,
+ ConfinedAttr<I64Attr, [IntMinValue<1>]>:$alignment,
OptionalAttr<ArrayAttr>:$annotations
);
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index 202b9d6a49283..7625bcccd520f 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -1566,8 +1566,8 @@ mlir::LogicalResult CIRToLLVMAllocaOpLowering::matchAndRewrite(
assert(!cir::MissingFeatures::addressSpace());
assert(!cir::MissingFeatures::opAllocaAnnotations());
- rewriter.replaceOpWithNewOp<mlir::LLVM::AllocaOp>(
- op, resultTy, elementTy, size, op.getAlignmentAttr().getInt());
+ rewriter.replaceOpWithNewOp<mlir::LLVM::AllocaOp>(op, resultTy, elementTy,
+ size, op.getAlignment());
return mlir::success();
}
diff --git a/clang/test/CIR/IR/invalid-complex.cir b/clang/test/CIR/IR/invalid-complex.cir
index 3a11b631a2ac7..9ec796700f7f5 100644
--- a/clang/test/CIR/IR/invalid-complex.cir
+++ b/clang/test/CIR/IR/invalid-complex.cir
@@ -26,7 +26,7 @@ cir.global external @ci2 = #cir.const_complex<#cir.int<1> : !s32i, #cir.int<2> :
module {
cir.func @complex_real_invalid_result_type() -> !cir.double {
- %0 = cir.alloca !cir.complex<!cir.double>, !cir.ptr<!cir.complex<!cir.double>>, ["c"]
+ %0 = cir.alloca !cir.complex<!cir.double>, !cir.ptr<!cir.complex<!cir.double>>, ["c"] {alignment = 8 : i64}
%2 = cir.load align(8) %0 : !cir.ptr<!cir.complex<!cir.double>>, !cir.complex<!cir.double>
// expected-error @below {{result type does not match operand type}}
%3 = cir.complex.real %2 : !cir.complex<!cir.double> -> !cir.float
@@ -38,7 +38,7 @@ module {
module {
cir.func @complex_imag_invalid_result_type() -> !cir.double {
- %0 = cir.alloca !cir.complex<!cir.double>, !cir.ptr<!cir.complex<!cir.double>>, ["c"]
+ %0 = cir.alloca !cir.complex<!cir.double>, !cir.ptr<!cir.complex<!cir.double>>, ["c"] {alignment = 8 : i64}
%2 = cir.load align(8) %0 : !cir.ptr<!cir.complex<!cir.double>>, !cir.complex<!cir.double>
// expected-error @below {{result type does not match operand type}}
%3 = cir.complex.imag %2 : !cir.complex<!cir.double> -> !cir.float
@@ -51,7 +51,7 @@ module {
module {
cir.func @complex_real_ptr_invalid_result_type() -> !cir.double {
- %0 = cir.alloca !cir.complex<!cir.double>, !cir.ptr<!cir.complex<!cir.double>>, ["c"]
+ %0 = cir.alloca !cir.complex<!cir.double>, !cir.ptr<!cir.complex<!cir.double>>, ["c"] {alignment = 8 : i64}
// expected-error @below {{result type does not match operand type}}
%1 = cir.complex.real_ptr %0 : !cir.ptr<!cir.complex<!cir.double>> -> !cir.ptr<!cir.float>
cir.return
diff --git a/clang/test/CIR/IR/invalid-throw.cir b/clang/test/CIR/IR/invalid-throw.cir
index 53582a11b285e..06a402a68f678 100644
--- a/clang/test/CIR/IR/invalid-throw.cir
+++ b/clang/test/CIR/IR/invalid-throw.cir
@@ -5,7 +5,7 @@
module {
cir.func dso_local @throw_without_type_info() {
- %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a"]
+ %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a"] {alignment = 4 : i64}
// expected-error @below {{'cir.throw' op 'type_info' symbol attribute missing}}
cir.throw %0 : !cir.ptr<!s32i>
cir.unreachable
diff --git a/clang/test/CIR/IR/invalid-try-catch.cir b/clang/test/CIR/IR/invalid-try-catch.cir
index 94df4b63ed629..c11abb9dd449b 100644
--- a/clang/test/CIR/IR/invalid-try-catch.cir
+++ b/clang/test/CIR/IR/invalid-try-catch.cir
@@ -59,7 +59,7 @@ cir.func dso_local @invalid_catch_empty_block() {
module {
cir.func dso_local @invalid_catch_not_terminated() {
- %a = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init]
+ %a = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}
cir.scope {
cir.try {
cir.yield
diff --git a/clang/test/CIR/IR/invalid-vector.cir b/clang/test/CIR/IR/invalid-vector.cir
index 7e6485207b196..6152ca4a7a948 100644
--- a/clang/test/CIR/IR/invalid-vector.cir
+++ b/clang/test/CIR/IR/invalid-vector.cir
@@ -14,7 +14,7 @@ cir.global external @vec_b = #cir.zero : !cir.vector<4 x !cir.array<!s32i x 10>>
cir.func @invalid_scalable_vec_syntax() {
// expected-error at +2 {{missing closing `]` for scalable dim size}}
// expected-error @below {{expected ']'}}
- %3 = cir.alloca !cir.vector<[1 x] !s32i>, !cir.ptr<!cir.vector<[1] x !s32i>>
+ %3 = cir.alloca !cir.vector<[1 x] !s32i>, !cir.ptr<!cir.vector<[1] x !s32i>> {alignment = 4 : i64}
cir.return
}
diff --git a/clang/test/CIR/IR/resume-flat.cir b/clang/test/CIR/IR/resume-flat.cir
index 9c047dbf995a4..79f7b4c827ac7 100644
--- a/clang/test/CIR/IR/resume-flat.cir
+++ b/clang/test/CIR/IR/resume-flat.cir
@@ -6,8 +6,8 @@
module {
cir.func private @flattened_resume() {
- %exception_addr = cir.alloca !cir.ptr<!void>, !cir.ptr<!cir.ptr<!void>>, ["exception", init]
- %type_id_addr = cir.alloca !u32i, !cir.ptr<!u32i>, ["type_id", init]
+ %exception_addr = cir.alloca !cir.ptr<!void>, !cir.ptr<!cir.ptr<!void>>, ["exception", init] {alignment = 8 : i64}
+ %type_id_addr = cir.alloca !u32i, !cir.ptr<!u32i>, ["type_id", init] {alignment = 4 : i64}
%exception = cir.load %exception_addr : !cir.ptr<!cir.ptr<!void>>, !cir.ptr<!void>
%type_id = cir.load %type_id_addr : !cir.ptr<!u32i>, !u32i
cir.resume.flat %exception, %type_id
diff --git a/clang/test/CIR/IR/struct.cir b/clang/test/CIR/IR/struct.cir
index e1c612ea11239..73d6375a6fcfc 100644
--- a/clang/test/CIR/IR/struct.cir
+++ b/clang/test/CIR/IR/struct.cir
@@ -68,8 +68,8 @@ module {
}
cir.func @structs() {
- %0 = cir.alloca !cir.ptr<!cir.record<struct "Sc" {!u8i, !u16i, !u32i}>>, !cir.ptr<!cir.ptr<!cir.record<struct "Sc" {!u8i, !u16i, !u32i}>>>, ["sc", init]
- %1 = cir.alloca !cir.ptr<!cir.record<union "U" incomplete>>, !cir.ptr<!cir.ptr<!cir.record<union "U" incomplete>>>, ["u", init]
+ %0 = cir.alloca !cir.ptr<!cir.record<struct "Sc" {!u8i, !u16i, !u32i}>>, !cir.ptr<!cir.ptr<!cir.record<struct "Sc" {!u8i, !u16i, !u32i}>>>, ["sc", init] {alignment = 8 : i64}
+ %1 = cir.alloca !cir.ptr<!cir.record<union "U" incomplete>>, !cir.ptr<!cir.ptr<!cir.record<union "U" incomplete>>>, ["u", init] {alignment = 8 : i64}
cir.return
}
diff --git a/clang/test/CIR/IR/throw.cir b/clang/test/CIR/IR/throw.cir
index e7a1bf4f2f283..a9b48a63fecda 100644
--- a/clang/test/CIR/IR/throw.cir
+++ b/clang/test/CIR/IR/throw.cir
@@ -15,9 +15,9 @@ cir.func @throw_with_no_return() {
// CHECK: }
cir.func @throw_with_no_return_2(%arg0: !s32i, %arg1: !s32i) -> !s32i {
- %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init]
- %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["b", init]
- %2 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"]
+ %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}
+ %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["b", init] {alignment = 4 : i64}
+ %2 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>
cir.store %arg1, %1 : !s32i, !cir.ptr<!s32i>
cir.scope {
diff --git a/clang/test/CIR/IR/vector.cir b/clang/test/CIR/IR/vector.cir
index ac5d0453b1b7e..73401f5ef4d73 100644
--- a/clang/test/CIR/IR/vector.cir
+++ b/clang/test/CIR/IR/vector.cir
@@ -20,10 +20,10 @@ cir.global external @vec_d = #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2>
// CIR-SAME: !s32i, #cir.int<3> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
cir.func @vec_int_test() {
- %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
- %1 = cir.alloca !cir.vector<3 x !s32i>, !cir.ptr<!cir.vector<3 x !s32i>>, ["b"]
- %2 = cir.alloca !cir.vector<2 x !s32i>, !cir.ptr<!cir.vector<2 x !s32i>>, ["c"]
- %3 = cir.alloca !cir.vector<[1] x !s32i>, !cir.ptr<!cir.vector<[1] x !s32i>>, ["d"]
+ %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"] {alignment = 16 : i64}
+ %1 = cir.alloca !cir.vector<3 x !s32i>, !cir.ptr<!cir.vector<3 x !s32i>>, ["b"] {alignment = 16 : i64}
+ %2 = cir.alloca !cir.vector<2 x !s32i>, !cir.ptr<!cir.vector<2 x !s32i>>, ["c"] {alignment = 8 : i64}
+ %3 = cir.alloca !cir.vector<[1] x !s32i>, !cir.ptr<!cir.vector<[1] x !s32i>>, ["d"] {alignment = 4 : i64}
cir.return
}
@@ -36,7 +36,7 @@ cir.func @vec_int_test() {
// CHECK: }
cir.func @vec_double_test() {
- %0 = cir.alloca !cir.vector<2 x !cir.double>, !cir.ptr<!cir.vector<2 x !cir.double>>, ["a"]
+ %0 = cir.alloca !cir.vector<2 x !cir.double>, !cir.ptr<!cir.vector<2 x !cir.double>>, ["a"] {alignment = 16 : i64}
cir.return
}
@@ -46,7 +46,7 @@ cir.func @vec_double_test() {
// CHECK: }
cir.func @local_vector_create_test() {
- %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init]
+ %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init] {alignment = 16 : i64}
%1 = cir.const #cir.int<1> : !s32i
%2 = cir.const #cir.int<2> : !s32i
%3 = cir.const #cir.int<3> : !s32i
@@ -68,8 +68,8 @@ cir.func @local_vector_create_test() {
// CHECK: }
cir.func @vector_extract_element_test() {
- %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["d", init]
- %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init]
+ %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["d", init] {alignment = 16 : i64}
+ %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init] {alignment = 4 : i64}
%2 = cir.const #cir.int<1> : !s32i
%3 = cir.const #cir.int<2> : !s32i
%4 = cir.const #cir.int<3> : !s32i
@@ -100,7 +100,7 @@ cir.func @vector_extract_element_test() {
// CHECK: }
cir.func @vector_insert_element_test() {
- %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init]
+ %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init] {alignment = 16 : i64}
%1 = cir.const #cir.int<1> : !s32i
%2 = cir.const #cir.int<2> : !s32i
%3 = cir.const #cir.int<3> : !s32i
@@ -138,9 +138,9 @@ cir.func @vector_insert_element_test() {
// CHECK: }
cir.func @vector_compare_test() {
- %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
- %1 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["b"]
- %2 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["o", init]
+ %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"] {alignment = 16 : i64}
+ %1 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["b"] {alignment = 16 : i64}
+ %2 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["o", init] {alignment = 16 : i64}
%3 = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
cir.store %3, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
%4 = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
@@ -168,9 +168,9 @@ cir.func @vector_compare_test() {
// CHECK: }
cir.func @vector_shuffle_dynamic_test() {
- %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
- %1 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["b"]
- %2 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["r", init]
+ %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"] {alignment = 16 : i64}
+ %1 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["b"] {alignment = 16 : i64}
+ %2 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["r", init] {alignment = 16 : i64}
%3 = cir.load align(16) %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
%4 = cir.load align(16) %1 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
%5 = cir.vec.shuffle.dynamic %3 : !cir.vector<4 x !s32i>, %4 : !cir.vector<4 x !s32i>
@@ -190,8 +190,8 @@ cir.func @vector_shuffle_dynamic_test() {
// CHECK: }
cir.func @vector_splat_test() {
- %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init]
- %1 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["shl", init]
+ %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init] {alignment = 16 : i64}
+ %1 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["shl", init] {alignment = 16 : i64}
%2 = cir.const #cir.int<1> : !s32i
%3 = cir.const #cir.int<2> : !s32i
%4 = cir.const #cir.int<3> : !s32i
diff --git a/clang/test/CIR/Lowering/alloca.cir b/clang/test/CIR/Lowering/alloca.cir
new file mode 100644
index 0000000000000..c1e6f6f2181c9
--- /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_i32
+ // CHECK: %[[SIZE:.*]] = llvm.mlir.constant(1 : i64) : i64
+ // CHECK-NEXT: %{{.*}} = llvm.alloca %[[SIZE]] x i32 {alignment = 4 : i64} : (i64) -> !llvm.ptr
+ cir.func @alloca_i32() {
+ %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["var_name"] {alignment = 4 : i64}
+ cir.return
+ }
+}
diff --git a/clang/test/CIR/Transforms/complex-create-fold.cir b/clang/test/CIR/Transforms/complex-create-fold.cir
index 370acaecc2222..918a99686de04 100644
--- a/clang/test/CIR/Transforms/complex-create-fold.cir
+++ b/clang/test/CIR/Transforms/complex-create-fold.cir
@@ -4,8 +4,8 @@
module {
cir.func @fold_complex_create_test() -> !cir.complex<!s32i> {
- %0 = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["__retval"]
- %1 = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["c", init]
+ %0 = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["__retval"] {alignment = 4 : i64}
+ %1 = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["c", init] {alignment = 4 : i64}
%2 = cir.const #cir.int<1> : !s32i
%3 = cir.const #cir.int<2> : !s32i
%4 = cir.complex.create %2, %3 : !s32i -> !cir.complex<!s32i>
diff --git a/clang/test/CIR/Transforms/complex-imag-fold.cir b/clang/test/CIR/Transforms/complex-imag-fold.cir
index 56e062d5285a2..4955c7d743672 100644
--- a/clang/test/CIR/Transforms/complex-imag-fold.cir
+++ b/clang/test/CIR/Transforms/complex-imag-fold.cir
@@ -4,7 +4,7 @@
module {
cir.func @fold_complex_imag_test() -> !s32i {
- %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"]
+ %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
%2 = cir.const #cir.const_complex<#cir.int<1> : !s32i, #cir.int<2> : !s32i> : !cir.complex<!s32i>
%4 = cir.complex.imag %2 : !cir.complex<!s32i> -> !s32i
cir.store %4, %0 : !s32i, !cir.ptr<!s32i>
diff --git a/clang/test/CIR/Transforms/complex-real-fold.cir b/clang/test/CIR/Transforms/complex-real-fold.cir
index 29b03276f822d..8ce34719ec654 100644
--- a/clang/test/CIR/Transforms/complex-real-fold.cir
+++ b/clang/test/CIR/Transforms/complex-real-fold.cir
@@ -4,7 +4,7 @@
module {
cir.func @fold_complex_real_test() -> !s32i {
- %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"]
+ %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
%2 = cir.const #cir.const_complex<#cir.int<1> : !s32i, #cir.int<2> : !s32i> : !cir.complex<!s32i>
%4 = cir.complex.real %2 : !cir.complex<!s32i> -> !s32i
cir.store %4, %0 : !s32i, !cir.ptr<!s32i>
diff --git a/clang/test/CIR/Transforms/ternary-fold.cir b/clang/test/CIR/Transforms/ternary-fold.cir
index 718906f5c6ee5..02d450b4d93de 100644
--- a/clang/test/CIR/Transforms/ternary-fold.cir
+++ b/clang/test/CIR/Transforms/ternary-fold.cir
@@ -51,7 +51,7 @@ module {
// CHECK-NEXT: }
cir.func @non_simplifiable_ternary(%arg0 : !cir.bool) -> !s32i {
- %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init]
+ %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}
%1 = cir.ternary (%arg0, true {
%2 = cir.const #cir.int<42> : !s32i
cir.yield %2 : !s32i
diff --git a/clang/test/CIR/Transforms/vector-extract-fold.cir b/clang/test/CIR/Transforms/vector-extract-fold.cir
index 14fed50454b87..5d0dffccc91f4 100644
--- a/clang/test/CIR/Transforms/vector-extract-fold.cir
+++ b/clang/test/CIR/Transforms/vector-extract-fold.cir
@@ -4,7 +4,7 @@
module {
cir.func @fold_extract_vector_op_test() {
- %init = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init]
+ %init = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init] {alignment = 4 : i64}
%const_vec = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
%index = cir.const #cir.int<1> : !s32i
%ele = cir.vec.extract %const_vec[%index : !s32i] : !cir.vector<4 x !s32i>
@@ -17,7 +17,7 @@ module {
// CHECK: cir.store %[[VALUE]], %[[INIT]] : !s32i, !cir.ptr<!s32i>
cir.func @fold_extract_vector_op_index_out_of_bounds_test() {
- %init = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init]
+ %init = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init] {alignment = 4 : i64}
%const_vec = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
%index = cir.const #cir.int<9> : !s32i
%ele = cir.vec.extract %const_vec[%index : !s32i] : !cir.vector<4 x !s32i>
More information about the cfe-commits
mailing list