[X86] Don't look for TEST instruction shrinking opportunities when the root node...
authorCraig Topper <craig.topper@intel.com>
Mon, 12 Feb 2018 03:02:02 +0000 (03:02 +0000)
committerCraig Topper <craig.topper@intel.com>
Mon, 12 Feb 2018 03:02:02 +0000 (03:02 +0000)
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

index 95442c0..35bc01f 100644 (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;
     }