From cc524ca1c1e32958842f05fe412de7bf78b24066 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 7 Jan 2005 07:46:03 +0000 Subject: [PATCH] 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 --- include/llvm/CodeGen/SelectionDAGISel.h | 64 +++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 include/llvm/CodeGen/SelectionDAGISel.h diff --git a/include/llvm/CodeGen/SelectionDAGISel.h b/include/llvm/CodeGen/SelectionDAGISel.h new file mode 100644 index 00000000000..5fc6f31cd63 --- /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 > &PHINodesToUpdate, + FunctionLoweringInfo &FuncInfo); +}; + +} + +#endif /* LLVM_CODEGEN_SELECTIONDAG_ISEL_H */ -- 2.34.1