[clang] Make CIR assembly formats strict properties compatible (PR #226600)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 25 16:02:48 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Mehdi Amini (joker-eph)
<details>
<summary>Changes</summary>
Bind inherent attributes explicitly in CIR operation formats and update assembly tests for the resulting syntax.
Assisted-by: Codex
---
Patch is 432.40 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/226600.diff
80 Files Affected:
- (modified) clang/include/clang/CIR/Dialect/IR/CIROps.td (+35-10)
- (modified) clang/test/CIR/Analysis/alias-analysis-modref.cir (+1-1)
- (modified) clang/test/CIR/Analysis/alias-analysis-underlying-object.cir (+22-22)
- (modified) clang/test/CIR/CodeGen/aapcs-volatile-bitfields.c (+7-7)
- (modified) clang/test/CIR/CodeGen/alignment.c (+3-3)
- (modified) clang/test/CIR/CodeGen/atomic.c (+6-6)
- (modified) clang/test/CIR/CodeGen/bitfield-union.c (+2-2)
- (modified) clang/test/CIR/CodeGen/bitfields.c (+11-11)
- (modified) clang/test/CIR/CodeGen/bitfields.cpp (+4-4)
- (modified) clang/test/CIR/CodeGen/bitfields_be.c (+4-4)
- (modified) clang/test/CIR/CodeGen/bitint-memory.c (+10-10)
- (modified) clang/test/CIR/CodeGen/bitint-record-layout.c (+16-16)
- (modified) clang/test/CIR/CodeGen/bitint-wide-be.c (+8-8)
- (modified) clang/test/CIR/CodeGen/bitint-wide.c (+7-7)
- (modified) clang/test/CIR/CodeGen/bitint.c (+2-2)
- (modified) clang/test/CIR/CodeGen/bool-bitfield.cpp (+9-9)
- (modified) clang/test/CIR/CodeGen/builtin-call.cpp (+1-2)
- (modified) clang/test/CIR/CodeGen/compound_literal.c (+21-21)
- (modified) clang/test/CIR/CodeGen/cxx-default-init.cpp (+2-2)
- (modified) clang/test/CIR/CodeGen/delete-array-aligned.cpp (+5-5)
- (modified) clang/test/CIR/CodeGen/delete-array-overaligned-cookie.cpp (+2-2)
- (modified) clang/test/CIR/CodeGen/delete-array-throwing-dtor.cpp (+1-1)
- (modified) clang/test/CIR/CodeGen/delete-array-unsized-dtor.cpp (+4-4)
- (modified) clang/test/CIR/CodeGen/delete-array.cpp (+7-7)
- (modified) clang/test/CIR/CodeGen/empty-union.cpp (+1-1)
- (modified) clang/test/CIR/CodeGen/finegrain-bitfield-access.cpp (+10-10)
- (modified) clang/test/CIR/CodeGen/fixed-point-literal.c (+6-6)
- (modified) clang/test/CIR/CodeGen/fp-contract.c (+2-2)
- (modified) clang/test/CIR/CodeGen/global-const-alignment.cpp (+2-2)
- (modified) clang/test/CIR/CodeGen/global-init-fenv.cpp (+8-8)
- (modified) clang/test/CIR/CodeGen/global-section.c (+3-3)
- (modified) clang/test/CIR/CodeGen/global-tls-dyn-init.cpp (+1-1)
- (modified) clang/test/CIR/CodeGen/globals.cpp (+1-1)
- (modified) clang/test/CIR/CodeGen/lambda.cpp (+1-1)
- (modified) clang/test/CIR/CodeGen/local-const-aggregate-name-clash.cpp (+2-2)
- (modified) clang/test/CIR/CodeGen/no-odr-use.cpp (+2-2)
- (modified) clang/test/CIR/CodeGen/non-odr-use-non-ref.cpp (+1-1)
- (modified) clang/test/CIR/CodeGen/nonzeroinit-struct.cpp (+7-7)
- (modified) clang/test/CIR/CodeGen/paren-list-agg-init.cpp (+8-8)
- (modified) clang/test/CIR/CodeGen/pointer-to-data-member-indirect-field.cpp (+2-2)
- (modified) clang/test/CIR/CodeGen/pointer-width-32bit.cpp (+3-3)
- (modified) clang/test/CIR/CodeGen/pragma-fenv_access.c (+367-367)
- (modified) clang/test/CIR/CodeGen/predefined-expr.c (+1-1)
- (modified) clang/test/CIR/CodeGen/source-loc.cpp (+1-1)
- (modified) clang/test/CIR/CodeGen/static-local-in-ctor.cpp (+2-2)
- (modified) clang/test/CIR/CodeGen/static-local-info.cpp (+4-4)
- (modified) clang/test/CIR/CodeGen/struct.cpp (+1-1)
- (modified) clang/test/CIR/CodeGen/tls-model.cpp (+32-32)
- (modified) clang/test/CIR/CodeGen/union-agg-init.c (+2-2)
- (modified) clang/test/CIR/CodeGen/vbase.cpp (+1-1)
- (modified) clang/test/CIR/CodeGen/vector-strict-fp.cpp (+5-5)
- (modified) clang/test/CIR/CodeGen/volatile.cpp (+2-2)
- (modified) clang/test/CIR/CodeGen/vtt.cpp (+2-2)
- (modified) clang/test/CIR/CodeGenCUDA/address-spaces.cu (+5-5)
- (modified) clang/test/CIR/CodeGenCUDA/device-stub.cu (+5-5)
- (modified) clang/test/CIR/CodeGenCUDA/kernel-call.cu (+1-1)
- (modified) clang/test/CIR/CodeGenCXX/global-refs.cpp (+18-18)
- (modified) clang/test/CIR/CodeGenCXX/init-priority-attr.cpp (+5-5)
- (modified) clang/test/CIR/CodeGenCXX/vtable-linkage.cpp (+38-38)
- (modified) clang/test/CIR/CodeGenCXX/zero_init_bases.cpp (+3-3)
- (modified) clang/test/CIR/IR/attribute-visibility.cir (+8-8)
- (modified) clang/test/CIR/IR/fenv.cir (+51-52)
- (modified) clang/test/CIR/IR/invalid-cast.cir (+5-5)
- (modified) clang/test/CIR/IR/invalid-cmp.cir (+3-5)
- (modified) clang/test/CIR/IR/invalid-delete-array.cir (+2-2)
- (modified) clang/test/CIR/IR/invalid-static-local-info.cir (+1-1)
- (modified) clang/test/CIR/IR/invalid-static-local.cir (+3-3)
- (modified) clang/test/CIR/IR/invalid-tls.cir (+1-1)
- (modified) clang/test/CIR/IR/invalid-vtable.cir (+7-7)
- (modified) clang/test/CIR/IR/static-local-info.cir (+6-6)
- (modified) clang/test/CIR/IR/static-local.cir (+5-5)
- (modified) clang/test/CIR/IR/string-trailing-zeros.cir (+2-2)
- (modified) clang/test/CIR/IR/var-registration.cir (+2-2)
- (modified) clang/test/CIR/IR/vtable-addrpt.cir (+1-1)
- (modified) clang/test/CIR/IR/vtable-attr.cir (+4-4)
- (modified) clang/test/CIR/IR/vtt-addrpoint.cir (+3-3)
- (modified) clang/test/CIR/Lowering/call-llvm-intrinsic.cir (+2-2)
- (modified) clang/test/CIR/Lowering/fenv.cir (+54-56)
- (modified) clang/test/CIR/Lowering/vtt-addrpoint.cir (+3-3)
- (modified) clang/test/CIR/Transforms/vector-cmp-fold.cir (+3-4)
``````````diff
diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td
index 4996037ea5f56..cd1636f1f8510 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIROps.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td
@@ -327,7 +327,8 @@ def CIR_CastOp : CIR_Op<"cast", !listconcat([
let results = (outs CIR_AnyType:$result);
let assemblyFormat = [{
- enum($kind) $src `:` type($src) `->` type($result) attr-dict
+ enum($kind) $src `:` type($src) `->` type($result)
+ (`fenv` `(` $fenv^ `)`)? attr-dict
}];
let builders = [
@@ -2632,7 +2633,8 @@ def CIR_CmpOp : CIR_Op<"cmp",
let results = (outs CIR_BoolType:$result);
let assemblyFormat = [{
- enum($kind) $lhs `,` $rhs `:` type($lhs) attr-dict
+ enum($kind) $lhs `,` $rhs `:` type($lhs)
+ (`fenv` `(` $fenv^ `)`)? attr-dict
}];
let builders = [
@@ -2947,6 +2949,9 @@ class CIR_FPBinaryOp<string mnemonic, list<Trait> traits = []>
!listconcat(CIR_FenvOpTraits, traits),
CIR_DynamicMemoryEffects> {
let arguments = !con(commonArgs, (ins OptionalAttr<CIR_FenvAttr>:$fenv));
+ let assemblyFormat = [{
+ $lhs `,` $rhs `:` type($lhs) (`fenv` `(` $fenv^ `)`)? attr-dict
+ }];
let constrainedLLVMIntrinsic = mnemonic;
@@ -3475,6 +3480,12 @@ def CIR_GlobalOp : CIR_RegionBranchOpBase<"global", [
custom<GlobalOpTypeAndInitialValue>($sym_type, $initial_value,
$ctorRegion, $dtorRegion)
($annotations^)?
+ (`align` `(` $alignment^ `)`)?
+ (`ast` `(` $ast^ `)`)?
+ (`static_local_info` `(` $static_local_info^ `)`)?
+ (`section` `(` $section^ `)`)?
+ (`strictfp` $strictfp^)?
+ (`init_priority` `(` $init_priority^ `)`)?
attr-dict
}];
@@ -3871,6 +3882,7 @@ def CIR_SetBitfieldOp : CIR_Op<"set_bitfield"> {
let assemblyFormat = [{
(`align` `(` $alignment^ `)`)?
+ (`volatile` $is_volatile^)?
`(`$bitfield_info`,` $addr`:`qualified(type($addr))`,`
$src`:`type($src) `)` attr-dict `->` type($result) }];
@@ -3959,6 +3971,7 @@ def CIR_GetBitfieldOp : CIR_Op<"get_bitfield"> {
let assemblyFormat = [{
(`align` `(` $alignment^ `)`)?
+ (`volatile` $is_volatile^)?
`(`$bitfield_info `,` $addr attr-dict `:`
qualified(type($addr)) `)` `->` type($result) }];
@@ -4016,7 +4029,7 @@ def CIR_GetMemberOp : CIR_Op<"get_member", [Pure]> {
let results = (outs Res<CIR_PointerType, "">:$result);
let assemblyFormat = [{
- $addr `[` $index_attr `]` attr-dict
+ $addr `[` $index_attr `]` `{` `name` `=` $name `}` attr-dict
`:` qualified(type($addr)) `->` qualified(type($result))
}];
@@ -4527,7 +4540,8 @@ def CIR_LLVMIntrinsicCallOp : CIR_Op<"call_llvm_intrinsic"> {
let skipDefaultBuilders = 1;
let assemblyFormat = [{
- $intrinsic_name $arg_ops `:` functional-type($arg_ops, $result) attr-dict
+ $intrinsic_name $arg_ops `:` functional-type($arg_ops, $result)
+ (`fastmath` `(` $fastmath_flags^ `)`)? attr-dict
}];
let builders = [
@@ -4591,7 +4605,12 @@ def CIR_DeleteArrayOp : CIR_Op<"delete_array"> {
];
let assemblyFormat = [{
- $address `:` qualified(type($address)) (`dtor_may_throw` $dtor_may_throw^)?
+ $address `:` qualified(type($address))
+ `delete_fn` `(` $delete_fn `)`
+ `delete_params` `(` $delete_params `)`
+ (`element_dtor` `(` $element_dtor^ `)`)?
+ (`dtor_may_throw` $dtor_may_throw^)?
+ `element_align` `(` $element_align `)`
attr-dict
}];
@@ -6101,7 +6120,7 @@ def CIR_VecCmpOp : CIR_Op<"vec.cmp",
let assemblyFormat = [{
`(` enum($kind) `,` $lhs `,` $rhs `)` `:` qualified(type($lhs)) `,`
- qualified(type($result)) attr-dict
+ qualified(type($result)) (`fenv` `(` $fenv^ `)`)? attr-dict
}];
let builders = [
@@ -7451,7 +7470,7 @@ class CIR_UnaryFPToFPBuiltinOp<string mnemonic, string llvmOpName>
OptionalAttr<CIR_FenvAttr>:$fenv);
let results = (outs CIR_AnyFloatOrVecOfFloatType:$result);
- let assemblyFormat = "$src `:` type($src) attr-dict";
+ let assemblyFormat = "$src `:` type($src) (`fenv` `(` $fenv^ `)`)? attr-dict";
let builders = [
OpBuilder<(ins "mlir::Value":$src), [{
@@ -7779,7 +7798,8 @@ class CIR_UnaryFPToIntBuiltinOp<string mnemonic, string llvmOpName>
}];
let assemblyFormat = [{
- $src `:` type($src) `->` type($result) attr-dict
+ $src `:` type($src) `->` type($result)
+ (`fenv` `(` $fenv^ `)`)? attr-dict
}];
let builders = [
@@ -7845,7 +7865,8 @@ class CIR_BinaryFPToFPBuiltinOp<string mnemonic, string llvmOpName>
let results = (outs CIR_AnyFloatOrVecOfFloatType:$result);
let assemblyFormat = [{
- $lhs `,` $rhs `:` qualified(type($lhs)) attr-dict
+ $lhs `,` $rhs `:` qualified(type($lhs))
+ (`fenv` `(` $fenv^ `)`)? attr-dict
}];
let builders = [
@@ -7996,7 +8017,9 @@ class CIR_TernaryFPToFPBuiltinOp<string mnemonic, string llvmOpName>
let results = (outs CIR_AnyFloatOrVecOfFloatType:$result);
- let assemblyFormat = "$a `,` $b `,` $c `:` type($a) attr-dict";
+ let assemblyFormat = [{
+ $a `,` $b `,` $c `:` type($a) (`fenv` `(` $fenv^ `)`)? attr-dict
+ }];
let builders = [
OpBuilder<(ins "mlir::Type":$result, "mlir::Value":$a, "mlir::Value":$b,
@@ -9422,6 +9445,7 @@ def CIR_AtomicTestAndSetOp : CIR_Op<"atomic.test_and_set"> {
let assemblyFormat = [{
enum($mem_order) $ptr
+ (`align` `(` $alignment^ `)`)?
(`volatile` $is_volatile^)?
`:` qualified(type($ptr)) `->` qualified(type($result)) attr-dict
}];
@@ -9451,6 +9475,7 @@ def CIR_AtomicClearOp : CIR_Op<"atomic.clear"> {
let assemblyFormat = [{
enum($mem_order) $ptr
+ (`align` `(` $alignment^ `)`)?
(`volatile` $is_volatile^)?
`:` qualified(type($ptr)) attr-dict
}];
diff --git a/clang/test/CIR/Analysis/alias-analysis-modref.cir b/clang/test/CIR/Analysis/alias-analysis-modref.cir
index d02a6f06bfc3e..b39922fee1118 100644
--- a/clang/test/CIR/Analysis/alias-analysis-modref.cir
+++ b/clang/test/CIR/Analysis/alias-analysis-modref.cir
@@ -51,6 +51,6 @@ cir.func @modref_load() {
!s32i = !cir.int<s, 32>
cir.func @modref_fenv(%a: !cir.float, %b: !cir.float) {
%x = cir.alloca "x" align(4) : !cir.ptr<!s32i> {test.ptr = "x"}
- %0 = cir.fadd %a, %b : !cir.float {fenv = #cir.fenv<>, test.ptr = "fadd_op"}
+ %0 = cir.fadd %a, %b : !cir.float fenv(#cir.fenv<>) {test.ptr = "fadd_op"}
cir.return
}
diff --git a/clang/test/CIR/Analysis/alias-analysis-underlying-object.cir b/clang/test/CIR/Analysis/alias-analysis-underlying-object.cir
index 3f45ee74c59dc..017ae426a7a22 100644
--- a/clang/test/CIR/Analysis/alias-analysis-underlying-object.cir
+++ b/clang/test/CIR/Analysis/alias-analysis-underlying-object.cir
@@ -167,13 +167,13 @@ cir.func @ptr_stride_dynamic_offset(%n: !s32i) {
cir.func @get_member_distinct_allocas() {
%s1 = cir.alloca "s1" align(4) : !cir.ptr<!rec_S> {test.ptr = "s1"}
%s2 = cir.alloca "s2" align(4) : !cir.ptr<!rec_S> {test.ptr = "s2"}
- %m1_0 = cir.get_member %s1[0] {name = "x", test.ptr = "m1_0"}
+ %m1_0 = cir.get_member %s1[0] {name = "x"} {test.ptr = "m1_0"}
: !cir.ptr<!rec_S> -> !cir.ptr<!s32i>
- %m1_1 = cir.get_member %s1[1] {name = "y", test.ptr = "m1_1"}
+ %m1_1 = cir.get_member %s1[1] {name = "y"} {test.ptr = "m1_1"}
: !cir.ptr<!rec_S> -> !cir.ptr<!s32i>
- %m2_0 = cir.get_member %s2[0] {name = "x", test.ptr = "m2_0"}
+ %m2_0 = cir.get_member %s2[0] {name = "x"} {test.ptr = "m2_0"}
: !cir.ptr<!rec_S> -> !cir.ptr<!s32i>
- %m2_1 = cir.get_member %s2[1] {name = "y", test.ptr = "m2_1"}
+ %m2_1 = cir.get_member %s2[1] {name = "y"} {test.ptr = "m2_1"}
: !cir.ptr<!rec_S> -> !cir.ptr<!s32i>
cir.return
}
@@ -197,13 +197,13 @@ cir.func @get_member_distinct_allocas() {
!rec_Outer = !cir.struct<"Outer" {data !rec_Inner, data !s32i}>
cir.func @get_member_nested_records() {
%o = cir.alloca "o" align(4) : !cir.ptr<!rec_Outer> {test.ptr = "o"}
- %inner = cir.get_member %o[0] {name = "inner", test.ptr = "inner"}
+ %inner = cir.get_member %o[0] {name = "inner"} {test.ptr = "inner"}
: !cir.ptr<!rec_Outer> -> !cir.ptr<!rec_Inner>
- %i0 = cir.get_member %inner[0] {name = "x", test.ptr = "i0"}
+ %i0 = cir.get_member %inner[0] {name = "x"} {test.ptr = "i0"}
: !cir.ptr<!rec_Inner> -> !cir.ptr<!s32i>
- %i1 = cir.get_member %inner[1] {name = "y", test.ptr = "i1"}
+ %i1 = cir.get_member %inner[1] {name = "y"} {test.ptr = "i1"}
: !cir.ptr<!rec_Inner> -> !cir.ptr<!s32i>
- %z = cir.get_member %o[1] {name = "z", test.ptr = "z"}
+ %z = cir.get_member %o[1] {name = "z"} {test.ptr = "z"}
: !cir.ptr<!rec_Outer> -> !cir.ptr<!s32i>
cir.return
}
@@ -220,9 +220,9 @@ cir.func @get_member_nested_records() {
!rec_U = !cir.union<"U" {data !s32i, data !u8i}>
cir.func @get_member_union() {
%u = cir.alloca "u" align(4) : !cir.ptr<!rec_U> {test.ptr = "u"}
- %m_int = cir.get_member %u[0] {name = "i", test.ptr = "m_int"}
+ %m_int = cir.get_member %u[0] {name = "i"} {test.ptr = "m_int"}
: !cir.ptr<!rec_U> -> !cir.ptr<!s32i>
- %m_char = cir.get_member %u[1] {name = "c", test.ptr = "m_char"}
+ %m_char = cir.get_member %u[1] {name = "c"} {test.ptr = "m_char"}
: !cir.ptr<!rec_U> -> !cir.ptr<!u8i>
cir.return
}
@@ -287,9 +287,9 @@ cir.func @get_element_of_records() {
: !cir.ptr<!cir.array<!rec_P x 2>> -> !cir.ptr<!rec_P>
%e1 = cir.get_element %arr[%one : !s32i] {test.ptr = "e1"}
: !cir.ptr<!cir.array<!rec_P x 2>> -> !cir.ptr<!rec_P>
- %e0_y = cir.get_member %e0[1] {name = "y", test.ptr = "e0_y"}
+ %e0_y = cir.get_member %e0[1] {name = "y"} {test.ptr = "e0_y"}
: !cir.ptr<!rec_P> -> !cir.ptr<!s32i>
- %e1_y = cir.get_member %e1[1] {name = "y", test.ptr = "e1_y"}
+ %e1_y = cir.get_member %e1[1] {name = "y"} {test.ptr = "e1_y"}
: !cir.ptr<!rec_P> -> !cir.ptr<!s32i>
cir.return
}
@@ -342,9 +342,9 @@ cir.func @base_and_derived_class_addr(%d: !cir.ptr<!rec_Derived>)
-> !cir.ptr<!rec_Base> {test.ptr = "base"}
%derived = cir.derived_class_addr %base : !cir.ptr<!rec_Base> nonnull [4]
-> !cir.ptr<!rec_Derived> {test.ptr = "derived"}
- %first = cir.get_member %d[0] {name = "x", test.ptr = "first"}
+ %first = cir.get_member %d[0] {name = "x"} {test.ptr = "first"}
: !cir.ptr<!rec_Derived> -> !cir.ptr<!s32i>
- %basedata = cir.get_member %base[0] {name = "b", test.ptr = "basedata"}
+ %basedata = cir.get_member %base[0] {name = "b"} {test.ptr = "basedata"}
: !cir.ptr<!rec_Base> -> !cir.ptr<!u8i>
cir.return
}
@@ -373,9 +373,9 @@ cir.func @base_and_derived_class_maybe_null(%d: !cir.ptr<!rec_Derived>)
-> !cir.ptr<!rec_Base> {test.ptr = "base"}
%derived = cir.derived_class_addr %base : !cir.ptr<!rec_Base> [4]
-> !cir.ptr<!rec_Derived> {test.ptr = "derived"}
- %first = cir.get_member %d[0] {name = "x", test.ptr = "first"}
+ %first = cir.get_member %d[0] {name = "x"} {test.ptr = "first"}
: !cir.ptr<!rec_Derived> -> !cir.ptr<!s32i>
- %basedata = cir.get_member %base[0] {name = "b", test.ptr = "basedata"}
+ %basedata = cir.get_member %base[0] {name = "b"} {test.ptr = "basedata"}
: !cir.ptr<!rec_Base> -> !cir.ptr<!u8i>
cir.return
}
@@ -431,9 +431,9 @@ cir.func @complex_parts_distinct_allocas() {
!rec_S = !cir.struct<"S" {data !s32i, data !s32i}>
cir.func @unknown_access_size() {
%s = cir.alloca "s" align(4) : !cir.ptr<!rec_S> {test.ptr = "s"}
- %m0 = cir.get_member %s[0] {name = "x", test.ptr = "m0"}
+ %m0 = cir.get_member %s[0] {name = "x"} {test.ptr = "m0"}
: !cir.ptr<!rec_S> -> !cir.ptr<!s32i>
- %m1 = cir.get_member %s[1] {name = "y", test.ptr = "m1"}
+ %m1 = cir.get_member %s[1] {name = "y"} {test.ptr = "m1"}
: !cir.ptr<!rec_S> -> !cir.ptr<!s32i>
%vp = cir.cast bitcast %m1 : !cir.ptr<!s32i> -> !cir.ptr<!cir.void>
{test.ptr = "vp"}
@@ -451,9 +451,9 @@ cir.func @unknown_access_size() {
!rec_S = !cir.struct<"S" {data !s32i, data !s32i}>
cir.func @offsets_from_pointer_argument(%s: !cir.ptr<!rec_S>)
attributes {test.ptr = "func"} {
- %px = cir.get_member %s[0] {name = "x", test.ptr = "px"}
+ %px = cir.get_member %s[0] {name = "x"} {test.ptr = "px"}
: !cir.ptr<!rec_S> -> !cir.ptr<!s32i>
- %py = cir.get_member %s[1] {name = "y", test.ptr = "py"}
+ %py = cir.get_member %s[1] {name = "y"} {test.ptr = "py"}
: !cir.ptr<!rec_S> -> !cir.ptr<!s32i>
cir.return
}
@@ -482,9 +482,9 @@ cir.func @offsets_from_pointer_argument(%s: !cir.ptr<!rec_S>)
!rec_S = !cir.struct<"S" {data !cir.int<s, 19, bitint>, data !cir.int<s, 19, bitint>}>
cir.func @bitint_struct_elements(%s: !cir.ptr<!rec_S>)
attributes {test.ptr = "func"} {
- %px = cir.get_member %s[0] {name = "x", test.ptr = "px"}
+ %px = cir.get_member %s[0] {name = "x"} {test.ptr = "px"}
: !cir.ptr<!rec_S> -> !cir.ptr<!cir.int<s, 19, bitint>>
- %py = cir.get_member %s[1] {name = "y", test.ptr = "py"}
+ %py = cir.get_member %s[1] {name = "y"} {test.ptr = "py"}
: !cir.ptr<!rec_S> -> !cir.ptr<!cir.int<s, 19, bitint>>
%one = cir.const #cir.int<1> : !s32i
%px_plus_one = cir.ptr_stride %px, %one : (!cir.ptr<!cir.int<s, 19, bitint>>, !s32i)
diff --git a/clang/test/CIR/CodeGen/aapcs-volatile-bitfields.c b/clang/test/CIR/CodeGen/aapcs-volatile-bitfields.c
index 2fb6856d4f6b0..3f8f991921a97 100644
--- a/clang/test/CIR/CodeGen/aapcs-volatile-bitfields.c
+++ b/clang/test/CIR/CodeGen/aapcs-volatile-bitfields.c
@@ -85,7 +85,7 @@ int check_load(st1 *s1) {
// CIR: cir.func {{.*}} @check_load
// CIR: [[LOAD:%.*]] = cir.load align(8) {{.*}} : !cir.ptr<!cir.ptr<!rec_st1>>, !cir.ptr<!rec_st1>
// CIR: [[MEMBER:%.*]] = cir.get_member [[LOAD]][0] {name = "b"} : !cir.ptr<!rec_st1> -> !cir.ptr<!u16i>
-// CIR: [[BITFI:%.*]] = cir.get_bitfield align(4) (#bfi_b, [[MEMBER]] {is_volatile} : !cir.ptr<!u16i>) -> !u32i
+// CIR: [[BITFI:%.*]] = cir.get_bitfield align(4) volatile(#bfi_b, [[MEMBER]] : !cir.ptr<!u16i>) -> !u32i
// CIR: [[CAST:%.*]] = cir.cast integral [[BITFI]] : !u32i -> !s32i
// CIR: cir.store [[CAST]], [[RETVAL:%.*]] : !s32i, !cir.ptr<!s32i>
// CIR: [[RET:%.*]] = cir.load [[RETVAL]] : !cir.ptr<!s32i>, !s32i
@@ -120,7 +120,7 @@ int check_load_exception(st3 *s3) {
// CIR: cir.func {{.*}} @check_load_exception
// CIR: [[LOAD:%.*]] = cir.load align(8) {{.*}} : !cir.ptr<!cir.ptr<!rec_st3>>, !cir.ptr<!rec_st3>
// CIR: [[MEMBER:%.*]] = cir.get_member [[LOAD]][3] {name = "b"} : !cir.ptr<!rec_st3> -> !cir.ptr<!u8i>
-// CIR: [[BITFI:%.*]] = cir.get_bitfield align(4) (#bfi_b1, [[MEMBER]] {is_volatile} : !cir.ptr<!u8i>) -> !u32i
+// CIR: [[BITFI:%.*]] = cir.get_bitfield align(4) volatile(#bfi_b1, [[MEMBER]] : !cir.ptr<!u8i>) -> !u32i
// CIR: [[CAST:%.*]] = cir.cast integral [[BITFI]] : !u32i -> !s32i
// CIR: cir.store [[CAST]], [[RETVAL:%.*]] : !s32i, !cir.ptr<!s32i>
// CIR: [[RET:%.*]] = cir.load [[RETVAL]] : !cir.ptr<!s32i>, !s32i
@@ -157,7 +157,7 @@ int clip_load_exception2(clip *c) {
// CIR: cir.func {{.*}} @clip_load_exception2
// CIR: [[LOAD:%.*]] = cir.load align(8) {{.*}} : !cir.ptr<!cir.ptr<!rec_clip>>, !cir.ptr<!rec_clip>
// CIR: [[MEMBER:%.*]] = cir.get_member [[LOAD]][0] {name = "a"} : !cir.ptr<!rec_clip> -> !cir.ptr<!cir.array<!u8i x 3>>
-// CIR: [[BITFI:%.*]] = cir.get_bitfield align(4) (#bfi_a1, [[MEMBER]] {is_volatile} : !cir.ptr<!cir.array<!u8i x 3>>) -> !s32i
+// CIR: [[BITFI:%.*]] = cir.get_bitfield align(4) volatile(#bfi_a1, [[MEMBER]] : !cir.ptr<!cir.array<!u8i x 3>>) -> !s32i
// CIR: cir.store [[BITFI]], [[RETVAL:%.*]] : !s32i, !cir.ptr<!s32i>
// CIR: [[RET:%.*]] = cir.load [[RETVAL]] : !cir.ptr<!s32i>, !s32i
// CIR: cir.return [[RET]] : !s32i
@@ -185,7 +185,7 @@ void check_store(st2 *s2) {
// CIR: [[CONST:%.*]] = cir.const #cir.int<1> : !s16i
// CIR: [[LOAD:%.*]] = cir.load align(8) {{.*}} : !cir.ptr<!cir.ptr<!rec_st2>>, !cir.ptr<!rec_st2>
// CIR: [[MEMBER:%.*]] = cir.get_member [[LOAD]][0] {name = "a"} : !cir.ptr<!rec_st2> -> !cir.ptr<!u32i>
-// CIR: [[SETBF:%.*]] = cir.set_bitfield align(8) (#bfi_a, [[MEMBER]] : !cir.ptr<!u32i>, [[CONST]] : !s16i) {is_volatile} -> !s16i
+// CIR: [[SETBF:%.*]] = cir.set_bitfield align(8) volatile(#bfi_a, [[MEMBER]] : !cir.ptr<!u32i>, [[CONST]] : !s16i) -> !s16i
// CIR: cir.return
// LLVM:define dso_local void @check_store
@@ -215,7 +215,7 @@ void check_store_exception(st3 *s3) {
// CIR: [[CONST:%.*]] = cir.const #cir.int<2> : !u32i
// CIR: [[LOAD:%.*]] = cir.load align(8) {{.*}} : !cir.ptr<!cir.ptr<!rec_st3>>, !cir.ptr<!rec_st3>
// CIR: [[MEMBER:%.*]] = cir.get_member [[LOAD]][3] {name = "b"} : !cir.ptr<!rec_st3> -> !cir.ptr<!u8i>
-// CIR: [[SETBF:%.*]] = cir.set_bitfield align(4) (#bfi_b1, [[MEMBER]] : !cir.ptr<!u8i>, [[CONST]] : !u32i) {is_volatile} -> !u32i
+// CIR: [[SETBF:%.*]] = cir.set_bitfield align(4) volatile(#bfi_b1, [[MEMBER]] : !cir.ptr<!u8i>, [[CONST]] : !u32i) -> !u32i
// CIR: cir.return
// LLVM:define dso_local void @check_store_exception
@@ -244,7 +244,7 @@ void clip_store_exception2(clip *c) {
// CIR: [[CONST:%.*]] = cir.const #cir.int<3> : !s32i
// CIR: [[LOAD:%.*]] = cir.load align(8) {{.*}} : !cir.ptr<!cir.ptr<!rec_clip>>, !cir.ptr<!rec_clip>
// CIR: [[MEMBER:%.*]] = cir.get_member [[LOAD]][0] {name = "a"} : !cir.ptr<!rec_clip> -> !cir.ptr<!cir.array<!u8i x 3>>
-// CIR: [[SETBF:%.*]] = cir.set_bitfield align(4) (#bfi_a1, [[MEMBER]] : !cir.ptr<!cir.array<!u8i x 3>>, [[CONST]] : !s32i) {is_volatile} -> !s32i
+// CIR: [[SETBF:%.*]] = cir.set_bitfield align(4) volatile(#bfi_a1, [[MEMBER]] : !cir.ptr<!cir.array<!u8i x 3>>, [[CONST]] : !s32i) -> !s32i
// CIR: cir.return
// LLVM:define dso_local void @clip_store_exception2
@@ -266,7 +266,7 @@ void check_store_second_member (st4 *s4) {
// CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !u64i
// CIR: [[LOAD:%.*]] = cir.load align(8) {{.*}} : !cir.ptr<!cir.ptr<!rec_st4>>, !cir.ptr<!rec_st4>
// CIR: [[MEMBER:%.*]] = cir.get_member [[LOAD]][2] {name = "b"} : !cir.ptr<!rec_st4> -> !cir.ptr<!u16i>
-// CIR: cir.set_bitfield align(8) (#bfi_b2, [[MEMBER]] : !cir.ptr<!u16i>, [[ONE]] : !u64i) {is_volatile} -> !u64i
+// CIR: cir.set_bitfield align(8) volatile(#bfi_b2, [[MEMBER]] : !cir.ptr<!u16i>, [[ONE]] : !u64i) -> !u64i
// LLVM: define dso_local void @check_store_second_member
// LLVM: [[LOAD:%.*]] = load ptr, ptr {{.*}}, align 8
diff --git a/clang/test/CIR/CodeGen/alignment.c b/clang/test/CIR/CodeGen/alignment.c
index 25acb6a0f570d..c4f25315f441a 100644
--- a/clang/test/CIR/CodeGen/alignment.c
+++ b/clang/test/CIR/CodeGen/alignment.c
@@ -8,8 +8,8 @@
__attribute((aligned(32))) float a[128];
union {int a[4]; __attribute((aligned(32))) float b[4];} b;
-// CIR: @a = #cir.zero {{.*}}alignment = 32
-// CIR: @b = #cir.zero{{.*}}alignment = 32
+// CIR: @a = #cir.zero {{.*}}align(32)
+// CIR: @b = #cir.zero{{.*}}align(32)
// LLVM: @a = {{.*}}zeroinitializer, align 32
// LLVM: @b = {{.*}}zeroinitializer, align 32
@@ -18,7 +18,7 @@ union {int a[4]; __attribute((aligned(32))) float b[4];} b;
// OGCG: @b = {{.*}}zeroinitializer, align 32
long long int test5[1024];
-// CIR: @test5 = #cir.zero {{.*}}alignment = 16
+// CIR: @test5 = #cir.zero {{.*}}align(16)
// LLVM: @test5 = {{.*}}global [1024 x i64] zeroinitializer, align 16
// OGCG: @test5 = {{.*}}global [1024 x i64] zeroinitializer, align 16
diff --git a/clang/test/CIR/CodeGen/atomic.c b/clang/test/CIR/CodeGen/atomic.c
index 28fe01e83ed65..d2fb28116e7bd 100644
--- a/clang/test/CIR/CodeGen/atomic.c
+++ b/clang/test/CIR/CodeGen/atomic.c
@@ -13,8 +13,8 @@ struct S1 {
_Atomic int g1;
_Atomic int g2 = 42;
-// CIR: cir.global external @g2 = #cir.int<42> : !s32i {alignment = 4 : i64}
-// CIR: cir.global external @g1 = #cir.int<0> : !s32i {alignment = 4 : i64}
+// CIR: cir.global external @g2 = #cir.int<42> : !s32i align(4)
+// CIR: cir.global external @g1 = #cir.int<0> : !s32i align(4)
// LLVM: @g2 = global i32 42, align 4
// LLVM: @g1 = global i32 0, align 4
@@ -950,7 +950,7 @@ void test_and_set(void *p) {
__atomic_test_and_set(p, __ATOMIC_SEQ_CST);
// CIR: %[[VOID_PTR:.+]] = cir.load align(8) %{{.+}} : !cir.ptr<!cir.ptr<!void>>, !cir.ptr<!void>
// CIR-NEXT: %[[PTR:.+]] = cir...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/226600
More information about the cfe-commits
mailing list