From: Evan Cheng Date: Wed, 25 Jan 2006 09:05:09 +0000 (+0000) Subject: Fix a selectcc lowering bug. Make a copy of X86ISD::CMP when folding it. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=0d718e9afca29b047ae1c77f8c6afc1b70759e0b;p=oota-llvm.git Fix a selectcc lowering bug. Make a copy of X86ISD::CMP when folding it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25596 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 5a7b764dc92..b97c57d374f 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -1696,9 +1696,14 @@ SDOperand X86TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) { // If the X86ISD::SETCC has more than one use, then it's probably better // to use a test instead of duplicating the X86ISD::CMP (for register // pressure reason). + // FIXME: Check number of live Op0 uses since we are in the middle of + // legalization process. if (Op0.hasOneUse() && Op0.getOperand(1).getOpcode() == X86ISD::CMP) { CC = Op0.getOperand(0); Cond = Op0.getOperand(1); + // Make a copy as flag result cannot be used by more than one. + Cond = DAG.getNode(X86ISD::CMP, MVT::Flag, + Cond.getOperand(0), Cond.getOperand(1)); addTest = isFPStack && !hasFPCMov(cast(CC)->getSignExtended()); } else @@ -1742,11 +1747,14 @@ SDOperand X86TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) { // If the X86ISD::SETCC has more than one use, then it's probably better // to use a test instead of duplicating the X86ISD::CMP (for register // pressure reason). + // FIXME: Check number of live Cond uses since we are in the middle of + // legalization process. if (Cond.hasOneUse() && Cond.getOperand(1).getOpcode() == X86ISD::CMP) { CC = Cond.getOperand(0); + Cond = Cond.getOperand(1); + // Make a copy as flag result cannot be used by more than one. Cond = DAG.getNode(X86ISD::CMP, MVT::Flag, - Cond.getOperand(1).getOperand(0), - Cond.getOperand(1).getOperand(1)); + Cond.getOperand(0), Cond.getOperand(1)); } else addTest = true; } else if (Cond.getOpcode() == ISD::SETCC) {