@@ -2940,7 +2940,7 @@ def int_aarch64_sve_whilewr_d : SVE2_CONFLICT_DETECT_Intrinsic;
2940
2940
let TargetPrefix = "aarch64" in {
2941
2941
class SME_Load_Store_Intrinsic<LLVMType pred_ty>
2942
2942
: DefaultAttrsIntrinsic<[],
2943
- [pred_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], [ImmArg<ArgIndex<2>>]>;
2943
+ [pred_ty, llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], [IntrInaccessibleMemOrArgMemOnly, ImmArg<ArgIndex<2>>]>;
2944
2944
2945
2945
// Loads
2946
2946
def int_aarch64_sme_ld1b_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
@@ -2968,18 +2968,18 @@ let TargetPrefix = "aarch64" in {
2968
2968
2969
2969
// Spill + fill
2970
2970
class SME_LDR_STR_ZA_Intrinsic
2971
- : DefaultAttrsIntrinsic<[], [llvm_i32_ty, llvm_ptr_ty, llvm_i32_ty]>;
2971
+ : DefaultAttrsIntrinsic<[], [llvm_i32_ty, llvm_ptr_ty, llvm_i32_ty], [IntrInaccessibleMemOrArgMemOnly] >;
2972
2972
def int_aarch64_sme_ldr : SME_LDR_STR_ZA_Intrinsic;
2973
2973
def int_aarch64_sme_str : SME_LDR_STR_ZA_Intrinsic;
2974
2974
2975
2975
class SME_TileToVector_Intrinsic
2976
2976
: DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2977
2977
[LLVMMatchType<0>, LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
2978
- llvm_i32_ty, llvm_i32_ty], [ImmArg<ArgIndex<2>>]>;
2978
+ llvm_i32_ty, llvm_i32_ty], [IntrReadMem, IntrInaccessibleMemOnly, ImmArg<ArgIndex<2>>]>;
2979
2979
class SME_VectorToTile_Intrinsic
2980
2980
: DefaultAttrsIntrinsic<[],
2981
2981
[llvm_i32_ty, llvm_i32_ty, LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
2982
- llvm_anyvector_ty], [ImmArg<ArgIndex<0>>]>;
2982
+ llvm_anyvector_ty], [IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>;
2983
2983
2984
2984
def int_aarch64_sme_read_horiz : SME_TileToVector_Intrinsic;
2985
2985
def int_aarch64_sme_read_vert : SME_TileToVector_Intrinsic;
@@ -2994,13 +2994,13 @@ let TargetPrefix = "aarch64" in {
2994
2994
class SME_MOVAZ_TileToVector_X2_Intrinsic
2995
2995
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
2996
2996
[llvm_i32_ty, llvm_i32_ty],
2997
- [IntrNoMem, IntrHasSideEffects , ImmArg<ArgIndex<0>>]>;
2997
+ [IntrInaccessibleMemOnly , ImmArg<ArgIndex<0>>]>;
2998
2998
2999
2999
class SME_MOVAZ_TileToVector_X4_Intrinsic
3000
3000
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
3001
3001
LLVMMatchType<0>,LLVMMatchType<0>],
3002
3002
[llvm_i32_ty, llvm_i32_ty],
3003
- [IntrNoMem, IntrHasSideEffects , ImmArg<ArgIndex<0>>]>;
3003
+ [IntrInaccessibleMemOnly , ImmArg<ArgIndex<0>>]>;
3004
3004
3005
3005
def int_aarch64_sme_readz_horiz_x2 : SME_MOVAZ_TileToVector_X2_Intrinsic;
3006
3006
def int_aarch64_sme_readz_vert_x2 : SME_MOVAZ_TileToVector_X2_Intrinsic;
@@ -3011,7 +3011,7 @@ let TargetPrefix = "aarch64" in {
3011
3011
class SME_MOVAZ_TileToVector_Intrinsic
3012
3012
: DefaultAttrsIntrinsic<[llvm_anyvector_ty],
3013
3013
[llvm_i32_ty, llvm_i32_ty],
3014
- [IntrNoMem, IntrHasSideEffects , ImmArg<ArgIndex<0>>]>;
3014
+ [IntrInaccessibleMemOnly , ImmArg<ArgIndex<0>>]>;
3015
3015
3016
3016
def int_aarch64_sme_readz_horiz : SME_MOVAZ_TileToVector_Intrinsic;
3017
3017
def int_aarch64_sme_readz_vert : SME_MOVAZ_TileToVector_Intrinsic;
@@ -3022,12 +3022,12 @@ let TargetPrefix = "aarch64" in {
3022
3022
def int_aarch64_sme_readz_x2
3023
3023
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
3024
3024
[llvm_i32_ty],
3025
- [IntrNoMem, IntrHasSideEffects ]>;
3025
+ [IntrInaccessibleMemOnly ]>;
3026
3026
3027
3027
def int_aarch64_sme_readz_x4
3028
3028
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>],
3029
3029
[llvm_i32_ty],
3030
- [IntrNoMem, IntrHasSideEffects ]>;
3030
+ [IntrInaccessibleMemOnly ]>;
3031
3031
3032
3032
def int_aarch64_sme_write_lane_zt
3033
3033
: DefaultAttrsIntrinsic<[], [llvm_i32_ty, llvm_anyvector_ty, llvm_i32_ty],
@@ -3038,7 +3038,7 @@ let TargetPrefix = "aarch64" in {
3038
3038
[ImmArg<ArgIndex<0>>, IntrNoMem, IntrHasSideEffects]>;
3039
3039
3040
3040
3041
- def int_aarch64_sme_zero : DefaultAttrsIntrinsic<[], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>;
3041
+ def int_aarch64_sme_zero : DefaultAttrsIntrinsic<[], [llvm_i32_ty], [IntrWriteMem, IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>;
3042
3042
def int_aarch64_sme_in_streaming_mode : DefaultAttrsIntrinsic<[llvm_i1_ty], [], [IntrNoMem]>, ClangBuiltin<"__builtin_arm_in_streaming_mode">;
3043
3043
3044
3044
class SME_OuterProduct_Intrinsic
@@ -3047,7 +3047,7 @@ let TargetPrefix = "aarch64" in {
3047
3047
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
3048
3048
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
3049
3049
LLVMMatchType<0>,
3050
- llvm_anyvector_ty], [ImmArg<ArgIndex<0>>]>;
3050
+ llvm_anyvector_ty], [IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>;
3051
3051
3052
3052
def int_aarch64_sme_mopa : SME_OuterProduct_Intrinsic;
3053
3053
def int_aarch64_sme_mops : SME_OuterProduct_Intrinsic;
@@ -3069,7 +3069,7 @@ let TargetPrefix = "aarch64" in {
3069
3069
[llvm_i32_ty,
3070
3070
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
3071
3071
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
3072
- llvm_anyvector_ty], [ImmArg<ArgIndex<0>>]>;
3072
+ llvm_anyvector_ty], [IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>;
3073
3073
3074
3074
def int_aarch64_sme_addha : SME_AddVectorToTile_Intrinsic;
3075
3075
def int_aarch64_sme_addva : SME_AddVectorToTile_Intrinsic;
@@ -3189,56 +3189,56 @@ let TargetPrefix = "aarch64" in {
3189
3189
: DefaultAttrsIntrinsic<[],
3190
3190
[llvm_i32_ty,
3191
3191
llvm_anyvector_ty, LLVMMatchType<0>],
3192
- []>;
3192
+ [IntrInaccessibleMemOnly ]>;
3193
3193
3194
3194
class SME2_Matrix_ArrayVector_VG2_Multi_Single_Intrinsic
3195
3195
: DefaultAttrsIntrinsic<[],
3196
3196
[llvm_i32_ty,
3197
3197
llvm_anyvector_ty, LLVMMatchType<0>,
3198
3198
LLVMMatchType<0>],
3199
- []>;
3199
+ [IntrInaccessibleMemOnly ]>;
3200
3200
3201
3201
class SME2_Matrix_ArrayVector_VG4_Multi_Single_Intrinsic
3202
3202
: DefaultAttrsIntrinsic<[],
3203
3203
[llvm_i32_ty,
3204
3204
llvm_anyvector_ty, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>,
3205
3205
LLVMMatchType<0>],
3206
- []>;
3206
+ [IntrInaccessibleMemOnly ]>;
3207
3207
3208
3208
class SME2_Matrix_ArrayVector_VG2_Multi_Multi_Intrinsic
3209
3209
: DefaultAttrsIntrinsic<[],
3210
3210
[llvm_i32_ty,
3211
3211
llvm_anyvector_ty, LLVMMatchType<0>,
3212
3212
LLVMMatchType<0>, LLVMMatchType<0>],
3213
- []>;
3213
+ [IntrInaccessibleMemOnly ]>;
3214
3214
3215
3215
class SME2_Matrix_ArrayVector_VG4_Multi_Multi_Intrinsic
3216
3216
: DefaultAttrsIntrinsic<[],
3217
3217
[llvm_i32_ty,
3218
3218
llvm_anyvector_ty, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>,
3219
3219
LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>],
3220
- []>;
3220
+ [IntrInaccessibleMemOnly ]>;
3221
3221
3222
3222
class SME2_Matrix_ArrayVector_Single_Index_Intrinsic
3223
3223
: DefaultAttrsIntrinsic<[],
3224
3224
[llvm_i32_ty,
3225
3225
llvm_anyvector_ty,
3226
3226
LLVMMatchType<0>, llvm_i32_ty],
3227
- [ImmArg<ArgIndex<3>>]>;
3227
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<3>>]>;
3228
3228
3229
3229
class SME2_Matrix_ArrayVector_VG2_Multi_Index_Intrinsic
3230
3230
: DefaultAttrsIntrinsic<[],
3231
3231
[llvm_i32_ty,
3232
3232
llvm_anyvector_ty, LLVMMatchType<0>,
3233
3233
LLVMMatchType<0>, llvm_i32_ty],
3234
- [ImmArg<ArgIndex<4>>]>;
3234
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<4>>]>;
3235
3235
3236
3236
class SME2_Matrix_ArrayVector_VG4_Multi_Index_Intrinsic
3237
3237
: DefaultAttrsIntrinsic<[],
3238
3238
[llvm_i32_ty,
3239
3239
llvm_anyvector_ty, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>,
3240
3240
LLVMMatchType<0>, llvm_i32_ty],
3241
- [ImmArg<ArgIndex<6>>]>;
3241
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<6>>]>;
3242
3242
3243
3243
class SME2_VG2_Multi_Imm_Intrinsic
3244
3244
: DefaultAttrsIntrinsic<[LLVMSubdivide2VectorType<0>],
@@ -3257,14 +3257,14 @@ let TargetPrefix = "aarch64" in {
3257
3257
: DefaultAttrsIntrinsic<[],
3258
3258
[llvm_i32_ty,
3259
3259
llvm_anyvector_ty, LLVMMatchType<0>],
3260
- []>;
3260
+ [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3261
3261
3262
3262
class SME2_ZA_Write_VG4_Intrinsic
3263
3263
: DefaultAttrsIntrinsic<[],
3264
3264
[llvm_i32_ty,
3265
3265
llvm_anyvector_ty, LLVMMatchType<0>,
3266
3266
LLVMMatchType<0>, LLVMMatchType<0>],
3267
- []>;
3267
+ [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3268
3268
3269
3269
class SME2_VG2_Multi_Single_Intrinsic
3270
3270
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
@@ -3353,50 +3353,50 @@ let TargetPrefix = "aarch64" in {
3353
3353
class SME2_ZA_ArrayVector_Read_VG2_Intrinsic
3354
3354
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
3355
3355
[llvm_i32_ty],
3356
- []>;
3356
+ [IntrReadMem, IntrInaccessibleMemOnly ]>;
3357
3357
3358
3358
class SME2_ZA_ArrayVector_Read_VG4_Intrinsic
3359
3359
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
3360
3360
LLVMMatchType<0>, LLVMMatchType<0>],
3361
3361
[llvm_i32_ty],
3362
- []>;
3362
+ [IntrReadMem, IntrInaccessibleMemOnly ]>;
3363
3363
3364
3364
class SME2_Matrix_TileVector_Read_VG2_Intrinsic
3365
3365
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
3366
3366
[llvm_i32_ty, llvm_i32_ty],
3367
- []>;
3367
+ [IntrReadMem, IntrInaccessibleMemOnly ]>;
3368
3368
3369
3369
class SME2_Matrix_TileVector_Read_VG4_Intrinsic
3370
3370
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
3371
3371
LLVMMatchType<0>, LLVMMatchType<0>],
3372
3372
[llvm_i32_ty, llvm_i32_ty],
3373
- []>;
3373
+ [IntrReadMem, IntrInaccessibleMemOnly ]>;
3374
3374
3375
3375
class SME2_ZA_ArrayVector_Write_VG2_Intrinsic
3376
3376
: DefaultAttrsIntrinsic<[],
3377
3377
[llvm_i32_ty,
3378
3378
llvm_anyvector_ty, LLVMMatchType<0>],
3379
- []>;
3379
+ [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3380
3380
3381
3381
class SME2_ZA_ArrayVector_Write_VG4_Intrinsic
3382
3382
: DefaultAttrsIntrinsic<[],
3383
3383
[llvm_i32_ty,
3384
3384
llvm_anyvector_ty, LLVMMatchType<0>,
3385
3385
LLVMMatchType<0>, LLVMMatchType<0>],
3386
- []>;
3386
+ [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3387
3387
3388
3388
class SME2_Matrix_TileVector_Write_VG2_Intrinsic
3389
3389
: DefaultAttrsIntrinsic<[],
3390
3390
[llvm_i32_ty, llvm_i32_ty,
3391
3391
llvm_anyvector_ty, LLVMMatchType<0>],
3392
- [ImmArg<ArgIndex<0>>]>;
3392
+ [IntrWriteMem, IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>;
3393
3393
3394
3394
class SME2_Matrix_TileVector_Write_VG4_Intrinsic
3395
3395
: DefaultAttrsIntrinsic<[],
3396
3396
[llvm_i32_ty, llvm_i32_ty,
3397
3397
llvm_anyvector_ty, LLVMMatchType<0>,
3398
3398
LLVMMatchType<0>, LLVMMatchType<0>],
3399
- [ImmArg<ArgIndex<0>>]>;
3399
+ [IntrWriteMem, IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>;
3400
3400
3401
3401
class SME2_VG2_Multi_Single_Single_Intrinsic
3402
3402
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
@@ -3562,7 +3562,7 @@ let TargetPrefix = "aarch64" in {
3562
3562
// Multi-vector zeroing
3563
3563
3564
3564
foreach vg = ["vg1x2", "vg1x4", "vg2x1", "vg2x2", "vg2x4", "vg4x1", "vg4x2", "vg4x4"] in {
3565
- def int_aarch64_sme_zero_za64_ # vg : DefaultAttrsIntrinsic<[], [llvm_i32_ty], [IntrNoMem, IntrHasSideEffects ]>;
3565
+ def int_aarch64_sme_zero_za64_ # vg : DefaultAttrsIntrinsic<[], [llvm_i32_ty], [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3566
3566
}
3567
3567
3568
3568
// Multi-vector signed saturating doubling multiply high
@@ -4002,57 +4002,57 @@ let TargetPrefix = "aarch64" in {
4002
4002
[llvm_i32_ty,
4003
4003
llvm_nxv16i1_ty, llvm_nxv16i1_ty,
4004
4004
llvm_nxv16i8_ty, llvm_nxv16i8_ty],
4005
- [ImmArg<ArgIndex<0>>, IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4005
+ [ImmArg<ArgIndex<0>>, IntrInaccessibleMemOnly]>;
4006
4006
4007
4007
class SME_FP8_ZA_LANE_VGx1_Intrinsic
4008
4008
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4009
4009
llvm_nxv16i8_ty,
4010
4010
llvm_nxv16i8_ty,
4011
4011
llvm_i32_ty],
4012
- [IntrInaccessibleMemOnly, IntrHasSideEffects, ImmArg<ArgIndex<3>>]>;
4012
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<3>>]>;
4013
4013
4014
4014
class SME_FP8_ZA_LANE_VGx2_Intrinsic
4015
4015
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4016
4016
llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4017
4017
llvm_nxv16i8_ty,
4018
4018
llvm_i32_ty],
4019
- [IntrInaccessibleMemOnly, IntrHasSideEffects, ImmArg<ArgIndex<4>>]>;
4019
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<4>>]>;
4020
4020
4021
4021
class SME_FP8_ZA_LANE_VGx4_Intrinsic
4022
4022
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4023
4023
llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4024
4024
llvm_nxv16i8_ty,
4025
4025
llvm_i32_ty],
4026
- [IntrInaccessibleMemOnly, IntrHasSideEffects, ImmArg<ArgIndex<6>>]>;
4026
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<6>>]>;
4027
4027
class SME_FP8_ZA_SINGLE_VGx1_Intrinsic
4028
4028
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4029
4029
llvm_nxv16i8_ty,
4030
4030
llvm_nxv16i8_ty],
4031
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4031
+ [IntrInaccessibleMemOnly]>;
4032
4032
4033
4033
class SME_FP8_ZA_SINGLE_VGx2_Intrinsic
4034
4034
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4035
4035
llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4036
4036
llvm_nxv16i8_ty],
4037
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4037
+ [IntrInaccessibleMemOnly]>;
4038
4038
4039
4039
class SME_FP8_ZA_SINGLE_VGx4_Intrinsic
4040
4040
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4041
4041
llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4042
4042
llvm_nxv16i8_ty],
4043
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4043
+ [IntrInaccessibleMemOnly]>;
4044
4044
4045
4045
class SME_FP8_ZA_MULTI_VGx2_Intrinsic
4046
4046
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4047
4047
llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4048
4048
llvm_nxv16i8_ty, llvm_nxv16i8_ty],
4049
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4049
+ [IntrInaccessibleMemOnly]>;
4050
4050
4051
4051
class SME_FP8_ZA_MULTI_VGx4_Intrinsic
4052
4052
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4053
4053
llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4054
4054
llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty],
4055
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4055
+ [IntrInaccessibleMemOnly]>;
4056
4056
//
4057
4057
// CVT from FP8 to half-precision/BFloat16 multi-vector
4058
4058
//
0 commit comments