| //===-- PTXISelDAGToDAG.cpp - A dag to dag inst selector for PTX ----------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines an instruction selector for the PTX target. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "PTX.h" |
| #include "PTXTargetMachine.h" |
| #include "llvm/CodeGen/SelectionDAGISel.h" |
| |
| using namespace llvm; |
| |
| namespace { |
| // PTXDAGToDAGISel - PTX specific code to select PTX machine |
| // instructions for SelectionDAG operations. |
| class PTXDAGToDAGISel : public SelectionDAGISel { |
| public: |
| PTXDAGToDAGISel(PTXTargetMachine &TM, CodeGenOpt::Level OptLevel); |
| |
| virtual const char *getPassName() const { |
| return "PTX DAG->DAG Pattern Instruction Selection"; |
| } |
| |
| SDNode *Select(SDNode *Node); |
| |
| // Include the pieces auto'gened from the target description |
| #include "PTXGenDAGISel.inc" |
| |
| }; // class PTXDAGToDAGISel |
| } // namespace |
| |
| // createPTXISelDag - This pass converts a legalized DAG into a |
| // PTX-specific DAG, ready for instruction scheduling |
| FunctionPass *llvm::createPTXISelDag(PTXTargetMachine &TM, |
| CodeGenOpt::Level OptLevel) { |
| return new PTXDAGToDAGISel(TM, OptLevel); |
| } |
| |
| PTXDAGToDAGISel::PTXDAGToDAGISel(PTXTargetMachine &TM, |
| CodeGenOpt::Level OptLevel) |
| : SelectionDAGISel(TM, OptLevel) {} |
| |
| SDNode *PTXDAGToDAGISel::Select(SDNode *Node) { |
| // SelectCode() is auto'gened |
| return SelectCode(Node); |
| } |