Skip to content

Commit 9b10191

Browse files
committed
One more
1 parent 367e689 commit 9b10191

File tree

5 files changed

+19
-16
lines changed

5 files changed

+19
-16
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7454,6 +7454,19 @@ SDValue AArch64TargetLowering::LowerABD(SDValue Op, SelectionDAG &DAG) const {
74547454
SDValue RHS = Op.getOperand(1);
74557455
SDLoc DL(Op);
74567456

7457+
if (!isa<ConstantSDNode>(RHS) || !isLegalCmpImmed(RHS->getAsAPIntVal())) {
7458+
SDValue TheLHS = isCMN(LHS, IsSigned ? ISD::SETGE : ISD::SETUGE, DAG)
7459+
? LHS.getOperand(1)
7460+
: LHS;
7461+
SDValue TheRHS = isCMN(RHS, IsSigned ? ISD::SETGE : ISD::SETUGE, DAG)
7462+
? RHS.getOperand(1)
7463+
: RHS;
7464+
if (getCmpOperandFoldingProfit(TheLHS) >
7465+
getCmpOperandFoldingProfit(TheRHS)) {
7466+
std::swap(LHS, RHS);
7467+
}
7468+
}
7469+
74577470
// If the subtract doesn't overflow then just use abs(sub())
74587471
bool IsNonNegative = DAG.SignBitIsZero(LHS) && DAG.SignBitIsZero(RHS);
74597472

llvm/test/CodeGen/AArch64/abds-neg.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,7 @@ define i16 @abd_ext_i16(i16 %a, i16 %b) nounwind {
7272
define i16 @abd_ext_i16_i32(i16 %a, i32 %b) nounwind {
7373
; CHECK-LABEL: abd_ext_i16_i32:
7474
; CHECK: // %bb.0:
75-
; CHECK-NEXT: sxth w8, w0
76-
; CHECK-NEXT: subs w8, w8, w1
75+
; CHECK-NEXT: subs w8, w1, w0, sxth
7776
; CHECK-NEXT: cneg w0, w8, ge
7877
; CHECK-NEXT: ret
7978
%aext = sext i16 %a to i64

llvm/test/CodeGen/AArch64/abds.ll

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ define i16 @abd_ext_i16(i16 %a, i16 %b) nounwind {
6868
define i16 @abd_ext_i16_i32(i16 %a, i32 %b) nounwind {
6969
; CHECK-LABEL: abd_ext_i16_i32:
7070
; CHECK: // %bb.0:
71-
; CHECK-NEXT: sxth w8, w0
72-
; CHECK-NEXT: subs w8, w8, w1
71+
; CHECK-NEXT: subs w8, w1, w0, sxth
7372
; CHECK-NEXT: cneg w0, w8, lt
7473
; CHECK-NEXT: ret
7574
%aext = sext i16 %a to i64
@@ -498,10 +497,7 @@ define i64 @vector_legalized(i16 %a, i16 %b) {
498497
; CHECK: // %bb.0:
499498
; CHECK-NEXT: sxth w8, w0
500499
; CHECK-NEXT: subs w8, w8, w1, sxth
501-
; CHECK-NEXT: addp d0, v0.2d
502-
; CHECK-NEXT: cneg w8, w8, mi
503-
; CHECK-NEXT: fmov x9, d0
504-
; CHECK-NEXT: add x0, x9, x8
500+
; CHECK-NEXT: cneg w0, w8, mi
505501
; CHECK-NEXT: ret
506502
%ea = sext i16 %a to i32
507503
%eb = sext i16 %b to i32

llvm/test/CodeGen/AArch64/abdu-neg.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,7 @@ define i16 @abd_ext_i16(i16 %a, i16 %b) nounwind {
7272
define i16 @abd_ext_i16_i32(i16 %a, i32 %b) nounwind {
7373
; CHECK-LABEL: abd_ext_i16_i32:
7474
; CHECK: // %bb.0:
75-
; CHECK-NEXT: and w8, w0, #0xffff
76-
; CHECK-NEXT: subs w8, w8, w1
75+
; CHECK-NEXT: subs w8, w1, w0, uxth
7776
; CHECK-NEXT: cneg w0, w8, hs
7877
; CHECK-NEXT: ret
7978
%aext = zext i16 %a to i64

llvm/test/CodeGen/AArch64/abdu.ll

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ define i16 @abd_ext_i16(i16 %a, i16 %b) nounwind {
6868
define i16 @abd_ext_i16_i32(i16 %a, i32 %b) nounwind {
6969
; CHECK-LABEL: abd_ext_i16_i32:
7070
; CHECK: // %bb.0:
71-
; CHECK-NEXT: and w8, w0, #0xffff
72-
; CHECK-NEXT: subs w8, w8, w1
71+
; CHECK-NEXT: subs w8, w1, w0, uxth
7372
; CHECK-NEXT: cneg w0, w8, lo
7473
; CHECK-NEXT: ret
7574
%aext = zext i16 %a to i64
@@ -363,10 +362,7 @@ define i64 @vector_legalized(i16 %a, i16 %b) {
363362
; CHECK: // %bb.0:
364363
; CHECK-NEXT: and w8, w0, #0xffff
365364
; CHECK-NEXT: subs w8, w8, w1, uxth
366-
; CHECK-NEXT: cneg w8, w8, mi
367-
; CHECK-NEXT: addp d0, v0.2d
368-
; CHECK-NEXT: fmov x9, d0
369-
; CHECK-NEXT: add x0, x9, x8
365+
; CHECK-NEXT: cneg w0, w8, mi
370366
; CHECK-NEXT: ret
371367
%ea = zext i16 %a to i32
372368
%eb = zext i16 %b to i32

0 commit comments

Comments
 (0)