Plug new optimizing compiler in compilation pipeline.

Also rename accessors to ART's conventions.

Change-Id: I344807055b98aa4b27215704ec362191464acecc
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc
index 73323a4..cc36bbe 100644
--- a/compiler/optimizing/optimizing_compiler.cc
+++ b/compiler/optimizing/optimizing_compiler.cc
@@ -14,10 +14,41 @@
  * limitations under the License.
  */
 
+#include <stdint.h>
+
+#include "builder.h"
+#include "code_generator.h"
 #include "compilers.h"
+#include "driver/compiler_driver.h"
+#include "nodes.h"
+#include "utils/arena_allocator.h"
 
 namespace art {
 
+/**
+ * Used by the code generator, to allocate the code in a vector.
+ */
+class CodeVectorAllocator FINAL : public CodeAllocator {
+ public:
+  CodeVectorAllocator() { }
+
+  virtual uint8_t* Allocate(size_t size) {
+    size_ = size;
+    memory_.reserve(size);
+    return &memory_[0];
+  }
+
+  size_t GetSize() const { return size_; }
+  std::vector<uint8_t>* GetMemory() { return &memory_; }
+
+ private:
+  std::vector<uint8_t> memory_;
+  size_t size_;
+
+  DISALLOW_COPY_AND_ASSIGN(CodeVectorAllocator);
+};
+
+
 CompiledMethod* OptimizingCompiler::TryCompile(CompilerDriver& driver,
                                                const DexFile::CodeItem* code_item,
                                                uint32_t access_flags,
@@ -26,7 +57,40 @@
                                                uint32_t method_idx,
                                                jobject class_loader,
                                                const DexFile& dex_file) const {
-  return nullptr;
+  ArenaPool pool;
+  ArenaAllocator arena(&pool);
+  HGraphBuilder builder(&arena);
+  HGraph* graph = builder.BuildGraph(*code_item);
+  if (graph == nullptr) {
+    return nullptr;
+  }
+
+  InstructionSet instruction_set = driver.GetInstructionSet();
+  CodeGenerator* codegen = CodeGenerator::Create(&arena, graph, instruction_set);
+  if (codegen == nullptr) {
+    return nullptr;
+  }
+
+  CodeVectorAllocator allocator;
+  codegen->Compile(&allocator);
+
+  std::vector<uint8_t> mapping_table;
+  codegen->BuildMappingTable(&mapping_table);
+  std::vector<uint8_t> vmap_table;
+  codegen->BuildVMapTable(&vmap_table);
+  std::vector<uint8_t> gc_map;
+  codegen->BuildNativeGCMap(&gc_map);
+
+  return new CompiledMethod(driver,
+                            instruction_set,
+                            *allocator.GetMemory(),
+                            codegen->GetFrameSize(),
+                            0, /* GPR spill mask, unused */
+                            0, /* FPR spill mask, unused */
+                            mapping_table,
+                            vmap_table,
+                            gc_map,
+                            nullptr);
 }
 
 }  // namespace art