@@ -5640,10 +5640,10 @@ def VBITq : N3VX<1, 0, 0b10, 0b0001, 1, 1,
56405640// VABD : Vector Absolute Difference
56415641defm VABDs : N3VInt_QHS<0, 0, 0b0111, 0, N3RegFrm,
56425642 IIC_VSUBi4D, IIC_VSUBi4D, IIC_VSUBi4Q, IIC_VSUBi4Q,
5643- "vabd", "s", int_arm_neon_vabds , 1>;
5643+ "vabd", "s", abds , 1>;
56445644defm VABDu : N3VInt_QHS<1, 0, 0b0111, 0, N3RegFrm,
56455645 IIC_VSUBi4D, IIC_VSUBi4D, IIC_VSUBi4Q, IIC_VSUBi4Q,
5646- "vabd", "u", int_arm_neon_vabdu , 1>;
5646+ "vabd", "u", abdu , 1>;
56475647def VABDfd : N3VDInt<1, 0, 0b10, 0b1101, 0, N3RegFrm, IIC_VBIND,
56485648 "vabd", "f32", v2f32, v2f32, int_arm_neon_vabds, 1>;
56495649def 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,
56575657
56585658// VABDL : Vector Absolute Difference Long (Q = | D - D |)
56595659defm VABDLs : N3VLIntExt_QHS<0,1,0b0111,0, IIC_VSUBi4Q,
5660- "vabdl", "s", int_arm_neon_vabds , zext, 1>;
5660+ "vabdl", "s", abds , zext, 1>;
56615661defm VABDLu : N3VLIntExt_QHS<1,1,0b0111,0, IIC_VSUBi4Q,
5662- "vabdl", "u", int_arm_neon_vabdu , zext, 1>;
5662+ "vabdl", "u", abdu , zext, 1>;
56635663
56645664let 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)))),
56665666 (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)))),
56685668 (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)))),
56845670 (VABDLuv2i64 DPR:$opA, DPR:$opB)>;
56855671}
56865672
56875673// VABA : Vector Absolute Difference and Accumulate
56885674defm VABAs : N3VIntOp_QHS<0,0,0b0111,1, IIC_VABAD, IIC_VABAQ,
5689- "vaba", "s", int_arm_neon_vabds , add>;
5675+ "vaba", "s", abds , add>;
56905676defm VABAu : N3VIntOp_QHS<1,0,0b0111,1, IIC_VABAD, IIC_VABAQ,
5691- "vaba", "u", int_arm_neon_vabdu , add>;
5677+ "vaba", "u", abdu , add>;
56925678
56935679// VABAL : Vector Absolute Difference and Accumulate Long (Q += | D - D |)
56945680defm VABALs : N3VLIntExtOp_QHS<0,1,0b0101,0, IIC_VABAD,
5695- "vabal", "s", int_arm_neon_vabds , zext, add>;
5681+ "vabal", "s", abds , zext, add>;
56965682defm VABALu : N3VLIntExtOp_QHS<1,1,0b0101,0, IIC_VABAD,
5697- "vabal", "u", int_arm_neon_vabdu , zext, add>;
5683+ "vabal", "u", abdu , zext, add>;
56985684
56995685// Vector Maximum and Minimum.
57005686
0 commit comments