@@ -1739,20 +1739,24 @@ def CIR_SetBitfieldOp : CIR_Op<"set_bitfield"> {
17391739 %2 = cir.load %0 : !cir.ptr<!cir.ptr<!record_type>>, !cir.ptr<!record_type>
17401740 %3 = cir.get_member %2[1] {name = "e"} : !cir.ptr<!record_type>
17411741 -> !cir.ptr<!u16i>
1742- %4 = cir.set_bitfield(#bfi_e, %3 : !cir.ptr<!u16i>, %1 : !s32i) -> !s32i
1742+ %4 = cir.set_bitfield align(4) (#bfi_e, %3 : !cir.ptr<!u16i>, %1 : !s32i)
1743+ -> !s32i
17431744 ```
17441745 }];
17451746
17461747 let arguments = (ins
17471748 Arg<CIR_PointerType, "the address to store the value", [MemWrite]>:$addr,
17481749 CIR_AnyType:$src,
17491750 BitfieldInfoAttr:$bitfield_info,
1751+ DefaultValuedOptionalAttr<I64Attr, "0">:$alignment,
17501752 UnitAttr:$is_volatile
17511753 );
17521754
17531755 let results = (outs CIR_IntType:$result);
17541756
1755- let assemblyFormat = [{ `(`$bitfield_info`,` $addr`:`qualified(type($addr))`,`
1757+ let assemblyFormat = [{
1758+ (`align` `(` $alignment^ `)`)?
1759+ `(`$bitfield_info`,` $addr`:`qualified(type($addr))`,`
17561760 $src`:`type($src) `)` attr-dict `->` type($result) }];
17571761
17581762 let builders = [
@@ -1764,14 +1768,15 @@ def CIR_SetBitfieldOp : CIR_Op<"set_bitfield"> {
17641768 "unsigned":$size,
17651769 "unsigned":$offset,
17661770 "bool":$is_signed,
1767- "bool":$is_volatile
1771+ "bool":$is_volatile,
1772+ CArg<"unsigned", "0">:$alignment
17681773 ),
17691774 [{
17701775 BitfieldInfoAttr info =
17711776 BitfieldInfoAttr::get($_builder.getContext(),
17721777 name, storage_type,
17731778 size, offset, is_signed);
1774- build($_builder, $_state, type, addr, src, info, is_volatile);
1779+ build($_builder, $_state, type, addr, src, info, alignment, is_volatile);
17751780 }]>
17761781 ];
17771782}
@@ -1823,20 +1828,23 @@ def CIR_GetBitfieldOp : CIR_Op<"get_bitfield"> {
18231828 %2 = cir.load %0 : !cir.ptr<!cir.ptr<!record_type>>, !cir.ptr<!record_type>
18241829 %3 = cir.get_member %2[1] {name = "e"} : !cir.ptr<!record_type>
18251830 -> !cir.ptr<!u16i>
1826- %4 = cir.get_bitfield(#bfi_e, %3 : !cir.ptr<!u16i>) -> !s32i
1831+ %4 = cir.get_bitfield align(4) (#bfi_e, %3 : !cir.ptr<!u16i>) -> !s32i
18271832 ```
18281833 }];
18291834
18301835 let arguments = (ins
18311836 Arg<CIR_PointerType, "the address to load from", [MemRead]>:$addr,
18321837 BitfieldInfoAttr:$bitfield_info,
1838+ DefaultValuedOptionalAttr<I64Attr, "0">:$alignment,
18331839 UnitAttr:$is_volatile
18341840 );
18351841
18361842 let results = (outs CIR_IntType:$result);
18371843
1838- let assemblyFormat = [{ `(`$bitfield_info `,` $addr attr-dict `:`
1839- qualified(type($addr)) `)` `->` type($result) }];
1844+ let assemblyFormat = [{
1845+ (`align` `(` $alignment^ `)`)?
1846+ `(`$bitfield_info `,` $addr attr-dict `:`
1847+ qualified(type($addr)) `)` `->` type($result) }];
18401848
18411849 let builders = [
18421850 OpBuilder<(ins "mlir::Type":$type,
@@ -1846,14 +1854,15 @@ def CIR_GetBitfieldOp : CIR_Op<"get_bitfield"> {
18461854 "unsigned":$size,
18471855 "unsigned":$offset,
18481856 "bool":$is_signed,
1849- "bool":$is_volatile
1857+ "bool":$is_volatile,
1858+ CArg<"unsigned", "0">:$alignment
18501859 ),
18511860 [{
18521861 BitfieldInfoAttr info =
18531862 BitfieldInfoAttr::get($_builder.getContext(),
18541863 name, storage_type,
18551864 size, offset, is_signed);
1856- build($_builder, $_state, type, addr, info, is_volatile);
1865+ build($_builder, $_state, type, addr, info, alignment, is_volatile);
18571866 }]>
18581867 ];
18591868}
0 commit comments