SelectionDAGISel.h revision 80d8a93489a5a3d1a90f8e23d27393d6844259b4
1//===-- llvm/CodeGen/SelectionDAGISel.h - Common Base Class------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by the LLVM research group and is distributed under 6// the University of Illinois Open Source License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file implements the SelectionDAGISel class, which is used as the common 11// base class for SelectionDAG-based instruction selectors. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_CODEGEN_SELECTIONDAG_ISEL_H 16#define LLVM_CODEGEN_SELECTIONDAG_ISEL_H 17 18#include "llvm/Pass.h" 19#include "llvm/CodeGen/ValueTypes.h" 20 21namespace llvm { 22 class SelectionDAG; 23 class SelectionDAGLowering; 24 class SDOperand; 25 class SSARegMap; 26 class MachineBasicBlock; 27 class MachineFunction; 28 class MachineInstr; 29 class TargetLowering; 30 class FunctionLoweringInfo; 31 32/// SelectionDAGISel - This is the common base class used for SelectionDAG-based 33/// pattern-matching instruction selectors. 34class SelectionDAGISel : public FunctionPass { 35public: 36 TargetLowering &TLI; 37 SSARegMap *RegMap; 38 SelectionDAG *CurDAG; 39 MachineBasicBlock *BB; 40 41 SelectionDAGISel(TargetLowering &tli) : TLI(tli) {} 42 43 virtual void getAnalysisUsage(AnalysisUsage &AU) const { 44 AU.setPreservesAll(); 45 } 46 47 virtual bool runOnFunction(Function &Fn); 48 49 unsigned MakeReg(MVT::ValueType VT); 50 51 virtual void InstructionSelectBasicBlock(SelectionDAG &SD) = 0; 52 53private: 54 SDOperand CopyValueToVirtualRegister(SelectionDAGLowering &SDL, 55 Value *V, unsigned Reg); 56 void SelectBasicBlock(BasicBlock *BB, MachineFunction &MF, 57 FunctionLoweringInfo &FuncInfo); 58 59 void BuildSelectionDAG(SelectionDAG &DAG, BasicBlock *LLVMBB, 60 std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate, 61 FunctionLoweringInfo &FuncInfo); 62 void LowerArguments(BasicBlock *BB, SelectionDAGLowering &SDL, 63 std::vector<SDOperand> &UnorderedChains); 64}; 65 66} 67 68#endif /* LLVM_CODEGEN_SELECTIONDAG_ISEL_H */ 69