Skip to content

Commit 54744bc

Browse files
[LLVM][AArch64] Add "u" variants of sve.[s,u]hsub intrinsics (#170894)
1 parent ad62c04 commit 54744bc

File tree

16 files changed

+436
-87
lines changed

16 files changed

+436
-87
lines changed

clang/include/clang/Basic/arm_sve.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,10 +1292,10 @@ defm SVQSUB_S : SInstZPZZ<"svqsub", "csli", "aarch64_sve_sqsub", "aarch64
12921292
defm SVQSUB_U : SInstZPZZ<"svqsub", "UcUsUiUl", "aarch64_sve_uqsub", "aarch64_sve_uqsub_u">;
12931293
defm SVQSUBR_S : SInstZPZZ<"svqsubr", "csli", "aarch64_sve_sqsubr", "aarch64_sve_sqsub_u", [ReverseMergeAnyBinOp]>;
12941294
defm SVQSUBR_U : SInstZPZZ<"svqsubr", "UcUsUiUl", "aarch64_sve_uqsubr", "aarch64_sve_uqsub_u", [ReverseMergeAnyBinOp]>;
1295-
defm SVHSUB_S : SInstZPZZ<"svhsub", "csli", "aarch64_sve_shsub", "aarch64_sve_shsub">;
1296-
defm SVHSUB_U : SInstZPZZ<"svhsub", "UcUsUiUl", "aarch64_sve_uhsub", "aarch64_sve_uhsub">;
1297-
defm SVHSUBR_S : SInstZPZZ<"svhsubr", "csli", "aarch64_sve_shsubr", "aarch64_sve_shsubr">;
1298-
defm SVHSUBR_U : SInstZPZZ<"svhsubr", "UcUsUiUl", "aarch64_sve_uhsubr", "aarch64_sve_uhsubr">;
1295+
defm SVHSUB_S : SInstZPZZ<"svhsub", "csli", "aarch64_sve_shsub", "aarch64_sve_shsub_u">;
1296+
defm SVHSUB_U : SInstZPZZ<"svhsub", "UcUsUiUl", "aarch64_sve_uhsub", "aarch64_sve_uhsub_u">;
1297+
defm SVHSUBR_S : SInstZPZZ<"svhsubr", "csli", "aarch64_sve_shsubr", "aarch64_sve_shsub_u", [ReverseMergeAnyBinOp]>;
1298+
defm SVHSUBR_U : SInstZPZZ<"svhsubr", "UcUsUiUl", "aarch64_sve_uhsubr", "aarch64_sve_uhsub_u", [ReverseMergeAnyBinOp]>;
12991299

13001300
defm SVQABS : SInstZPZ<"svqabs", "csil", "aarch64_sve_sqabs">;
13011301
defm SVQNEG : SInstZPZ<"svqneg", "csil", "aarch64_sve_sqneg">;

clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_hsub.c

Lines changed: 32 additions & 32 deletions
Large diffs are not rendered by default.

clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_hsubr.c

Lines changed: 32 additions & 32 deletions
Large diffs are not rendered by default.

llvm/include/llvm/IR/IntrinsicsAArch64.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2435,6 +2435,7 @@ def int_aarch64_sve_stnt1_scatter_scalar_offset : AdvSIMD_ScatterStore_VS_Intri
24352435
def int_aarch64_sve_saba : AdvSIMD_3VectorArg_Intrinsic<[IntrSpeculatable]>;
24362436
def int_aarch64_sve_shadd : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;
24372437
def int_aarch64_sve_shsub : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;
2438+
def int_aarch64_sve_shsub_u : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;
24382439
def int_aarch64_sve_shsubr : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;
24392440
def int_aarch64_sve_sli : AdvSIMD_2VectorArgIndexed_Intrinsic<[IntrSpeculatable]>;
24402441
def int_aarch64_sve_sqabs : AdvSIMD_Merged1VectorArg_Intrinsic<[IntrSpeculatable]>;
@@ -2467,6 +2468,7 @@ def int_aarch64_sve_suqadd : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpecul
24672468
def int_aarch64_sve_uaba : AdvSIMD_3VectorArg_Intrinsic<[IntrSpeculatable]>;
24682469
def int_aarch64_sve_uhadd : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;
24692470
def int_aarch64_sve_uhsub : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;
2471+
def int_aarch64_sve_uhsub_u : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;
24702472
def int_aarch64_sve_uhsubr : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;
24712473
def int_aarch64_sve_uqadd : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;
24722474
def int_aarch64_sve_uqrshl : AdvSIMD_Pred2VectorArg_Intrinsic<[IntrSpeculatable]>;

llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3838,12 +3838,15 @@ let Predicates = [HasSVE2_or_SME] in {
38383838
// SVE2 integer halving add/subtract (predicated)
38393839
defm SHADD_ZPmZ : sve2_int_arith_pred<0b100000, "shadd", AArch64shadd>;
38403840
defm UHADD_ZPmZ : sve2_int_arith_pred<0b100010, "uhadd", AArch64uhadd>;
3841-
defm SHSUB_ZPmZ : sve2_int_arith_pred<0b100100, "shsub", int_aarch64_sve_shsub>;
3842-
defm UHSUB_ZPmZ : sve2_int_arith_pred<0b100110, "uhsub", int_aarch64_sve_uhsub>;
3841+
defm SHSUB_ZPmZ : sve2_int_arith_pred<0b100100, "shsub", int_aarch64_sve_shsub, "SHSUB_ZPZZ", DestructiveBinaryCommWithRev, "SHSUBR_ZPmZ">;
3842+
defm UHSUB_ZPmZ : sve2_int_arith_pred<0b100110, "uhsub", int_aarch64_sve_uhsub, "UHSUB_ZPZZ", DestructiveBinaryCommWithRev, "UHSUBR_ZPmZ">;
38433843
defm SRHADD_ZPmZ : sve2_int_arith_pred<0b101000, "srhadd", AArch64srhadd>;
38443844
defm URHADD_ZPmZ : sve2_int_arith_pred<0b101010, "urhadd", AArch64urhadd>;
3845-
defm SHSUBR_ZPmZ : sve2_int_arith_pred<0b101100, "shsubr", int_aarch64_sve_shsubr>;
3846-
defm UHSUBR_ZPmZ : sve2_int_arith_pred<0b101110, "uhsubr", int_aarch64_sve_uhsubr>;
3845+
defm SHSUBR_ZPmZ : sve2_int_arith_pred<0b101100, "shsubr", int_aarch64_sve_shsubr, "SHSUBR_ZPZZ", DestructiveBinaryCommWithRev, "SHSUB_ZPmZ", /*isReverseInstr*/ 1>;
3846+
defm UHSUBR_ZPmZ : sve2_int_arith_pred<0b101110, "uhsubr", int_aarch64_sve_uhsubr, "UHSUBR_ZPZZ", DestructiveBinaryCommWithRev, "UHSUB_ZPmZ", /*isReverseInstr*/ 1>;
3847+
3848+
defm SHSUB_ZPZZ : sve_int_bin_pred_bhsd<int_aarch64_sve_shsub_u>;
3849+
defm UHSUB_ZPZZ : sve_int_bin_pred_bhsd<int_aarch64_sve_uhsub_u>;
38473850

38483851
// SVE2 integer pairwise add and accumulate long
38493852
defm SADALP_ZPmZ : sve2_int_sadd_long_accum_pairwise<0, "sadalp", int_aarch64_sve_sadalp>;

llvm/lib/Target/AArch64/AArch64SchedA320.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,7 @@ def : InstRW<[CortexA320Write<3, CortexA320UnitVALU>],
674674
"^(ADD|SUB|SUBR)_ZI_[BHSD]",
675675
"^ADR_[SU]XTW_ZZZ_D_[0123]",
676676
"^ADR_LSL_ZZZ_[SD]_[0123]",
677-
"^[SU]H(ADD|SUB|SUBR)_ZPmZ_[BHSD]")>;
677+
"^[SU]H(ADD|SUB|SUBR)_(ZPmZ|ZPZZ)_[BHSD]")>;
678678
def : InstRW<[CortexA320Write<4, CortexA320UnitVALU>],
679679
(instregex "^[SU](ADD|SUB)[LW][BT]_ZZZ_[HSD]",
680680
"^SADDLBT_ZZZ_[HSD]",

llvm/lib/Target/AArch64/AArch64SchedA510.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ def : InstRW<[CortexA510Write<3, CortexA510UnitVALU>],
652652
"^(ADD|SUB|SUBR)_ZI_[BHSD]",
653653
"^ADR_[SU]XTW_ZZZ_D_[0123]",
654654
"^ADR_LSL_ZZZ_[SD]_[0123]",
655-
"^[SU]H(ADD|SUB|SUBR)_ZPmZ_[BHSD]")>;
655+
"^[SU]H(ADD|SUB|SUBR)_(ZPmZ|ZPZZ)_[BHSD]")>;
656656
def : InstRW<[CortexA510Write<4, CortexA510UnitVALU>],
657657
(instregex "^[SU](ADD|SUB)[LW][BT]_ZZZ_[HSD]",
658658
"^SADDLBT_ZZZ_[HSD]",

llvm/lib/Target/AArch64/AArch64SchedNeoverseN2.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1662,7 +1662,7 @@ def : InstRW<[N2Write_2c_1V],
16621662
"^ADR_LSL_ZZZ_[SD]_[0123]",
16631663
"^[SU](ADD|SUB)[LW][BT]_ZZZ_[HSD]",
16641664
"^SADDLBT_ZZZ_[HSD]",
1665-
"^[SU]H(ADD|SUB|SUBR)_ZPmZ_[BHSD]",
1665+
"^[SU]H(ADD|SUB|SUBR)_(ZPmZ|ZPZZ)_[BHSD]",
16661666
"^SSUBL(BT|TB)_ZZZ_[HSD]")>;
16671667

