[x86] simplify cmov with same true/false operands
llvm-svn: 365998
This commit is contained in:
parent
327db23b66
commit
2097f75eab
|
|
@ -36783,6 +36783,10 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
|
||||||
X86::CondCode CC = (X86::CondCode)N->getConstantOperandVal(2);
|
X86::CondCode CC = (X86::CondCode)N->getConstantOperandVal(2);
|
||||||
SDValue Cond = N->getOperand(3);
|
SDValue Cond = N->getOperand(3);
|
||||||
|
|
||||||
|
// cmov X, X, ?, ? --> X
|
||||||
|
if (TrueOp == FalseOp)
|
||||||
|
return TrueOp;
|
||||||
|
|
||||||
// Try to simplify the EFLAGS and condition code operands.
|
// Try to simplify the EFLAGS and condition code operands.
|
||||||
// We can't always do this as FCMOV only supports a subset of X86 cond.
|
// We can't always do this as FCMOV only supports a subset of X86 cond.
|
||||||
if (SDValue Flags = combineSetCCEFLAGS(Cond, CC, DAG, Subtarget)) {
|
if (SDValue Flags = combineSetCCEFLAGS(Cond, CC, DAG, Subtarget)) {
|
||||||
|
|
|
||||||
|
|
@ -291,9 +291,8 @@ define i32 @PR40483_sub5(i32*, i32) {
|
||||||
;
|
;
|
||||||
; X64-LABEL: PR40483_sub5:
|
; X64-LABEL: PR40483_sub5:
|
||||||
; X64: # %bb.0:
|
; X64: # %bb.0:
|
||||||
; X64-NEXT: xorl %eax, %eax
|
|
||||||
; X64-NEXT: subl %esi, (%rdi)
|
; X64-NEXT: subl %esi, (%rdi)
|
||||||
; X64-NEXT: cmovael %eax, %eax
|
; X64-NEXT: xorl %eax, %eax
|
||||||
; X64-NEXT: retq
|
; X64-NEXT: retq
|
||||||
%3 = load i32, i32* %0, align 8
|
%3 = load i32, i32* %0, align 8
|
||||||
%4 = tail call { i8, i32 } @llvm.x86.subborrow.32(i8 0, i32 %3, i32 %1)
|
%4 = tail call { i8, i32 } @llvm.x86.subborrow.32(i8 0, i32 %3, i32 %1)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue