Skip to content

Commit 99a10f1

Browse files
authored
Update load intrinsic attributes (llvm#101562)
This patch adds default attributes to many intrinsics and the WillReturn attribute to some as well. The defaults include WillReturn. The WillReturn attribute is relevant for dead code elimination as intrinsics without WillReturn are assumed to have side effects and cannot be removed even if their return value is unused. It is also relevant for potential changes to SDAG behavior regarding treatment of intrinsics that function as loads.
1 parent c19326c commit 99a10f1

17 files changed

+1927
-287
lines changed

llvm/include/llvm/IR/IntrinsicsBPF.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
// Specialized loads from packet
1414
let TargetPrefix = "bpf" in { // All intrinsics start with "llvm.bpf."
1515
def int_bpf_load_byte : ClangBuiltin<"__builtin_bpf_load_byte">,
16-
Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>;
16+
DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>;
1717
def int_bpf_load_half : ClangBuiltin<"__builtin_bpf_load_half">,
18-
Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>;
18+
DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>;
1919
def int_bpf_load_word : ClangBuiltin<"__builtin_bpf_load_word">,
20-
Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>;
20+
DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem]>;
2121
def int_bpf_pseudo : ClangBuiltin<"__builtin_bpf_pseudo">,
2222
Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty]>;
2323
def int_bpf_preserve_field_info : ClangBuiltin<"__builtin_bpf_preserve_field_info">,

llvm/include/llvm/IR/IntrinsicsLoongArch.td

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,11 @@ class VecInt<list<LLVMType> ret_types, list<LLVMType> param_types,
140140
: Intrinsic<ret_types, param_types, intr_properties>,
141141
ClangBuiltin<!subst("int_loongarch", "__builtin", NAME)>;
142142

143+
class DefaultAttrsVecInt<list<LLVMType> ret_types, list<LLVMType> param_types,
144+
list<IntrinsicProperty> intr_properties = []>
145+
: DefaultAttrsIntrinsic<ret_types, param_types, intr_properties>,
146+
ClangBuiltin<!subst("int_loongarch", "__builtin", NAME)>;
147+
143148
//===----------------------------------------------------------------------===//
144149
// LSX
145150

@@ -620,22 +625,22 @@ foreach inst = ["vfcmp_caf_d", "vfcmp_cun_d", "vfcmp_ceq_d", "vfcmp_cueq_d",
620625

621626
// LSX load/store
622627
def int_loongarch_lsx_vld
623-
: VecInt<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
628+
: DefaultAttrsVecInt<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
624629
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
625630
def int_loongarch_lsx_vldx
626-
: VecInt<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i64_ty],
631+
: DefaultAttrsVecInt<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i64_ty],
627632
[IntrReadMem, IntrArgMemOnly]>;
628633
def int_loongarch_lsx_vldrepl_b
629-
: VecInt<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
634+
: DefaultAttrsVecInt<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
630635
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
631636
def int_loongarch_lsx_vldrepl_h
632-
: VecInt<[llvm_v8i16_ty], [llvm_ptr_ty, llvm_i32_ty],
637+
: DefaultAttrsVecInt<[llvm_v8i16_ty], [llvm_ptr_ty, llvm_i32_ty],
633638
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
634639
def int_loongarch_lsx_vldrepl_w
635-
: VecInt<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty],
640+
: DefaultAttrsVecInt<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty],
636641
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
637642
def int_loongarch_lsx_vldrepl_d
638-
: VecInt<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_i32_ty],
643+
: DefaultAttrsVecInt<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_i32_ty],
639644
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
640645

641646
def int_loongarch_lsx_vst
@@ -1146,22 +1151,22 @@ def int_loongarch_lasx_xvpickve_d_f
11461151

11471152
// LASX load/store
11481153
def int_loongarch_lasx_xvld
1149-
: VecInt<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_i32_ty],
1154+
: DefaultAttrsVecInt<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_i32_ty],
11501155
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
11511156
def int_loongarch_lasx_xvldx
1152-
: VecInt<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_i64_ty],
1157+
: DefaultAttrsVecInt<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_i64_ty],
11531158
[IntrReadMem, IntrArgMemOnly]>;
11541159
def int_loongarch_lasx_xvldrepl_b
1155-
: VecInt<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_i32_ty],
1160+
: DefaultAttrsVecInt<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_i32_ty],
11561161
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
11571162
def int_loongarch_lasx_xvldrepl_h
1158-
: VecInt<[llvm_v16i16_ty], [llvm_ptr_ty, llvm_i32_ty],
1163+
: DefaultAttrsVecInt<[llvm_v16i16_ty], [llvm_ptr_ty, llvm_i32_ty],
11591164
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
11601165
def int_loongarch_lasx_xvldrepl_w
1161-
: VecInt<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_i32_ty],
1166+
: DefaultAttrsVecInt<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_i32_ty],
11621167
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
11631168
def int_loongarch_lasx_xvldrepl_d
1164-
: VecInt<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_i32_ty],
1169+
: DefaultAttrsVecInt<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_i32_ty],
11651170
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
11661171

11671172
def int_loongarch_lasx_xvst

llvm/include/llvm/IR/IntrinsicsMips.td

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ def int_mips_extpdp: ClangBuiltin<"__builtin_mips_extpdp">,
236236
def int_mips_wrdsp: ClangBuiltin<"__builtin_mips_wrdsp">,
237237
Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], [ImmArg<ArgIndex<1>>]>;
238238
def int_mips_rddsp: ClangBuiltin<"__builtin_mips_rddsp">,
239-
Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrReadMem, ImmArg<ArgIndex<0>>]>;
239+
DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrReadMem, ImmArg<ArgIndex<0>>]>;
240240

241241
def int_mips_insv: ClangBuiltin<"__builtin_mips_insv">,
242242
Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrReadMem]>;
@@ -252,22 +252,22 @@ def int_mips_repl_ph: ClangBuiltin<"__builtin_mips_repl_ph">,
252252
Intrinsic<[mips_v2q15_ty], [llvm_i32_ty], [IntrNoMem]>;
253253

254254
def int_mips_pick_qb: ClangBuiltin<"__builtin_mips_pick_qb">,
255-
Intrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [IntrReadMem]>;
255+
DefaultAttrsIntrinsic<[llvm_v4i8_ty], [llvm_v4i8_ty, llvm_v4i8_ty], [IntrReadMem]>;
256256
def int_mips_pick_ph: ClangBuiltin<"__builtin_mips_pick_ph">,
257-
Intrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [IntrReadMem]>;
257+
DefaultAttrsIntrinsic<[mips_v2q15_ty], [mips_v2q15_ty, mips_v2q15_ty], [IntrReadMem]>;
258258

259259
def int_mips_mthlip: ClangBuiltin<"__builtin_mips_mthlip">,
260260
Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty], []>;
261261

262262
def int_mips_bposge32: ClangBuiltin<"__builtin_mips_bposge32">,
263-
Intrinsic<[llvm_i32_ty], [], [IntrReadMem]>;
263+
DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrReadMem]>;
264264

265265
def int_mips_lbux: ClangBuiltin<"__builtin_mips_lbux">,
266-
Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadMem, IntrArgMemOnly]>;
266+
DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadMem, IntrArgMemOnly]>;
267267
def int_mips_lhx: ClangBuiltin<"__builtin_mips_lhx">,
268-
Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadMem, IntrArgMemOnly]>;
268+
DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadMem, IntrArgMemOnly]>;
269269
def int_mips_lwx: ClangBuiltin<"__builtin_mips_lwx">,
270-
Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadMem, IntrArgMemOnly]>;
270+
DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadMem, IntrArgMemOnly]>;
271271

272272
//===----------------------------------------------------------------------===//
273273
// MIPS DSP Rev 2
@@ -1259,23 +1259,23 @@ def int_mips_insve_d : ClangBuiltin<"__builtin_msa_insve_d">,
12591259
[IntrNoMem, ImmArg<ArgIndex<1>>]>;
12601260

