[llvm] r269144 - SDAG: Implement Select instead of SelectImpl in X86
Justin Bogner via llvm-commits
llvm-commits at lists.llvm.org
Tue May 10 16:55:37 PDT 2016
Author: bogner
Date: Tue May 10 18:55:37 2016
New Revision: 269144
URL: http://llvm.org/viewvc/llvm-project?rev=269144&view=rev
Log:
SDAG: Implement Select instead of SelectImpl in X86
This is part of the work to have Select return void instead of an
SDNode *, which is in turn part of llvm.org/pr26808.
Modified:
llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=269144&r1=269143&r2=269144&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp Tue May 10 18:55:37 2016
@@ -196,7 +196,7 @@ namespace {
#include "X86GenDAGISel.inc"
private:
- SDNode *SelectImpl(SDNode *N) override;
+ void Select(SDNode *N) override;
SDNode *selectGather(SDNode *N, unsigned Opc);
bool foldOffsetIntoAddress(uint64_t Offset, X86ISelAddressMode &AM);
@@ -1926,7 +1926,7 @@ SDNode *X86DAGToDAGISel::selectGather(SD
return ResNode;
}
-SDNode *X86DAGToDAGISel::SelectImpl(SDNode *Node) {
+void X86DAGToDAGISel::Select(SDNode *Node) {
MVT NVT = Node->getSimpleValueType(0);
unsigned Opc, MOpc;
unsigned Opcode = Node->getOpcode();
@@ -1937,7 +1937,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
if (Node->isMachineOpcode()) {
DEBUG(dbgs() << "== "; Node->dump(CurDAG); dbgs() << '\n');
Node->setNodeId(-1);
- return nullptr; // Already selected.
+ return; // Already selected.
}
switch (Opcode) {
@@ -1959,7 +1959,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
ReplaceUses(SDValue(Node, 0), Brind);
SelectCode(ZextTarget.getNode());
SelectCode(Brind.getNode());
- return nullptr;
+ return;
}
break;
}
@@ -2008,14 +2008,16 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
SDNode *RetVal = selectGather(Node, Opc);
if (RetVal)
// We already called ReplaceUses inside SelectGather.
- return nullptr;
+ return;
break;
}
}
break;
}
case X86ISD::GlobalBaseReg:
- return getGlobalBaseReg();
+ ReplaceUses(Node, getGlobalBaseReg());
+ CurDAG->RemoveDeadNode(Node);
+ return;
case X86ISD::SHRUNKBLEND: {
// SHRUNKBLEND selects like a regular VSELECT.
@@ -2025,7 +2027,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
ReplaceUses(SDValue(Node, 0), VSelect);
SelectCode(VSelect.getNode());
// We already called ReplaceUses.
- return nullptr;
+ return;
}
case ISD::AND:
@@ -2105,10 +2107,12 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
SDValue NewCst = CurDAG->getTargetConstant(Val >> ShlVal, dl, CstVT);
SDNode *New = CurDAG->getMachineNode(Op, dl, NVT, N0->getOperand(0),NewCst);
if (ShlVal == 1)
- return CurDAG->SelectNodeTo(Node, AddOp, NVT, SDValue(New, 0),
- SDValue(New, 0));
- return CurDAG->SelectNodeTo(Node, ShlOp, NVT, SDValue(New, 0),
- getI8Imm(ShlVal, dl));
+ CurDAG->SelectNodeTo(Node, AddOp, NVT, SDValue(New, 0),
+ SDValue(New, 0));
+ else
+ CurDAG->SelectNodeTo(Node, ShlOp, NVT, SDValue(New, 0),
+ getI8Imm(ShlVal, dl));
+ return;
}
case X86ISD::UMUL8:
case X86ISD::SMUL8: {
@@ -2126,7 +2130,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
ReplaceUses(SDValue(Node, 0), SDValue(CNode, 0));
ReplaceUses(SDValue(Node, 1), SDValue(CNode, 1));
- return nullptr;
+ return;
}
case X86ISD::UMUL: {
@@ -2152,7 +2156,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
ReplaceUses(SDValue(Node, 0), SDValue(CNode, 0));
ReplaceUses(SDValue(Node, 1), SDValue(CNode, 1));
ReplaceUses(SDValue(Node, 2), SDValue(CNode, 2));
- return nullptr;
+ return;
}
case ISD::SMUL_LOHI:
@@ -2301,7 +2305,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
DEBUG(dbgs() << "=> "; ResHi.getNode()->dump(CurDAG); dbgs() << '\n');
}
- return nullptr;
+ return;
}
case ISD::SDIVREM:
@@ -2485,7 +2489,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
ReplaceUses(SDValue(Node, 1), Result);
DEBUG(dbgs() << "=> "; Result.getNode()->dump(CurDAG); dbgs() << '\n');
}
- return nullptr;
+ return;
}
case X86ISD::CMP:
@@ -2543,7 +2547,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
// one, do not call ReplaceAllUsesWith.
ReplaceUses(SDValue(Node, (Opcode == X86ISD::SUB ? 1 : 0)),
SDValue(NewNode, 0));
- return nullptr;
+ return;
}
// For example, "testl %eax, $2048" to "testb %ah, $8".
@@ -2580,7 +2584,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
// one, do not call ReplaceAllUsesWith.
ReplaceUses(SDValue(Node, (Opcode == X86ISD::SUB ? 1 : 0)),
SDValue(NewNode, 0));
- return nullptr;
+ return;
}
// For example, "testl %eax, $32776" to "testw %ax, $32776".
@@ -2603,7 +2607,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
// one, do not call ReplaceAllUsesWith.
ReplaceUses(SDValue(Node, (Opcode == X86ISD::SUB ? 1 : 0)),
SDValue(NewNode, 0));
- return nullptr;
+ return;
}
// For example, "testq %rax, $268468232" to "testl %eax, $268468232".
@@ -2626,7 +2630,7 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
// one, do not call ReplaceAllUsesWith.
ReplaceUses(SDValue(Node, (Opcode == X86ISD::SUB ? 1 : 0)),
SDValue(NewNode, 0));
- return nullptr;
+ return;
}
}
break;
@@ -2677,21 +2681,12 @@ SDNode *X86DAGToDAGISel::SelectImpl(SDNo
ReplaceUses(SDValue(StoreNode, 0), SDValue(Result, 1));
ReplaceUses(SDValue(StoredVal.getNode(), 1), SDValue(Result, 0));
-
- return Result;
+ CurDAG->RemoveDeadNode(Node);
+ return;
}
}
- SDNode *ResNode = SelectCode(Node);
-
- DEBUG(dbgs() << "=> ";
- if (ResNode == nullptr || ResNode == Node)
- Node->dump(CurDAG);
- else
- ResNode->dump(CurDAG);
- dbgs() << '\n');
-
- return ResNode;
+ SelectCode(Node);
}
bool X86DAGToDAGISel::
More information about the llvm-commits
mailing list