aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-01-07 07:46:03 +0000
committerChris Lattner <sabre@nondot.org>2005-01-07 07:46:03 +0000
commitcc524ca1c1e32958842f05fe412de7bf78b24066 (patch)
treed1146d2ccdfe50bcb317e11c8358fe5519b97d73
parent63b570d49b7bf205d48749aae1467ef96152ea7a (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.h64
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 */