SelectionDAGISel.h revision c809b68357d6d41d91eb50febdb37df394e671bb
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 45 virtual bool runOnFunction(Function &Fn); 46 47 unsigned MakeReg(MVT::ValueType VT); 48 49 virtual void EmitFunctionEntryCode(Function &Fn, MachineFunction &MF) {} 50 virtual void InstructionSelectBasicBlock(SelectionDAG &SD) = 0; 51 52private: 53 SDOperand CopyValueToVirtualRegister(SelectionDAGLowering &SDL, 54 Value *V, unsigned Reg); 55 void SelectBasicBlock(BasicBlock *BB, MachineFunction &MF, 56 FunctionLoweringInfo &FuncInfo); 57 58 void BuildSelectionDAG(SelectionDAG &DAG, BasicBlock *LLVMBB, 59 std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate, 60 FunctionLoweringInfo &FuncInfo); 61 void LowerArguments(BasicBlock *BB, SelectionDAGLowering &SDL, 62 std::vector<SDOperand> &UnorderedChains); 63}; 64 65} 66 67#endif /* LLVM_CODEGEN_SELECTIONDAG_ISEL_H */ 68