Skip to content

Commit d8628a0

Browse files
authored
[RISCV] Add IntrArgMemOnly for vector unit stride load/store intrinsics (#78415)
IntrArgMemOnly means the intrinsic only accesses memory that its pointer-typed argument(s) points to. I think RVV load/store intrinsics meets it. Add IntrArgMemOnly would help in some passes, by example, it could add `alais.scope` to intrinsics callee when try to inline a function that has noalais parameter(s).
1 parent f205566 commit d8628a0

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

llvm/include/llvm/IR/IntrinsicsRISCV.td

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -147,15 +147,17 @@ let TargetPrefix = "riscv" in {
147147
class RISCVUSMLoad
148148
: DefaultAttrsIntrinsic<[llvm_anyvector_ty],
149149
[llvm_ptr_ty, llvm_anyint_ty],
150-
[NoCapture<ArgIndex<0>>, IntrReadMem]>, RISCVVIntrinsic {
150+
[NoCapture<ArgIndex<0>>, IntrReadMem, IntrArgMemOnly]>,
151+
RISCVVIntrinsic {
151152
let VLOperand = 1;
152153
}
153154
// For unit stride load
154155
// Input: (passthru, pointer, vl)
155156
class RISCVUSLoad
156157
: DefaultAttrsIntrinsic<[llvm_anyvector_ty],
157158
[LLVMMatchType<0>, llvm_ptr_ty, llvm_anyint_ty],
158-
[NoCapture<ArgIndex<1>>, IntrReadMem]>, RISCVVIntrinsic {
159+
[NoCapture<ArgIndex<1>>, IntrReadMem, IntrArgMemOnly]>,
160+
RISCVVIntrinsic {
159161
let VLOperand = 2;
160162
}
161163
// For unit stride fault-only-first load
@@ -177,7 +179,8 @@ let TargetPrefix = "riscv" in {
177179
[LLVMMatchType<0>, llvm_ptr_ty,
178180
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
179181
llvm_anyint_ty, LLVMMatchType<1>],
180-
[NoCapture<ArgIndex<1>>, ImmArg<ArgIndex<4>>, IntrReadMem]>,
182+
[NoCapture<ArgIndex<1>>, ImmArg<ArgIndex<4>>, IntrReadMem,
183+
IntrArgMemOnly]>,
181184
RISCVVIntrinsic {
182185
let VLOperand = 3;
183186
}
@@ -239,7 +242,8 @@ let TargetPrefix = "riscv" in {
239242
class RISCVUSStore
240243
: DefaultAttrsIntrinsic<[],
241244
[llvm_anyvector_ty, llvm_ptr_ty, llvm_anyint_ty],
242-
[NoCapture<ArgIndex<1>>, IntrWriteMem]>, RISCVVIntrinsic {
245+
[NoCapture<ArgIndex<1>>, IntrWriteMem, IntrArgMemOnly]>,
246+
RISCVVIntrinsic {
243247
let VLOperand = 2;
244248
}
245249
// For unit stride store with mask
@@ -249,7 +253,8 @@ let TargetPrefix = "riscv" in {
249253
[llvm_anyvector_ty, llvm_ptr_ty,
250254
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
251255
llvm_anyint_ty],
252-
[NoCapture<ArgIndex<1>>, IntrWriteMem]>, RISCVVIntrinsic {
256+
[NoCapture<ArgIndex<1>>, IntrWriteMem, IntrArgMemOnly]>,
257+
RISCVVIntrinsic {
253258
let VLOperand = 3;
254259
}
255260
// For strided store
@@ -992,7 +997,8 @@ let TargetPrefix = "riscv" in {
992997
!add(nf, -1))),
993998
!listconcat(!listsplat(LLVMMatchType<0>, nf),
994999
[llvm_ptr_ty, llvm_anyint_ty]),
995-
[NoCapture<ArgIndex<nf>>, IntrReadMem]>, RISCVVIntrinsic {
1000+
[NoCapture<ArgIndex<nf>>, IntrReadMem, IntrArgMemOnly]>,
1001+
RISCVVIntrinsic {
9961002
let VLOperand = !add(nf, 1);
9971003
}
9981004
// For unit stride segment load with mask
@@ -1004,8 +1010,9 @@ let TargetPrefix = "riscv" in {
10041010
[llvm_ptr_ty,
10051011
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
10061012
llvm_anyint_ty, LLVMMatchType<1>]),
1007-
[ImmArg<ArgIndex<!add(nf, 3)>>, NoCapture<ArgIndex<nf>>, IntrReadMem]>,
1008-
RISCVVIntrinsic {
1013+
[ImmArg<ArgIndex<!add(nf, 3)>>, NoCapture<ArgIndex<nf>>,
1014+
IntrReadMem, IntrArgMemOnly]>,
1015+
RISCVVIntrinsic {
10091016
let VLOperand = !add(nf, 2);
10101017
}
10111018

@@ -1096,7 +1103,8 @@ let TargetPrefix = "riscv" in {
10961103
!listconcat([llvm_anyvector_ty],
10971104
!listsplat(LLVMMatchType<0>, !add(nf, -1)),
10981105
[llvm_ptr_ty, llvm_anyint_ty]),
1099-
[NoCapture<ArgIndex<nf>>, IntrWriteMem]>, RISCVVIntrinsic {
1106+
[NoCapture<ArgIndex<nf>>, IntrWriteMem, IntrArgMemOnly]>,
1107+
RISCVVIntrinsic {
11001108
let VLOperand = !add(nf, 1);
11011109
}
11021110
// For unit stride segment store with mask
@@ -1108,7 +1116,8 @@ let TargetPrefix = "riscv" in {
11081116
[llvm_ptr_ty,
11091117
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
11101118
llvm_anyint_ty]),
1111-
[NoCapture<ArgIndex<nf>>, IntrWriteMem]>, RISCVVIntrinsic {
1119+
[NoCapture<ArgIndex<nf>>, IntrWriteMem, IntrArgMemOnly]>,
1120+
RISCVVIntrinsic {
11121121
let VLOperand = !add(nf, 2);
11131122
}
11141123

0 commit comments

Comments
 (0)