Oat compiler integration snapshot.

Cleanly compiles, but not integrated.  Old-world dependencies captured
in hacked-up temporary files "Dalvik.h" and "HackStubs.cc".

Dalvik.h is a placeholder that captures all of the constants, struct
definitions and inline functions the compiler needs.  It largely consists
of declaration fragments of libdex, Object.h, DvmDex.h and Thread.h.

HackStubs.cc contains empty shells for some required libdex routines.

Change-Id: Ia479dda41da4e3162ff6df383252fdc7dbf38d71
diff --git a/src/compiler/Compiler.h b/src/compiler/Compiler.h
new file mode 100644
index 0000000..c1eadcc
--- /dev/null
+++ b/src/compiler/Compiler.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ART_SRC_COMPILER_COMPILER_H_
+#define ART_SRC_COMPILER_COMPILER_H_
+
+#define COMPILER_TRACED(X)
+#define COMPILER_TRACEE(X)
+
+typedef enum OatInstructionSetType {
+    DALVIK_OAT_NONE = 0,
+    DALVIK_OAT_ARM,
+    DALVIK_OAT_THUMB2,
+} OatInstructionSetType;
+
+typedef enum OatMethodAttributes {
+    kIsCallee = 0,      /* Code is part of a callee (invoked by a hot trace) */
+    kIsHot,             /* Code is part of a hot trace */
+    kIsLeaf,            /* Method is leaf */
+    kIsEmpty,           /* Method is empty */
+    kIsThrowFree,       /* Method doesn't throw */
+    kIsGetter,          /* Method fits the getter pattern */
+    kIsSetter,          /* Method fits the setter pattern */
+    kCannotCompile,     /* Method cannot be compiled */
+} OatMethodAttributes;
+
+#define METHOD_IS_CALLEE        (1 << kIsCallee)
+#define METHOD_IS_HOT           (1 << kIsHot)
+#define METHOD_IS_LEAF          (1 << kIsLeaf)
+#define METHOD_IS_EMPTY         (1 << kIsEmpty)
+#define METHOD_IS_THROW_FREE    (1 << kIsThrowFree)
+#define METHOD_IS_GETTER        (1 << kIsGetter)
+#define METHOD_IS_SETTER        (1 << kIsSetter)
+#define METHOD_CANNOT_COMPILE   (1 << kCannotCompile)
+
+/* Customized node traversal orders for different needs */
+typedef enum DataFlowAnalysisMode {
+    kAllNodes = 0,              // All nodes
+    kReachableNodes,            // All reachable nodes
+    kPreOrderDFSTraversal,      // Depth-First-Search / Pre-Order
+    kPostOrderDFSTraversal,     // Depth-First-Search / Post-Order
+    kPostOrderDOMTraversal,     // Dominator tree / Post-Order
+} DataFlowAnalysisMode;
+
+struct CompilationUnit;
+struct BasicBlock;
+struct SSARepresentation;
+struct GrowableList;
+struct MIR;
+
+void oatInit(void);
+bool oatArchInit(void);
+void oatArchDump(void);
+bool oatStartup(void);
+void oatShutdown(void);
+bool oatCompileMethod(Method* method, OatInstructionSetType);
+void oatDumpStats(void);
+void oatScanAllClassPointers(void (*callback)(void* ptr));
+void oatInitializeSSAConversion(struct CompilationUnit* cUnit);
+int oatConvertSSARegToDalvik(const struct CompilationUnit* cUnit, int ssaReg);
+bool oatFindLocalLiveIn(struct CompilationUnit* cUnit,
+                                struct BasicBlock* bb);
+bool oatDoSSAConversion(struct CompilationUnit* cUnit,
+                                struct BasicBlock* bb);
+bool oatDoConstantPropagation(struct CompilationUnit* cUnit,
+                                      struct BasicBlock* bb);
+bool oatFindInductionVariables(struct CompilationUnit* cUnit,
+                                       struct BasicBlock* bb);
+/* Clear the visited flag for each BB */
+bool oatClearVisitedFlag(struct CompilationUnit* cUnit,
+                                 struct BasicBlock* bb);
+char *oatGetDalvikDisassembly(const DecodedInstruction* insn,
+                                      const char* note);
+char *oatFullDisassembler(const struct CompilationUnit* cUnit,
+                                  const struct MIR* mir);
+char *oatGetSSAString(struct CompilationUnit* cUnit,
+                              struct SSARepresentation* ssaRep);
+void oatDataFlowAnalysisDispatcher(struct CompilationUnit* cUnit,
+                bool (*func)(struct CompilationUnit* , struct BasicBlock*),
+                DataFlowAnalysisMode dfaMode,
+                bool isIterative);
+void oatMethodSSATransformation(struct CompilationUnit* cUnit);
+u8 oatGetRegResourceMask(int reg);
+void oatDumpCFG(struct CompilationUnit* cUnit, const char* dirPrefix);
+void oatProcessSwitchTables(CompilationUnit* cUnit);
+
+#endif // ART_SRC_COMPILER_COMPILER_H_