[X86] Don't look for TEST instruction shrinking opportunities when the root node is a X86ISD::SUB.

I don't believe we ever create an X86ISD::SUB with a 0 constant which is what the TEST handling needs. The ternary operator at the end of this code shows up as only going one way in the llvm-cov report from the bots.

llvm-svn: 324865
This commit is contained in:
Craig Topper 2018-02-12 03:02:02 +00:00
parent 3ccbd3f32f
commit b424fafa9f
1 changed files with 3 additions and 10 deletions

View File

@ -3064,12 +3064,7 @@ void X86DAGToDAGISel::Select(SDNode *Node) {
return;
}
case X86ISD::CMP:
case X86ISD::SUB: {
// Sometimes a SUB is used to perform comparison.
if (Opcode == X86ISD::SUB && Node->hasAnyUseOfValue(0))
// This node is not a CMP.
break;
case X86ISD::CMP: {
SDValue N0 = Node->getOperand(0);
SDValue N1 = Node->getOperand(1);
@ -3131,10 +3126,8 @@ void X86DAGToDAGISel::Select(SDNode *Node) {
// Emit a testl or testw.
SDNode *NewNode = CurDAG->getMachineNode(Op, dl, MVT::i32, Reg, Imm);
// Replace SUB|CMP with TEST, since SUB has two outputs while TEST has
// one, do not call ReplaceAllUsesWith.
ReplaceUses(SDValue(Node, (Opcode == X86ISD::SUB ? 1 : 0)),
SDValue(NewNode, 0));
// Replace CMP with TEST.
CurDAG->ReplaceAllUsesWith(Node, NewNode);
CurDAG->RemoveDeadNode(Node);
return;
}