Index: src/IceTranslator.h |
diff --git a/src/IceTranslator.h b/src/IceTranslator.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..345207c750d90532670eac2df195779d296bfca5 |
--- /dev/null |
+++ b/src/IceTranslator.h |
@@ -0,0 +1,64 @@ |
+//===- subzero/src/IceTranslator.h - Translate IR to ICE --------*- 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 IR to ICE. |
jvoung (off chromium)
2014/07/01 17:32:52
Clarify what IR to ICE? I guess it has to be seria
Karl
2014/07/01 21:31:06
Rewrote this to try and be more clear.
jvoung (off chromium)
2014/07/02 17:00:15
For this one-line summary, it feels like this clas
Karl
2014/07/02 18:09:54
Good point. Fixing.
|
+// |
+//===----------------------------------------------------------------------===// |
+ |
+#ifndef SUBZERO_SRC_ICETRANSLATOR_H |
+#define SUBZERO_SRC_ICETRANSLATOR_H |
+ |
+#include "IceCfg.h" |
+#include "IceClFlags.h" |
+#include "IceGlobalContext.h" |
jvoung (off chromium)
2014/07/01 17:32:52
Could probably fwd declare the IceGlobalContext cl
Karl
2014/07/01 21:31:06
Removing unnecessary includes.
|
+#include "llvm/ADT/OwningPtr.h" |
+ |
+namespace Ice { |
+ |
+// Base class for translating IR to ICE. The input IR is handled by |
+// derived classes. This code assumes that derived classes define one |
+// (or more) methods to translate the input IR. Whenever a function is |
+// converted to ICE, these methods call translateFcn to finish the |
+// translation. |
+class Translator { |
+public: |
+ Translator(Ice::GlobalContext *Ctx, Ice::ClFlags &Flags) |
+ : Ctx(Ctx), |
+ Flags(Flags), |
+ ExitStatus(0) {} |
+ |
+ ~Translator(); |
+ |
+protected: |
+ Ice::GlobalContext *Ctx; |
+ Ice::ClFlags &Flags; |
+ // The exit status of the translation. 0 is successful. Nonzero |
+ // otherwise. |
+ int 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 Ice::GlobalContext |
+ // object, change all Ice::Constant related functions to use |
+ // GlobalContext instead of Cfg, and then make emitConstantPool use |
+ // that. |
+ llvm::OwningPtr<Ice::Cfg> Func; |
+ |
+ /// Translates the constructed ICE function Fcn to machine code. |
+ /// Note: As a side effect, Field Func is set to Fcn. |
+ void translateFcn(Ice::Cfg *Fcn); |
+ |
+ /// Emits the constant pool. |
+ void emitConstants(); |
+}; |
+ |
+} |
+ |
+#endif // SUBZERO_SRC_ICETRANSLATOR_H |