12611261
def int_mips_ld_b : ClangBuiltin<"__builtin_msa_ld_b">,
1262-
Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
1262+
DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
12631263
[IntrReadMem, IntrArgMemOnly]>;
12641264
def int_mips_ld_h : ClangBuiltin<"__builtin_msa_ld_h">,
1265-
Intrinsic<[llvm_v8i16_ty], [llvm_ptr_ty, llvm_i32_ty],
1265+
DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_ptr_ty, llvm_i32_ty],
12661266
[IntrReadMem, IntrArgMemOnly]>;
12671267
def int_mips_ld_w : ClangBuiltin<"__builtin_msa_ld_w">,
1268-
Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty],
1268+
DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty],
12691269
[IntrReadMem, IntrArgMemOnly]>;
12701270
def int_mips_ld_d : ClangBuiltin<"__builtin_msa_ld_d">,
1271-
Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_i32_ty],
1271+
DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_i32_ty],
12721272
[IntrReadMem, IntrArgMemOnly]>;
12731273

12741274
def int_mips_ldr_d : ClangBuiltin<"__builtin_msa_ldr_d">,
1275-
Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_i32_ty],
1275+
DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_i32_ty],
12761276
[IntrReadMem, IntrArgMemOnly]>;
12771277
def int_mips_ldr_w : ClangBuiltin<"__builtin_msa_ldr_w">,
1278-
Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty],
1278+
DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty],
12791279
[IntrReadMem, IntrArgMemOnly]>;
12801280

12811281
def int_mips_ldi_b : ClangBuiltin<"__builtin_msa_ldi_b">,

llvm/include/llvm/IR/IntrinsicsNVVM.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4729,7 +4729,7 @@ def int_nvvm_redux_sync_or : ClangBuiltin<"__nvvm_redux_sync_or">,
47294729
class NVVM_WMMA_LD<WMMA_REGS Frag, string Layout, int WithStride>
47304730
: Intrinsic<Frag.regs,
47314731
!if(WithStride, [llvm_anyptr_ty, llvm_i32_ty], [llvm_anyptr_ty]),
4732-
[IntrReadMem, IntrArgMemOnly, IntrNoCallback, ReadOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>],
4732+
[IntrWillReturn, IntrReadMem, IntrArgMemOnly, IntrNoCallback, ReadOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>],
47334733
WMMA_NAME_LDST<"load", Frag, Layout, WithStride>.intr>;
47344734

47354735
// WMMA.STORE.D

llvm/include/llvm/IR/IntrinsicsSystemZ.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,11 @@ let TargetPrefix = "s390" in {
230230
[IntrNoMem, ImmArg<ArgIndex<1>>]>;
231231

232232
def int_s390_vlbb : ClangBuiltin<"__builtin_s390_vlbb">,
233-
Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
233+
DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_i32_ty],
234234
[IntrReadMem, IntrArgMemOnly, ImmArg<ArgIndex<1>>]>;
235235

236236
def int_s390_vll : ClangBuiltin<"__builtin_s390_vll">,
237-
Intrinsic<[llvm_v16i8_ty], [llvm_i32_ty, llvm_ptr_ty],
237+
DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_i32_ty, llvm_ptr_ty],
238238
[IntrReadMem, IntrArgMemOnly]>;
239239

240240
def int_s390_vpdi : ClangBuiltin<"__builtin_s390_vpdi">,
@@ -399,7 +399,7 @@ let TargetPrefix = "s390" in {
399399

400400
// Instructions from the Vector Packed Decimal Facility
401401
def int_s390_vlrl : ClangBuiltin<"__builtin_s390_vlrlr">,
402-
Intrinsic<[llvm_v16i8_ty], [llvm_i32_ty, llvm_ptr_ty],
402+
DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_i32_ty, llvm_ptr_ty],
403403
[IntrReadMem, IntrArgMemOnly]>;
404404

405405
def int_s390_vstrl : ClangBuiltin<"__builtin_s390_vstrlr">,

llvm/include/llvm/IR/IntrinsicsVE.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
// VEL Intrinsic instructions.
44
let TargetPrefix = "ve" in {
55
def int_ve_vl_pack_f32p : ClangBuiltin<"__builtin_ve_vl_pack_f32p">,
6-
Intrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_ptr_ty],
6+
DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_ptr_ty, llvm_ptr_ty],
77
[IntrReadMem]>;
88
def int_ve_vl_pack_f32a : ClangBuiltin<"__builtin_ve_vl_pack_f32a">,
9-
Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
9+
DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_ptr_ty],
1010
[IntrReadMem]>;
1111

1212
def int_ve_vl_extract_vm512u :

0 commit comments

Comments
 (0)