Implement runtime support inlining.
Change-Id: I8608b246a4dfde9959b5b86872f65dfa61646c84
diff --git a/src/compiler_llvm/compilation_unit.cc b/src/compiler_llvm/compilation_unit.cc
index b3a9c71..fde023c 100644
--- a/src/compiler_llvm/compilation_unit.cc
+++ b/src/compiler_llvm/compilation_unit.cc
@@ -20,6 +20,9 @@
#include "ir_builder.h"
#include "logging.h"
+#include "runtime_support_builder_arm.h"
+#include "runtime_support_builder_x86.h"
+
#include <llvm/ADT/OwningPtr.h>
#include <llvm/ADT/StringSet.h>
#include <llvm/ADT/Triple.h>
@@ -70,6 +73,24 @@
// Create IRBuilder
irb_.reset(new IRBuilder(*context_, *module_));
+
+ // We always need a switch case, so just use a normal function.
+ switch(insn_set_) {
+ default:
+ runtime_support_.reset(new RuntimeSupportBuilder(*context_, *module_, *irb_));
+ break;
+ case kArm:
+ case kThumb2:
+ runtime_support_.reset(new RuntimeSupportBuilderARM(*context_, *module_, *irb_));
+ break;
+ case kX86:
+ runtime_support_.reset(new RuntimeSupportBuilderX86(*context_, *module_, *irb_));
+ break;
+ }
+
+ runtime_support_->OptimizeRuntimeSupport();
+
+ irb_->SetRuntimeSupport(runtime_support_.get());
}