[PATCH] D57169: [X86] Fold X86ISD::SBB(ISD::SUB(X, Y), 0) -> X86ISD::SBB(X, Y) (PR25858)
Simon Pilgrim via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 26 12:13:58 PST 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL352288: [X86] Fold X86ISD::SBB(ISD::SUB(X,Y),0) -> X86ISD::SBB(X,Y) (PR25858) (authored by RKSimon, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D57169?vs=183499&id=183722#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D57169/new/
https://reviews.llvm.org/D57169
Files:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/test/CodeGen/X86/combine-sbb.ll
Index: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
===================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
@@ -40566,6 +40566,15 @@
Flags);
}
+ // Fold SBB(SUB(X,Y),0,Carry) -> SBB(X,Y,Carry)
+ // iff the flag result is dead.
+ SDValue Op0 = N->getOperand(0);
+ SDValue Op1 = N->getOperand(1);
+ if (Op0.getOpcode() == ISD::SUB && isNullConstant(Op1) &&
+ !N->hasAnyUseOfValue(1))
+ return DAG.getNode(X86ISD::SBB, SDLoc(N), N->getVTList(), Op0.getOperand(0),
+ Op0.getOperand(1), N->getOperand(2));
+
return SDValue();
}
Index: llvm/trunk/test/CodeGen/X86/combine-sbb.ll
===================================================================
--- llvm/trunk/test/CodeGen/X86/combine-sbb.ll
+++ llvm/trunk/test/CodeGen/X86/combine-sbb.ll
@@ -13,11 +13,10 @@
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
; X86-NEXT: movl (%ecx), %esi
; X86-NEXT: movl 4(%ecx), %ecx
-; X86-NEXT: subl 4(%edx), %ecx
; X86-NEXT: subl (%edx), %esi
-; X86-NEXT: sbbl $0, %ecx
-; X86-NEXT: movl %esi, (%eax)
+; X86-NEXT: sbbl 4(%edx), %ecx
; X86-NEXT: movl %ecx, 4(%eax)
+; X86-NEXT: movl %esi, (%eax)
; X86-NEXT: popl %esi
; X86-NEXT: retl $4
;
@@ -26,11 +25,10 @@
; X64-NEXT: movq %rdi, %rax
; X64-NEXT: movl (%rsi), %ecx
; X64-NEXT: movl 4(%rsi), %esi
-; X64-NEXT: subl 4(%rdx), %esi
; X64-NEXT: subl (%rdx), %ecx
-; X64-NEXT: sbbl $0, %esi
-; X64-NEXT: movl %ecx, (%rdi)
+; X64-NEXT: sbbl 4(%rdx), %esi
; X64-NEXT: movl %esi, 4(%rdi)
+; X64-NEXT: movl %ecx, (%rdi)
; X64-NEXT: retq
top:
%3 = bitcast %WideUInt32* %1 to i32*
@@ -94,11 +92,10 @@
; X64-NEXT: movq %rdi, %rax
; X64-NEXT: movq (%rsi), %rcx
; X64-NEXT: movq 8(%rsi), %rsi
-; X64-NEXT: subq 8(%rdx), %rsi
; X64-NEXT: subq (%rdx), %rcx
-; X64-NEXT: sbbq $0, %rsi
-; X64-NEXT: movq %rcx, (%rdi)
+; X64-NEXT: sbbq 8(%rdx), %rsi
; X64-NEXT: movq %rsi, 8(%rdi)
+; X64-NEXT: movq %rcx, (%rdi)
; X64-NEXT: retq
top:
%3 = bitcast %WideUInt64* %1 to i64*
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57169.183722.patch
Type: text/x-patch
Size: 2191 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190126/36d7804f/attachment.bin>
More information about the llvm-commits
mailing list