@@ -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>>, IntrInaccessibleMemOnly, IntrWriteMem]>;
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;
@@ -3112,7 +3112,7 @@ let TargetPrefix = "aarch64" in {
3112
3112
[llvm_i32_ty,
3113
3113
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
3114
3114
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
3115
- llvm_anyvector_ty], [ImmArg<ArgIndex<0>>]>;
3115
+ llvm_anyvector_ty], [IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>;
3116
3116
3117
3117
def int_aarch64_sme_addha : SME_AddVectorToTile_Intrinsic;
3118
3118
def int_aarch64_sme_addva : SME_AddVectorToTile_Intrinsic;
@@ -3232,56 +3232,56 @@ let TargetPrefix = "aarch64" in {
3232
3232
: DefaultAttrsIntrinsic<[],
3233
3233
[llvm_i32_ty,
3234
3234
llvm_anyvector_ty, LLVMMatchType<0>],
3235
- []>;
3235
+ [IntrInaccessibleMemOnly ]>;
3236
3236
3237
3237
class SME2_Matrix_ArrayVector_VG2_Multi_Single_Intrinsic
3238
3238
: DefaultAttrsIntrinsic<[],
3239
3239
[llvm_i32_ty,
3240
3240
llvm_anyvector_ty, LLVMMatchType<0>,
3241
3241
LLVMMatchType<0>],
3242
- []>;
3242
+ [IntrInaccessibleMemOnly ]>;
3243
3243
3244
3244
class SME2_Matrix_ArrayVector_VG4_Multi_Single_Intrinsic
3245
3245
: DefaultAttrsIntrinsic<[],
3246
3246
[llvm_i32_ty,
3247
3247
llvm_anyvector_ty, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>,
3248
3248
LLVMMatchType<0>],
3249
- []>;
3249
+ [IntrInaccessibleMemOnly ]>;
3250
3250
3251
3251
class SME2_Matrix_ArrayVector_VG2_Multi_Multi_Intrinsic
3252
3252
: DefaultAttrsIntrinsic<[],
3253
3253
[llvm_i32_ty,
3254
3254
llvm_anyvector_ty, LLVMMatchType<0>,
3255
3255
LLVMMatchType<0>, LLVMMatchType<0>],
3256
- []>;
3256
+ [IntrInaccessibleMemOnly ]>;
3257
3257
3258
3258
class SME2_Matrix_ArrayVector_VG4_Multi_Multi_Intrinsic
3259
3259
: DefaultAttrsIntrinsic<[],
3260
3260
[llvm_i32_ty,
3261
3261
llvm_anyvector_ty, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>,
3262
3262
LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>],
3263
- []>;
3263
+ [IntrInaccessibleMemOnly ]>;
3264
3264
3265
3265
class SME2_Matrix_ArrayVector_Single_Index_Intrinsic
3266
3266
: DefaultAttrsIntrinsic<[],
3267
3267
[llvm_i32_ty,
3268
3268
llvm_anyvector_ty,
3269
3269
LLVMMatchType<0>, llvm_i32_ty],
3270
- [ImmArg<ArgIndex<3>>]>;
3270
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<3>>]>;
3271
3271
3272
3272
class SME2_Matrix_ArrayVector_VG2_Multi_Index_Intrinsic
3273
3273
: DefaultAttrsIntrinsic<[],
3274
3274
[llvm_i32_ty,
3275
3275
llvm_anyvector_ty, LLVMMatchType<0>,
3276
3276
LLVMMatchType<0>, llvm_i32_ty],
3277
- [ImmArg<ArgIndex<4>>]>;
3277
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<4>>]>;
3278
3278
3279
3279
class SME2_Matrix_ArrayVector_VG4_Multi_Index_Intrinsic
3280
3280
: DefaultAttrsIntrinsic<[],
3281
3281
[llvm_i32_ty,
3282
3282
llvm_anyvector_ty, LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>,
3283
3283
LLVMMatchType<0>, llvm_i32_ty],
3284
- [ImmArg<ArgIndex<6>>]>;
3284
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<6>>]>;
3285
3285
3286
3286
class SME2_VG2_Multi_Imm_Intrinsic
3287
3287
: DefaultAttrsIntrinsic<[LLVMSubdivide2VectorType<0>],
@@ -3300,14 +3300,14 @@ let TargetPrefix = "aarch64" in {
3300
3300
: DefaultAttrsIntrinsic<[],
3301
3301
[llvm_i32_ty,
3302
3302
llvm_anyvector_ty, LLVMMatchType<0>],
3303
- []>;
3303
+ [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3304
3304
3305
3305
class SME2_ZA_Write_VG4_Intrinsic
3306
3306
: DefaultAttrsIntrinsic<[],
3307
3307
[llvm_i32_ty,
3308
3308
llvm_anyvector_ty, LLVMMatchType<0>,
3309
3309
LLVMMatchType<0>, LLVMMatchType<0>],
3310
- []>;
3310
+ [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3311
3311
3312
3312
class SME2_VG2_Multi_Single_Intrinsic
3313
3313
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
@@ -3396,50 +3396,50 @@ let TargetPrefix = "aarch64" in {
3396
3396
class SME2_ZA_ArrayVector_Read_VG2_Intrinsic
3397
3397
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
3398
3398
[llvm_i32_ty],
3399
- []>;
3399
+ [IntrReadMem, IntrInaccessibleMemOnly ]>;
3400
3400
3401
3401
class SME2_ZA_ArrayVector_Read_VG4_Intrinsic
3402
3402
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
3403
3403
LLVMMatchType<0>, LLVMMatchType<0>],
3404
3404
[llvm_i32_ty],
3405
- []>;
3405
+ [IntrReadMem, IntrInaccessibleMemOnly ]>;
3406
3406
3407
3407
class SME2_Matrix_TileVector_Read_VG2_Intrinsic
3408
3408
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
3409
3409
[llvm_i32_ty, llvm_i32_ty],
3410
- []>;
3410
+ [IntrReadMem, IntrInaccessibleMemOnly ]>;
3411
3411
3412
3412
class SME2_Matrix_TileVector_Read_VG4_Intrinsic
3413
3413
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
3414
3414
LLVMMatchType<0>, LLVMMatchType<0>],
3415
3415
[llvm_i32_ty, llvm_i32_ty],
3416
- []>;
3416
+ [IntrReadMem, IntrInaccessibleMemOnly ]>;
3417
3417
3418
3418
class SME2_ZA_ArrayVector_Write_VG2_Intrinsic
3419
3419
: DefaultAttrsIntrinsic<[],
3420
3420
[llvm_i32_ty,
3421
3421
llvm_anyvector_ty, LLVMMatchType<0>],
3422
- []>;
3422
+ [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3423
3423
3424
3424
class SME2_ZA_ArrayVector_Write_VG4_Intrinsic
3425
3425
: DefaultAttrsIntrinsic<[],
3426
3426
[llvm_i32_ty,
3427
3427
llvm_anyvector_ty, LLVMMatchType<0>,
3428
3428
LLVMMatchType<0>, LLVMMatchType<0>],
3429
- []>;
3429
+ [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3430
3430
3431
3431
class SME2_Matrix_TileVector_Write_VG2_Intrinsic
3432
3432
: DefaultAttrsIntrinsic<[],
3433
3433
[llvm_i32_ty, llvm_i32_ty,
3434
3434
llvm_anyvector_ty, LLVMMatchType<0>],
3435
- [ImmArg<ArgIndex<0>>]>;
3435
+ [IntrWriteMem, IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>;
3436
3436
3437
3437
class SME2_Matrix_TileVector_Write_VG4_Intrinsic
3438
3438
: DefaultAttrsIntrinsic<[],
3439
3439
[llvm_i32_ty, llvm_i32_ty,
3440
3440
llvm_anyvector_ty, LLVMMatchType<0>,
3441
3441
LLVMMatchType<0>, LLVMMatchType<0>],
3442
- [ImmArg<ArgIndex<0>>]>;
3442
+ [IntrWriteMem, IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>;
3443
3443
3444
3444
class SME2_VG2_Multi_Single_Single_Intrinsic
3445
3445
: DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
@@ -3605,7 +3605,7 @@ let TargetPrefix = "aarch64" in {
3605
3605
// Multi-vector zeroing
3606
3606
3607
3607
foreach vg = ["vg1x2", "vg1x4", "vg2x1", "vg2x2", "vg2x4", "vg4x1", "vg4x2", "vg4x4"] in {
3608
- def int_aarch64_sme_zero_za64_ # vg : DefaultAttrsIntrinsic<[], [llvm_i32_ty], [IntrNoMem, IntrHasSideEffects ]>;
3608
+ def int_aarch64_sme_zero_za64_ # vg : DefaultAttrsIntrinsic<[], [llvm_i32_ty], [IntrWriteMem, IntrInaccessibleMemOnly ]>;
3609
3609
}
3610
3610
3611
3611
// Multi-vector signed saturating doubling multiply high
@@ -4045,57 +4045,57 @@ let TargetPrefix = "aarch64" in {
4045
4045
[llvm_i32_ty,
4046
4046
llvm_nxv16i1_ty, llvm_nxv16i1_ty,
4047
4047
llvm_nxv16i8_ty, llvm_nxv16i8_ty],
4048
- [ImmArg<ArgIndex<0>>, IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4048
+ [ImmArg<ArgIndex<0>>, IntrInaccessibleMemOnly]>;
4049
4049
4050
4050
class SME_FP8_ZA_LANE_VGx1_Intrinsic
4051
4051
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4052
4052
llvm_nxv16i8_ty,
4053
4053
llvm_nxv16i8_ty,
4054
4054
llvm_i32_ty],
4055
- [IntrInaccessibleMemOnly, IntrHasSideEffects, ImmArg<ArgIndex<3>>]>;
4055
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<3>>]>;
4056
4056
4057
4057
class SME_FP8_ZA_LANE_VGx2_Intrinsic
4058
4058
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4059
4059
llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4060
4060
llvm_nxv16i8_ty,
4061
4061
llvm_i32_ty],
4062
- [IntrInaccessibleMemOnly, IntrHasSideEffects, ImmArg<ArgIndex<4>>]>;
4062
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<4>>]>;
4063
4063
4064
4064
class SME_FP8_ZA_LANE_VGx4_Intrinsic
4065
4065
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4066
4066
llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4067
4067
llvm_nxv16i8_ty,
4068
4068
llvm_i32_ty],
4069
- [IntrInaccessibleMemOnly, IntrHasSideEffects, ImmArg<ArgIndex<6>>]>;
4069
+ [IntrInaccessibleMemOnly, ImmArg<ArgIndex<6>>]>;
4070
4070
class SME_FP8_ZA_SINGLE_VGx1_Intrinsic
4071
4071
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4072
4072
llvm_nxv16i8_ty,
4073
4073
llvm_nxv16i8_ty],
4074
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4074
+ [IntrInaccessibleMemOnly]>;
4075
4075
4076
4076
class SME_FP8_ZA_SINGLE_VGx2_Intrinsic
4077
4077
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4078
4078
llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4079
4079
llvm_nxv16i8_ty],
4080
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4080
+ [IntrInaccessibleMemOnly]>;
4081
4081
4082
4082
class SME_FP8_ZA_SINGLE_VGx4_Intrinsic
4083
4083
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4084
4084
llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4085
4085
llvm_nxv16i8_ty],
4086
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4086
+ [IntrInaccessibleMemOnly]>;
4087
4087
4088
4088
class SME_FP8_ZA_MULTI_VGx2_Intrinsic
4089
4089
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4090
4090
llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4091
4091
llvm_nxv16i8_ty, llvm_nxv16i8_ty],
4092
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4092
+ [IntrInaccessibleMemOnly]>;
4093
4093
4094
4094
class SME_FP8_ZA_MULTI_VGx4_Intrinsic
4095
4095
: DefaultAttrsIntrinsic<[], [llvm_i32_ty,
4096
4096
llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty,
4097
4097
llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty],
4098
- [IntrInaccessibleMemOnly, IntrHasSideEffects ]>;
4098
+ [IntrInaccessibleMemOnly]>;
4099
4099
//
4100
4100
// CVT from FP8 to half-precision/BFloat16 multi-vector
4101
4101
//
0 commit comments