diff options
| author | Justin Bogner <mail@justinbogner.com> | 2016-05-12 21:56:18 +0000 |
|---|---|---|
| committer | Justin Bogner <mail@justinbogner.com> | 2016-05-12 21:56:18 +0000 |
| commit | 7a0fe694b84bc3aa9b49a9a57b6873b2d98dfa42 (patch) | |
| tree | d576cb7fed269e1bdae4f0ced02d58896f0663ef /llvm/lib | |
| parent | 2b749b33ccd6f93e0d05fa5fa8afc8096c6d3de2 (diff) | |
| download | bcm5719-llvm-7a0fe694b84bc3aa9b49a9a57b6873b2d98dfa42.tar.gz bcm5719-llvm-7a0fe694b84bc3aa9b49a9a57b6873b2d98dfa42.zip | |
SDAG: Implement Select instead of SelectImpl in LanaiDAGToDAGISel
- Where we were returning a node before, call ReplaceNode instead.
- Where we were calling SelectNodeTo, just return afterwards.
Part of llvm.org/pr26808.
llvm-svn: 269364
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/Lanai/LanaiISelDAGToDAG.cpp | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/llvm/lib/Target/Lanai/LanaiISelDAGToDAG.cpp b/llvm/lib/Target/Lanai/LanaiISelDAGToDAG.cpp index f37331b6cb4..44dbe692a06 100644 --- a/llvm/lib/Target/Lanai/LanaiISelDAGToDAG.cpp +++ b/llvm/lib/Target/Lanai/LanaiISelDAGToDAG.cpp @@ -68,11 +68,11 @@ private: #include "LanaiGenDAGISel.inc" // Instruction Selection not handled by the auto-generated tablgen - SDNode *SelectImpl(SDNode *N) override; + void Select(SDNode *N) override; // Support functions for the opcodes of Instruction Selection // not handled by the auto-generated tablgen - SDNode *selectFrameIndex(SDNode *N); + void selectFrameIndex(SDNode *N); // Complex Pattern for address selection. bool selectAddrRi(SDValue Addr, SDValue &Base, SDValue &Offset, @@ -270,7 +270,7 @@ bool LanaiDAGToDAGISel::SelectInlineAsmMemoryOperand( // Select instructions not customized! Used for // expanded, promoted and normal instructions -SDNode *LanaiDAGToDAGISel::SelectImpl(SDNode *Node) { +void LanaiDAGToDAGISel::Select(SDNode *Node) { unsigned Opcode = Node->getOpcode(); // Dump information about the Node being selected @@ -279,43 +279,35 @@ SDNode *LanaiDAGToDAGISel::SelectImpl(SDNode *Node) { // If we have a custom node, we already have selected! if (Node->isMachineOpcode()) { DEBUG(errs() << "== "; Node->dump(CurDAG); errs() << "\n"); - return NULL; + return; } // Instruction Selection not handled by the auto-generated // tablegen selection should be handled here. - SDNode *ResNode = nullptr; switch (Opcode) { case ISD::FrameIndex: - ResNode = selectFrameIndex(Node); - break; + selectFrameIndex(Node); + return; default: break; } // Select the default instruction - if (ResNode == nullptr) - ResNode = SelectCode(Node); - - DEBUG(errs() << "=> "); - if (ResNode == NULL || ResNode == Node) - DEBUG(Node->dump(CurDAG)); - else - DEBUG(ResNode->dump(CurDAG)); - DEBUG(errs() << "\n"); - return ResNode; + SelectCode(Node); } -SDNode *LanaiDAGToDAGISel::selectFrameIndex(SDNode *Node) { +void LanaiDAGToDAGISel::selectFrameIndex(SDNode *Node) { SDLoc DL(Node); SDValue Imm = CurDAG->getTargetConstant(0, DL, MVT::i32); int FI = dyn_cast<FrameIndexSDNode>(Node)->getIndex(); EVT VT = Node->getValueType(0); SDValue TFI = CurDAG->getTargetFrameIndex(FI, VT); unsigned Opc = Lanai::ADD_I_LO; - if (Node->hasOneUse()) - return CurDAG->SelectNodeTo(Node, Opc, VT, TFI, Imm); - return CurDAG->getMachineNode(Opc, DL, VT, TFI, Imm); + if (Node->hasOneUse()) { + CurDAG->SelectNodeTo(Node, Opc, VT, TFI, Imm); + return; + } + ReplaceNode(Node, CurDAG->getMachineNode(Opc, DL, VT, TFI, Imm)); } // createLanaiISelDag - This pass converts a legalized DAG into a |

