@@ -5640,10 +5640,10 @@ def VBITq : N3VX<1, 0, 0b10, 0b0001, 1, 1,
5640
5640
// VABD : Vector Absolute Difference
5641
5641
defm VABDs : N3VInt_QHS<0, 0, 0b0111, 0, N3RegFrm,
5642
5642
IIC_VSUBi4D, IIC_VSUBi4D, IIC_VSUBi4Q, IIC_VSUBi4Q,
5643
- "vabd", "s", int_arm_neon_vabds , 1>;
5643
+ "vabd", "s", abds , 1>;
5644
5644
defm VABDu : N3VInt_QHS<1, 0, 0b0111, 0, N3RegFrm,
5645
5645
IIC_VSUBi4D, IIC_VSUBi4D, IIC_VSUBi4Q, IIC_VSUBi4Q,
5646
- "vabd", "u", int_arm_neon_vabdu , 1>;
5646
+ "vabd", "u", abdu , 1>;
5647
5647
def VABDfd : N3VDInt<1, 0, 0b10, 0b1101, 0, N3RegFrm, IIC_VBIND,
5648
5648
"vabd", "f32", v2f32, v2f32, int_arm_neon_vabds, 1>;
5649
5649
def VABDfq : N3VQInt<1, 0, 0b10, 0b1101, 0, N3RegFrm, IIC_VBINQ,
@@ -5657,44 +5657,30 @@ def VABDhq : N3VQInt<1, 0, 0b11, 0b1101, 0, N3RegFrm, IIC_VBINQ,
5657
5657
5658
5658
// VABDL : Vector Absolute Difference Long (Q = | D - D |)
5659
5659
defm VABDLs : N3VLIntExt_QHS<0,1,0b0111,0, IIC_VSUBi4Q,
5660
- "vabdl", "s", int_arm_neon_vabds , zext, 1>;
5660
+ "vabdl", "s", abds , zext, 1>;
5661
5661
defm VABDLu : N3VLIntExt_QHS<1,1,0b0111,0, IIC_VSUBi4Q,
5662
- "vabdl", "u", int_arm_neon_vabdu , zext, 1>;
5662
+ "vabdl", "u", abdu , zext, 1>;
5663
5663
5664
5664
let Predicates = [HasNEON] in {
5665
- def : Pat<(v8i16 (abs (sub (zext ( v8i8 DPR:$opA)) , (zext ( v8i8 DPR:$opB) )))),
5665
+ def : Pat<(v8i16 (zext (abdu ( v8i8 DPR:$opA), (v8i8 DPR:$opB)))),
5666
5666
(VABDLuv8i16 DPR:$opA, DPR:$opB)>;
5667
- def : Pat<(v4i32 (abs (sub (zext ( v4i16 DPR:$opA)) , (zext ( v4i16 DPR:$opB) )))),
5667
+ def : Pat<(v4i32 (zext (abdu ( v4i16 DPR:$opA), (v4i16 DPR:$opB)))),
5668
5668
(VABDLuv4i32 DPR:$opA, DPR:$opB)>;
5669
- }
5670
-
5671
- // ISD::ABS is not legal for v2i64, so VABDL needs to be matched from the
5672
- // shift/xor pattern for ABS.
5673
-
5674
- def abd_shr :
5675
- PatFrag<(ops node:$in1, node:$in2, node:$shift),
5676
- (ARMvshrsImm (sub (zext node:$in1),
5677
- (zext node:$in2)), (i32 $shift))>;
5678
-
5679
- let Predicates = [HasNEON] in {
5680
- def : Pat<(xor (v2i64 (abd_shr (v2i32 DPR:$opA), (v2i32 DPR:$opB), 63)),
5681
- (v2i64 (add (sub (zext (v2i32 DPR:$opA)),
5682
- (zext (v2i32 DPR:$opB))),
5683
- (abd_shr (v2i32 DPR:$opA), (v2i32 DPR:$opB), 63)))),
5669
+ def : Pat<(v2i64 (zext (abdu (v2i32 DPR:$opA), (v2i32 DPR:$opB)))),
5684
5670
(VABDLuv2i64 DPR:$opA, DPR:$opB)>;
5685
5671
}
5686
5672
5687
5673
// VABA : Vector Absolute Difference and Accumulate
5688
5674
defm VABAs : N3VIntOp_QHS<0,0,0b0111,1, IIC_VABAD, IIC_VABAQ,
5689
- "vaba", "s", int_arm_neon_vabds , add>;
5675
+ "vaba", "s", abds , add>;
5690
5676
defm VABAu : N3VIntOp_QHS<1,0,0b0111,1, IIC_VABAD, IIC_VABAQ,
5691
- "vaba", "u", int_arm_neon_vabdu , add>;
5677
+ "vaba", "u", abdu , add>;
5692
5678
5693
5679
// VABAL : Vector Absolute Difference and Accumulate Long (Q += | D - D |)
5694
5680
defm VABALs : N3VLIntExtOp_QHS<0,1,0b0101,0, IIC_VABAD,
5695
- "vabal", "s", int_arm_neon_vabds , zext, add>;
5681
+ "vabal", "s", abds , zext, add>;
5696
5682
defm VABALu : N3VLIntExtOp_QHS<1,1,0b0101,0, IIC_VABAD,
5697
- "vabal", "u", int_arm_neon_vabdu , zext, add>;
5683
+ "vabal", "u", abdu , zext, add>;
5698
5684
5699
5685
// Vector Maximum and Minimum.
5700
5686
0 commit comments