@@ -493,26 +493,14 @@ def NEONvcltz : SDNode<"ARMISD::VCLTZ", SDTARMVCMPZ>;
493
493
def NEONvcgtu : SDNode<"ARMISD::VCGTU", SDTARMVCMP>;
494
494
def NEONvtst : SDNode<"ARMISD::VTST", SDTARMVCMP>;
495
495
496
- // Vector Shifts
497
- def SDTARMVSH : SDTypeProfile<1, 2, [SDTCisInt<0>, SDTCisSameAs<0, 1>,
498
- SDTCisSameAs<0, 2>,]>;
499
-
500
- def NEONvshls : SDNode<"ARMISD::VSHLs", SDTARMVSH>;
501
- def NEONvshlu : SDNode<"ARMISD::VSHLu", SDTARMVSH>;
502
-
503
496
// Types for vector shift by immediates. The "SHX" version is for long and
504
497
// narrow operations where the source and destination vectors have different
505
498
// types. The "SHINS" version is for shift and insert operations.
506
- def SDTARMVSHIMM : SDTypeProfile<1, 2, [SDTCisInt<0>, SDTCisSameAs<0, 1>,
507
- SDTCisVT<2, i32>]>;
508
499
def SDTARMVSHXIMM : SDTypeProfile<1, 2, [SDTCisInt<0>, SDTCisInt<1>,
509
500
SDTCisVT<2, i32>]>;
510
501
def SDTARMVSHINSIMM : SDTypeProfile<1, 3, [SDTCisInt<0>, SDTCisSameAs<0, 1>,
511
502
SDTCisSameAs<0, 2>, SDTCisVT<3, i32>]>;
512
503
513
- def NEONvshlImm : SDNode<"ARMISD::VSHLIMM", SDTARMVSHIMM>;
514
- def NEONvshrsImm : SDNode<"ARMISD::VSHRsIMM", SDTARMVSHIMM>;
515
- def NEONvshruImm : SDNode<"ARMISD::VSHRuIMM", SDTARMVSHIMM>;
516
504
def NEONvshrnImm : SDNode<"ARMISD::VSHRNIMM", SDTARMVSHXIMM>;
517
505
518
506
def NEONvrshrsImm : SDNode<"ARMISD::VRSHRsIMM", SDTARMVSHIMM>;
@@ -4269,11 +4257,11 @@ defm VRADDHN : N3VNInt_HSD<1,1,0b0100,0, "vraddhn", "i",
4269
4257
int_arm_neon_vraddhn, 1>;
4270
4258
4271
4259
let Predicates = [HasNEON] in {
4272
- def : Pat<(v8i8 (trunc (NEONvshruImm (add (v8i16 QPR:$Vn), QPR:$Vm), 8))),
4260
+ def : Pat<(v8i8 (trunc (ARMvshruImm (add (v8i16 QPR:$Vn), QPR:$Vm), 8))),
4273
4261
(VADDHNv8i8 QPR:$Vn, QPR:$Vm)>;
4274
- def : Pat<(v4i16 (trunc (NEONvshruImm (add (v4i32 QPR:$Vn), QPR:$Vm), 16))),
4262
+ def : Pat<(v4i16 (trunc (ARMvshruImm (add (v4i32 QPR:$Vn), QPR:$Vm), 16))),
4275
4263
(VADDHNv4i16 QPR:$Vn, QPR:$Vm)>;
4276
- def : Pat<(v2i32 (trunc (NEONvshruImm (add (v2i64 QPR:$Vn), QPR:$Vm), 32))),
4264
+ def : Pat<(v2i32 (trunc (ARMvshruImm (add (v2i64 QPR:$Vn), QPR:$Vm), 32))),
4277
4265
(VADDHNv2i32 QPR:$Vn, QPR:$Vm)>;
4278
4266
}
4279
4267
@@ -5027,11 +5015,11 @@ defm VRSUBHN : N3VNInt_HSD<1,1,0b0110,0, "vrsubhn", "i",
5027
5015
int_arm_neon_vrsubhn, 0>;
5028
5016
5029
5017
let Predicates = [HasNEON] in {
5030
- def : Pat<(v8i8 (trunc (NEONvshruImm (sub (v8i16 QPR:$Vn), QPR:$Vm), 8))),
5018
+ def : Pat<(v8i8 (trunc (ARMvshruImm (sub (v8i16 QPR:$Vn), QPR:$Vm), 8))),
5031
5019
(VSUBHNv8i8 QPR:$Vn, QPR:$Vm)>;
5032
- def : Pat<(v4i16 (trunc (NEONvshruImm (sub (v4i32 QPR:$Vn), QPR:$Vm), 16))),
5020
+ def : Pat<(v4i16 (trunc (ARMvshruImm (sub (v4i32 QPR:$Vn), QPR:$Vm), 16))),
5033
5021
(VSUBHNv4i16 QPR:$Vn, QPR:$Vm)>;
5034
- def : Pat<(v2i32 (trunc (NEONvshruImm (sub (v2i64 QPR:$Vn), QPR:$Vm), 32))),
5022
+ def : Pat<(v2i32 (trunc (ARMvshruImm (sub (v2i64 QPR:$Vn), QPR:$Vm), 32))),
5035
5023
(VSUBHNv2i32 QPR:$Vn, QPR:$Vm)>;
5036
5024
}
5037
5025
@@ -5522,7 +5510,7 @@ def : Pat<(v4i32 (abs (sub (zext (v4i16 DPR:$opA)), (zext (v4i16 DPR:$opB))))),
5522
5510
5523
5511
def abd_shr :
5524
5512
PatFrag<(ops node:$in1, node:$in2, node:$shift),
5525
- (NEONvshrsImm (sub (zext node:$in1),
5513
+ (ARMvshrsImm (sub (zext node:$in1),
5526
5514
(zext node:$in2)), (i32 $shift))>;
5527
5515
5528
5516
let Predicates = [HasNEON] in {
@@ -5790,56 +5778,56 @@ defm VSHLu : N3VInt_QHSDSh<1, 0, 0b0100, 0, N3RegVShFrm,
5790
5778
"vshl", "u", int_arm_neon_vshiftu>;
5791
5779
5792
5780
let Predicates = [HasNEON] in {
5793
- def : Pat<(v8i8 (NEONvshls (v8i8 DPR:$Dn), (v8i8 DPR:$Dm))),
5781
+ def : Pat<(v8i8 (ARMvshls (v8i8 DPR:$Dn), (v8i8 DPR:$Dm))),
5794
5782
(VSHLsv8i8 DPR:$Dn, DPR:$Dm)>;
5795
- def : Pat<(v4i16 (NEONvshls (v4i16 DPR:$Dn), (v4i16 DPR:$Dm))),
5783
+ def : Pat<(v4i16 (ARMvshls (v4i16 DPR:$Dn), (v4i16 DPR:$Dm))),
5796
5784
(VSHLsv4i16 DPR:$Dn, DPR:$Dm)>;
5797
- def : Pat<(v2i32 (NEONvshls (v2i32 DPR:$Dn), (v2i32 DPR:$Dm))),
5785
+ def : Pat<(v2i32 (ARMvshls (v2i32 DPR:$Dn), (v2i32 DPR:$Dm))),
5798
5786
(VSHLsv2i32 DPR:$Dn, DPR:$Dm)>;
5799
- def : Pat<(v1i64 (NEONvshls (v1i64 DPR:$Dn), (v1i64 DPR:$Dm))),
5787
+ def : Pat<(v1i64 (ARMvshls (v1i64 DPR:$Dn), (v1i64 DPR:$Dm))),
5800
5788
(VSHLsv1i64 DPR:$Dn, DPR:$Dm)>;
5801
- def : Pat<(v16i8 (NEONvshls (v16i8 QPR:$Dn), (v16i8 QPR:$Dm))),
5789
+ def : Pat<(v16i8 (ARMvshls (v16i8 QPR:$Dn), (v16i8 QPR:$Dm))),
5802
5790
(VSHLsv16i8 QPR:$Dn, QPR:$Dm)>;
5803
- def : Pat<(v8i16 (NEONvshls (v8i16 QPR:$Dn), (v8i16 QPR:$Dm))),
5791
+ def : Pat<(v8i16 (ARMvshls (v8i16 QPR:$Dn), (v8i16 QPR:$Dm))),
5804
5792
(VSHLsv8i16 QPR:$Dn, QPR:$Dm)>;
5805
- def : Pat<(v4i32 (NEONvshls (v4i32 QPR:$Dn), (v4i32 QPR:$Dm))),
5793
+ def : Pat<(v4i32 (ARMvshls (v4i32 QPR:$Dn), (v4i32 QPR:$Dm))),
5806
5794
(VSHLsv4i32 QPR:$Dn, QPR:$Dm)>;
5807
- def : Pat<(v2i64 (NEONvshls (v2i64 QPR:$Dn), (v2i64 QPR:$Dm))),
5795
+ def : Pat<(v2i64 (ARMvshls (v2i64 QPR:$Dn), (v2i64 QPR:$Dm))),
5808
5796
(VSHLsv2i64 QPR:$Dn, QPR:$Dm)>;
5809
5797
5810
- def : Pat<(v8i8 (NEONvshlu (v8i8 DPR:$Dn), (v8i8 DPR:$Dm))),
5798
+ def : Pat<(v8i8 (ARMvshlu (v8i8 DPR:$Dn), (v8i8 DPR:$Dm))),
5811
5799
(VSHLuv8i8 DPR:$Dn, DPR:$Dm)>;
5812
- def : Pat<(v4i16 (NEONvshlu (v4i16 DPR:$Dn), (v4i16 DPR:$Dm))),
5800
+ def : Pat<(v4i16 (ARMvshlu (v4i16 DPR:$Dn), (v4i16 DPR:$Dm))),
5813
5801
(VSHLuv4i16 DPR:$Dn, DPR:$Dm)>;
5814
- def : Pat<(v2i32 (NEONvshlu (v2i32 DPR:$Dn), (v2i32 DPR:$Dm))),
5802
+ def : Pat<(v2i32 (ARMvshlu (v2i32 DPR:$Dn), (v2i32 DPR:$Dm))),
5815
5803
(VSHLuv2i32 DPR:$Dn, DPR:$Dm)>;
5816
- def : Pat<(v1i64 (NEONvshlu (v1i64 DPR:$Dn), (v1i64 DPR:$Dm))),
5804
+ def : Pat<(v1i64 (ARMvshlu (v1i64 DPR:$Dn), (v1i64 DPR:$Dm))),
5817
5805
(VSHLuv1i64 DPR:$Dn, DPR:$Dm)>;
5818
- def : Pat<(v16i8 (NEONvshlu (v16i8 QPR:$Dn), (v16i8 QPR:$Dm))),
5806
+ def : Pat<(v16i8 (ARMvshlu (v16i8 QPR:$Dn), (v16i8 QPR:$Dm))),
5819
5807
(VSHLuv16i8 QPR:$Dn, QPR:$Dm)>;
5820
- def : Pat<(v8i16 (NEONvshlu (v8i16 QPR:$Dn), (v8i16 QPR:$Dm))),
5808
+ def : Pat<(v8i16 (ARMvshlu (v8i16 QPR:$Dn), (v8i16 QPR:$Dm))),
5821
5809
(VSHLuv8i16 QPR:$Dn, QPR:$Dm)>;
5822
- def : Pat<(v4i32 (NEONvshlu (v4i32 QPR:$Dn), (v4i32 QPR:$Dm))),
5810
+ def : Pat<(v4i32 (ARMvshlu (v4i32 QPR:$Dn), (v4i32 QPR:$Dm))),
5823
5811
(VSHLuv4i32 QPR:$Dn, QPR:$Dm)>;
5824
- def : Pat<(v2i64 (NEONvshlu (v2i64 QPR:$Dn), (v2i64 QPR:$Dm))),
5812
+ def : Pat<(v2i64 (ARMvshlu (v2i64 QPR:$Dn), (v2i64 QPR:$Dm))),
5825
5813
(VSHLuv2i64 QPR:$Dn, QPR:$Dm)>;
5826
5814
5827
5815
}
5828
5816
5829
5817
// VSHL : Vector Shift Left (Immediate)
5830
- defm VSHLi : N2VShL_QHSD<0, 1, 0b0101, 1, IIC_VSHLiD, "vshl", "i", NEONvshlImm >;
5818
+ defm VSHLi : N2VShL_QHSD<0, 1, 0b0101, 1, IIC_VSHLiD, "vshl", "i", ARMvshlImm >;
5831
5819
5832
5820
// VSHR : Vector Shift Right (Immediate)
5833
5821
defm VSHRs : N2VShR_QHSD<0, 1, 0b0000, 1, IIC_VSHLiD, "vshr", "s", "VSHRs",
5834
- NEONvshrsImm >;
5822
+ ARMvshrsImm >;
5835
5823
defm VSHRu : N2VShR_QHSD<1, 1, 0b0000, 1, IIC_VSHLiD, "vshr", "u", "VSHRu",
5836
- NEONvshruImm >;
5824
+ ARMvshruImm >;
5837
5825
5838
5826
// VSHLL : Vector Shift Left Long
5839
5827
defm VSHLLs : N2VLSh_QHS<0, 1, 0b1010, 0, 0, 1, "vshll", "s",
5840
- PatFrag<(ops node:$LHS, node:$RHS), (NEONvshlImm (sext node:$LHS), node:$RHS)>>;
5828
+ PatFrag<(ops node:$LHS, node:$RHS), (ARMvshlImm (sext node:$LHS), node:$RHS)>>;
5841
5829
defm VSHLLu : N2VLSh_QHS<1, 1, 0b1010, 0, 0, 1, "vshll", "u",
5842
- PatFrag<(ops node:$LHS, node:$RHS), (NEONvshlImm (zext node:$LHS), node:$RHS)>>;
5830
+ PatFrag<(ops node:$LHS, node:$RHS), (ARMvshlImm (zext node:$LHS), node:$RHS)>>;
5843
5831
5844
5832
// VSHLL : Vector Shift Left Long (with maximum shift count)
5845
5833
class N2VLShMax<bit op24, bit op23, bits<6> op21_16, bits<4> op11_8, bit op7,
@@ -5858,37 +5846,37 @@ def VSHLLi32 : N2VLShMax<1, 1, 0b111010, 0b0011, 0, 0, 0, "vshll", "i32",
5858
5846
v2i64, v2i32, imm32>;
5859
5847
5860
5848
let Predicates = [HasNEON] in {
5861
- def : Pat<(v8i16 (NEONvshlImm (zext (v8i8 DPR:$Rn)), (i32 8))),
5849
+ def : Pat<(v8i16 (ARMvshlImm (zext (v8i8 DPR:$Rn)), (i32 8))),
5862
5850
(VSHLLi8 DPR:$Rn, 8)>;
5863
- def : Pat<(v4i32 (NEONvshlImm (zext (v4i16 DPR:$Rn)), (i32 16))),
5851
+ def : Pat<(v4i32 (ARMvshlImm (zext (v4i16 DPR:$Rn)), (i32 16))),
5864
5852
(VSHLLi16 DPR:$Rn, 16)>;
5865
- def : Pat<(v2i64 (NEONvshlImm (zext (v2i32 DPR:$Rn)), (i32 32))),
5853
+ def : Pat<(v2i64 (ARMvshlImm (zext (v2i32 DPR:$Rn)), (i32 32))),
5866
5854
(VSHLLi32 DPR:$Rn, 32)>;
5867
- def : Pat<(v8i16 (NEONvshlImm (sext (v8i8 DPR:$Rn)), (i32 8))),
5855
+ def : Pat<(v8i16 (ARMvshlImm (sext (v8i8 DPR:$Rn)), (i32 8))),
5868
5856
(VSHLLi8 DPR:$Rn, 8)>;
5869
- def : Pat<(v4i32 (NEONvshlImm (sext (v4i16 DPR:$Rn)), (i32 16))),
5857
+ def : Pat<(v4i32 (ARMvshlImm (sext (v4i16 DPR:$Rn)), (i32 16))),
5870
5858
(VSHLLi16 DPR:$Rn, 16)>;
5871
- def : Pat<(v2i64 (NEONvshlImm (sext (v2i32 DPR:$Rn)), (i32 32))),
5859
+ def : Pat<(v2i64 (ARMvshlImm (sext (v2i32 DPR:$Rn)), (i32 32))),
5872
5860
(VSHLLi32 DPR:$Rn, 32)>;
5873
- def : Pat<(v8i16 (NEONvshlImm (anyext (v8i8 DPR:$Rn)), (i32 8))),
5861
+ def : Pat<(v8i16 (ARMvshlImm (anyext (v8i8 DPR:$Rn)), (i32 8))),
5874
5862
(VSHLLi8 DPR:$Rn, 8)>;
5875
- def : Pat<(v4i32 (NEONvshlImm (anyext (v4i16 DPR:$Rn)), (i32 16))),
5863
+ def : Pat<(v4i32 (ARMvshlImm (anyext (v4i16 DPR:$Rn)), (i32 16))),
5876
5864
(VSHLLi16 DPR:$Rn, 16)>;
5877
- def : Pat<(v2i64 (NEONvshlImm (anyext (v2i32 DPR:$Rn)), (i32 32))),
5865
+ def : Pat<(v2i64 (ARMvshlImm (anyext (v2i32 DPR:$Rn)), (i32 32))),
5878
5866
(VSHLLi32 DPR:$Rn, 32)>;
5879
5867
}
5880
5868
5881
5869
// VSHRN : Vector Shift Right and Narrow
5882
5870
defm VSHRN : N2VNSh_HSD<0,1,0b1000,0,0,1, IIC_VSHLiD, "vshrn", "i",
5883
5871
PatFrag<(ops node:$Rn, node:$amt),
5884
- (trunc (NEONvshrsImm node:$Rn, node:$amt))>>;
5872
+ (trunc (ARMvshrsImm node:$Rn, node:$amt))>>;
5885
5873
5886
5874
let Predicates = [HasNEON] in {
5887
- def : Pat<(v8i8 (trunc (NEONvshruImm (v8i16 QPR:$Vn), shr_imm8:$amt))),
5875
+ def : Pat<(v8i8 (trunc (ARMvshruImm (v8i16 QPR:$Vn), shr_imm8:$amt))),
5888
5876
(VSHRNv8i8 QPR:$Vn, shr_imm8:$amt)>;
5889
- def : Pat<(v4i16 (trunc (NEONvshruImm (v4i32 QPR:$Vn), shr_imm16:$amt))),
5877
+ def : Pat<(v4i16 (trunc (ARMvshruImm (v4i32 QPR:$Vn), shr_imm16:$amt))),
5890
5878
(VSHRNv4i16 QPR:$Vn, shr_imm16:$amt)>;
5891
- def : Pat<(v2i32 (trunc (NEONvshruImm (v2i64 QPR:$Vn), shr_imm32:$amt))),
5879
+ def : Pat<(v2i32 (trunc (ARMvshruImm (v2i64 QPR:$Vn), shr_imm32:$amt))),
5892
5880
(VSHRNv2i32 QPR:$Vn, shr_imm32:$amt)>;
5893
5881
}
5894
5882
@@ -5952,8 +5940,8 @@ defm VQRSHRUN : N2VNSh_HSD<1, 1, 0b1000, 0, 1, 1, IIC_VSHLi4D, "vqrshrun", "s",
5952
5940
NEONvqrshrnsuImm>;
5953
5941
5954
5942
// VSRA : Vector Shift Right and Accumulate
5955
- defm VSRAs : N2VShAdd_QHSD<0, 1, 0b0001, 1, "vsra", "s", NEONvshrsImm >;
5956
- defm VSRAu : N2VShAdd_QHSD<1, 1, 0b0001, 1, "vsra", "u", NEONvshruImm >;
5943
+ defm VSRAs : N2VShAdd_QHSD<0, 1, 0b0001, 1, "vsra", "s", ARMvshrsImm >;
5944
+ defm VSRAu : N2VShAdd_QHSD<1, 1, 0b0001, 1, "vsra", "u", ARMvshruImm >;
5957
5945
// VRSRA : Vector Rounding Shift Right and Accumulate
5958
5946
defm VRSRAs : N2VShAdd_QHSD<0, 1, 0b0011, 1, "vrsra", "s", NEONvrshrsImm>;
5959
5947
defm VRSRAu : N2VShAdd_QHSD<1, 1, 0b0011, 1, "vrsra", "u", NEONvrshruImm>;
0 commit comments