From b424fafa9ff9d121b2f3eb15bd0bf6a3b2e63bac Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 12 Feb 2018 03:02:02 +0000 Subject: [PATCH] [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 --- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp index 95442c0..35bc01f 100644 --- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -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; } -- 2.7.4