Common base class for SelectionDAG-based instruction selectors.
authorChris Lattner <sabre@nondot.org>
Fri, 7 Jan 2005 07:46:03 +0000 (07:46 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 7 Jan 2005 07:46:03 +0000 (07:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19326 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/SelectionDAGISel.h [new file with mode: 0644]

diff --git a/include/llvm/CodeGen/SelectionDAGISel.h b/include/llvm/CodeGen/SelectionDAGISel.h
new file mode 100644 (file)
index 0000000..5fc6f31
--- /dev/null
@@ -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 */