Skip to content

Commit dc8d2ec

Browse files
[AArch64][SME]Update intrinsic interface for read/write (#65594)
The new ACLE PR#225[1] now combines the slice parameters for some builtins. This patch is the #2 of 3 patches to update the interface. Slice specifies the ZA slice number directly and needs to be explicity implemented by the "user" with the base register plus the immediate offset [1]https://github.com/ARM-software/acle/pull/225/files
1 parent 4d5906e commit dc8d2ec

File tree

5 files changed

+304
-303
lines changed

5 files changed

+304
-303
lines changed

clang/include/clang/Basic/arm_sme.td

+14-14
Original file line numberDiff line numberDiff line change
@@ -96,42 +96,42 @@ def SVSTR_ZA : MInst<"svstr_za", "vm%", "",
9696

9797
multiclass ZARead<string n_suffix, string t, string i_prefix, list<ImmCheck> ch> {
9898
let TargetGuard = "sme" in {
99-
def NAME # _H : SInst<"svread_hor_" # n_suffix # "[_{d}]", "ddPimi", t,
99+
def NAME # _H : SInst<"svread_hor_" # n_suffix # "[_{d}]", "ddPim", t,
100100
MergeOp1, i_prefix # "_horiz",
101101
[IsReadZA, IsStreaming, IsSharedZA, IsPreservesZA], ch>;
102102

103-
def NAME # _V : SInst<"svread_ver_" # n_suffix # "[_{d}]", "ddPimi", t,
103+
def NAME # _V : SInst<"svread_ver_" # n_suffix # "[_{d}]", "ddPim", t,
104104
MergeOp1, i_prefix # "_vert",
105105
[IsReadZA, IsStreaming, IsSharedZA, IsPreservesZA], ch>;
106106
}
107107
}
108108

109-
defm SVREAD_ZA8 : ZARead<"za8", "cUc", "aarch64_sme_read", [ImmCheck<2, ImmCheck0_0>, ImmCheck<4, ImmCheck0_15>]>;
110-
defm SVREAD_ZA16 : ZARead<"za16", "sUshb", "aarch64_sme_read", [ImmCheck<2, ImmCheck0_1>, ImmCheck<4, ImmCheck0_7>]>;
111-
defm SVREAD_ZA32 : ZARead<"za32", "iUif", "aarch64_sme_read", [ImmCheck<2, ImmCheck0_3>, ImmCheck<4, ImmCheck0_3>]>;
112-
defm SVREAD_ZA64 : ZARead<"za64", "lUld", "aarch64_sme_read", [ImmCheck<2, ImmCheck0_7>, ImmCheck<4, ImmCheck0_1>]>;
113-
defm SVREAD_ZA128 : ZARead<"za128", "csilUcUsUiUlhbfd", "aarch64_sme_readq", [ImmCheck<2, ImmCheck0_15>, ImmCheck<4, ImmCheck0_0>]>;
109+
defm SVREAD_ZA8 : ZARead<"za8", "cUc", "aarch64_sme_read", [ImmCheck<2, ImmCheck0_0>]>;
110+
defm SVREAD_ZA16 : ZARead<"za16", "sUshb", "aarch64_sme_read", [ImmCheck<2, ImmCheck0_1>]>;
111+
defm SVREAD_ZA32 : ZARead<"za32", "iUif", "aarch64_sme_read", [ImmCheck<2, ImmCheck0_3>]>;
112+
defm SVREAD_ZA64 : ZARead<"za64", "lUld", "aarch64_sme_read", [ImmCheck<2, ImmCheck0_7>]>;
113+
defm SVREAD_ZA128 : ZARead<"za128", "csilUcUsUiUlhbfd", "aarch64_sme_readq", [ImmCheck<2, ImmCheck0_15>]>;
114114

115115
////////////////////////////////////////////////////////////////////////////////
116116
// Write horizontal/vertical ZA slices
117117

118118
multiclass ZAWrite<string n_suffix, string t, string i_prefix, list<ImmCheck> ch> {
119119
let TargetGuard = "sme" in {
120-
def NAME # _H : SInst<"svwrite_hor_" # n_suffix # "[_{d}]", "vimiPd", t,
120+
def NAME # _H : SInst<"svwrite_hor_" # n_suffix # "[_{d}]", "vimPd", t,
121121
MergeOp1, i_prefix # "_horiz",
122122
[IsWriteZA, IsStreaming, IsSharedZA], ch>;
123123

124-
def NAME # _V : SInst<"svwrite_ver_" # n_suffix # "[_{d}]", "vimiPd", t,
124+
def NAME # _V : SInst<"svwrite_ver_" # n_suffix # "[_{d}]", "vimPd", t,
125125
MergeOp1, i_prefix # "_vert",
126126
[IsWriteZA, IsStreaming, IsSharedZA], ch>;
127127
}
128128
}
129129

130-
defm SVWRITE_ZA8 : ZAWrite<"za8", "cUc", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_0>, ImmCheck<2, ImmCheck0_15>]>;
131-
defm SVWRITE_ZA16 : ZAWrite<"za16", "sUshb", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_1>, ImmCheck<2, ImmCheck0_7>]>;
132-
defm SVWRITE_ZA32 : ZAWrite<"za32", "iUif", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_3>, ImmCheck<2, ImmCheck0_3>]>;
133-
defm SVWRITE_ZA64 : ZAWrite<"za64", "lUld", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_7>, ImmCheck<2, ImmCheck0_1>]>;
134-
defm SVWRITE_ZA128 : ZAWrite<"za128", "csilUcUsUiUlhbfd", "aarch64_sme_writeq", [ImmCheck<0, ImmCheck0_15>, ImmCheck<2, ImmCheck0_0>]>;
130+
defm SVWRITE_ZA8 : ZAWrite<"za8", "cUc", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_0>]>;
131+
defm SVWRITE_ZA16 : ZAWrite<"za16", "sUshb", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_1>]>;
132+
defm SVWRITE_ZA32 : ZAWrite<"za32", "iUif", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_3>]>;
133+
defm SVWRITE_ZA64 : ZAWrite<"za64", "lUld", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_7>]>;
134+
defm SVWRITE_ZA128 : ZAWrite<"za128", "csilUcUsUiUlhbfd", "aarch64_sme_writeq", [ImmCheck<0, ImmCheck0_15>]>;
135135

136136
////////////////////////////////////////////////////////////////////////////////
137137
// SME - Zero

clang/lib/CodeGen/CGBuiltin.cpp

+3-8
Original file line numberDiff line numberDiff line change
@@ -9617,15 +9617,10 @@ Value *CodeGenFunction::EmitSMEReadWrite(const SVETypeFlags &TypeFlags,
96179617
unsigned IntID) {
96189618
auto *VecTy = getSVEType(TypeFlags);
96199619
Function *F = CGM.getIntrinsic(IntID, VecTy);
9620-
if (TypeFlags.isReadZA()) {
9620+
if (TypeFlags.isReadZA())
96219621
Ops[1] = EmitSVEPredicateCast(Ops[1], VecTy);
9622-
Ops[3] = EmitTileslice(Ops[4], Ops[3]);
9623-
Ops.erase(&Ops[4]);
9624-
} else if (TypeFlags.isWriteZA()) {
9625-
Ops[1] = EmitTileslice(Ops[2], Ops[1]);
9626-
Ops[2] = EmitSVEPredicateCast(Ops[3], VecTy);
9627-
Ops.erase(&Ops[3]);
9628-
}
9622+
else if (TypeFlags.isWriteZA())
9623+
Ops[2] = EmitSVEPredicateCast(Ops[2], VecTy);
96299624
return Builder.CreateCall(F, Ops);
96309625
}
96319626

0 commit comments

Comments
 (0)