diff options
author | Chris Lattner <sabre@nondot.org> | 2005-01-07 07:46:03 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-01-07 07:46:03 +0000 |
commit | cc524ca1c1e32958842f05fe412de7bf78b24066 (patch) | |
tree | d1146d2ccdfe50bcb317e11c8358fe5519b97d73 | |
parent | 63b570d49b7bf205d48749aae1467ef96152ea7a (diff) |
Common base class for SelectionDAG-based instruction selectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19326 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/SelectionDAGISel.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/SelectionDAGISel.h b/include/llvm/CodeGen/SelectionDAGISel.h new file mode 100644 index 0000000000..5fc6f31cd6 --- /dev/null +++ b/include/llvm/CodeGen/SelectionDAGISel.h @@ -0,0 +1,64 @@ +//===-- llvm/CodeGen/SelectionDAGISel.h - Common Base Class------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the SelectionDAGISel class, which is used as the common +// base class for SelectionDAG-based instruction selectors. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CODEGEN_SELECTIONDAG_ISEL_H +#define LLVM_CODEGEN_SELECTIONDAG_ISEL_H + +#include "llvm/Pass.h" +#include "llvm/CodeGen/ValueTypes.h" + +namespace llvm { + class SelectionDAG; + class SelectionDAGLowering; + class SSARegMap; + class MachineBasicBlock; + class MachineFunction; + class MachineInstr; + class TargetLowering; + class FunctionLoweringInfo; + +/// SelectionDAGISel - This is the common base class used for SelectionDAG-based +/// pattern-matching instruction selectors. +class SelectionDAGISel : public FunctionPass { +public: + TargetLowering &TLI; + SSARegMap *RegMap; + SelectionDAG *CurDAG; + MachineBasicBlock *BB; + + SelectionDAGISel(TargetLowering &tli) : TLI(tli) {} + + virtual void getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); + } + + virtual bool runOnFunction(Function &Fn); + + unsigned MakeReg(MVT::ValueType VT); + + virtual void InstructionSelectBasicBlock(SelectionDAG &SD) = 0; + + void CopyValueToVirtualRegister(SelectionDAGLowering &SDL, + Value *V, unsigned Reg); + void SelectBasicBlock(BasicBlock *BB, MachineFunction &MF, + FunctionLoweringInfo &FuncInfo); + + void BuildSelectionDAG(SelectionDAG &DAG, BasicBlock *LLVMBB, + std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate, + FunctionLoweringInfo &FuncInfo); +}; + +} + +#endif /* LLVM_CODEGEN_SELECTIONDAG_ISEL_H */ |