16681668
// Arithmetic, complex

llvm/lib/Target/AArch64/AArch64SchedNeoverseN3.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1752,7 +1752,7 @@ def : InstRW<[N3Write_2c_1V],
17521752
"^ADR_LSL_ZZZ_[SD]_[0123]",
17531753
"^[SU](ADD|SUB)[LW][BT]_ZZZ_[HSD]",
17541754
"^SADDLBT_ZZZ_[HSD]",
1755-
"^[SU]H(ADD|SUB|SUBR)_ZPmZ_[BHSD]",
1755+
"^[SU]H(ADD|SUB|SUBR)_(ZPmZ|ZPZZ)_[BHSD]",
17561756
"^SSUBL(BT|TB)_ZZZ_[HSD]")>;
17571757

17581758
// Arithmetic, complex

llvm/lib/Target/AArch64/AArch64SchedNeoverseV2.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2125,7 +2125,7 @@ def : InstRW<[V2Write_2c_1V],
21252125
"^ADR_LSL_ZZZ_[SD]_[0123]",
21262126
"^[SU](ADD|SUB)[LW][BT]_ZZZ_[HSD]",
21272127
"^SADDLBT_ZZZ_[HSD]",
2128-
"^[SU]H(ADD|SUB|SUBR)_ZPmZ_[BHSD]",
2128+
"^[SU]H(ADD|SUB|SUBR)_(ZPmZ|ZPZZ)_[BHSD]",
21292129
"^SSUBL(BT|TB)_ZZZ_[HSD]")>;
21302130

21312131
// Arithmetic, complex

0 commit comments

Comments
 (0)