Index: src/IceTranslator.h |
diff --git a/src/IceTranslator.h b/src/IceTranslator.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0450f0932035de4cf110f4fcbc8136faab9a1bd3 |
--- /dev/null |
+++ b/src/IceTranslator.h |
@@ -0,0 +1,67 @@ |
+//===- subzero/src/IceTranslator.h - ICE to machine code --------*- C++ -*-===// |
+// |
+// The Subzero Code Generator |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+// |
+// This file declares the general driver class for translating ICE to |
+// machine code. |
+// |
+//===----------------------------------------------------------------------===// |
+ |
+#ifndef SUBZERO_SRC_ICETRANSLATOR_H |
+#define SUBZERO_SRC_ICETRANSLATOR_H |
+ |
+#include "llvm/ADT/OwningPtr.h" |
+ |
+namespace Ice { |
+ |
+class ClFlags; |
+class Cfg; |
+class GlobalContext; |
+ |
+// Base class for translating ICE to machine code. |
+// Derived classes convert other intermediate representations down to ICE, |
+// and then call the appropriate (inherited) methods to convert ICE into |
+// machine instructions. |
+class Translator { |
+public: |
+ Translator(GlobalContext *Ctx, ClFlags &Flags) |
+ : Ctx(Ctx), Flags(Flags), ExitStatus(0) {} |
+ |
+ ~Translator(); |
+ int getExitStatus() const { return ExitStatus; } |
+ |
+protected: |
+ GlobalContext *Ctx; |
+ ClFlags &Flags; |
+ // The exit status of the translation. 0 is successful. Nonzero |
+ // otherwise. |
+ bool ExitStatus; |
+ // Ideally, Func would be inside the methods that converts IR to |
+ // functions. However, emitting the constant pool requires a valid |
+ // Cfg object, so we need to defer deleting the last non-empty Cfg |
+ // object to emit the constant pool (via emitConstants). TODO: |
+ // Since all constants are globally pooled in the GlobalContext |
+ // object, change all Constant related functions to use |
+ // GlobalContext instead of Cfg, and then make emitConstantPool use |
+ // that. |
+ llvm::OwningPtr<Cfg> Func; |
+ |
+ /// Translates the constructed ICE function Fcn to machine code. |
+ /// Note: As a side effect, Field Func is set to Fcn. |
+ void translateFcn(Cfg *Fcn); |
+ |
+ /// Emits the constant pool. |
+ void emitConstants(); |
+ |
+private: |
+ Translator(const Translator &) LLVM_DELETED_FUNCTION; |
+ Translator &operator=(const Translator &) LLVM_DELETED_FUNCTION; |
+}; |
+} |
+ |
+#endif // SUBZERO_SRC_ICETRANSLATOR_H |