diff --git a/src/compiler_llvm/art_module.ll b/src/compiler_llvm/art_module.ll
index 87be92a..6d4b56b 100644
--- a/src/compiler_llvm/art_module.ll
+++ b/src/compiler_llvm/art_module.ll
@@ -41,7 +41,7 @@
 declare void @art_lock_object_from_code(%JavaObject*, %JavaObject*)
 declare void @art_unlock_object_from_code(%JavaObject*, %JavaObject*)
 
-declare void @art_test_suspend_from_code()
+declare void @art_test_suspend_from_code(%JavaObject*)
 
 declare void @art_push_shadow_frame_from_code(%ShadowFrame*)
 declare void @art_pop_shadow_frame_from_code()
diff --git a/src/compiler_llvm/generated/art_module.cc b/src/compiler_llvm/generated/art_module.cc
index c727d40..1237ec0 100644
--- a/src/compiler_llvm/generated/art_module.cc
+++ b/src/compiler_llvm/generated/art_module.cc
@@ -83,13 +83,13 @@
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_6_args;
+FuncTy_6_args.push_back(PointerTy_2);
 FunctionType* FuncTy_6 = FunctionType::get(
  /*Result=*/Type::getVoidTy(mod->getContext()),
  /*Params=*/FuncTy_6_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_7_args;
-FuncTy_7_args.push_back(PointerTy_2);
 FunctionType* FuncTy_7 = FunctionType::get(
  /*Result=*/Type::getVoidTy(mod->getContext()),
  /*Params=*/FuncTy_7_args,
@@ -387,7 +387,7 @@
 Function* func_art_test_suspend_from_code = mod->getFunction("art_test_suspend_from_code");
 if (!func_art_test_suspend_from_code) {
 func_art_test_suspend_from_code = Function::Create(
- /*Type=*/FuncTy_6,
+ /*Type=*/FuncTy_4,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_test_suspend_from_code", mod); // (external, no body)
 func_art_test_suspend_from_code->setCallingConv(CallingConv::C);
@@ -398,7 +398,7 @@
 Function* func_art_push_shadow_frame_from_code = mod->getFunction("art_push_shadow_frame_from_code");
 if (!func_art_push_shadow_frame_from_code) {
 func_art_push_shadow_frame_from_code = Function::Create(
- /*Type=*/FuncTy_7,
+ /*Type=*/FuncTy_6,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_push_shadow_frame_from_code", mod); // (external, no body)
 func_art_push_shadow_frame_from_code->setCallingConv(CallingConv::C);
@@ -409,7 +409,7 @@
 Function* func_art_pop_shadow_frame_from_code = mod->getFunction("art_pop_shadow_frame_from_code");
 if (!func_art_pop_shadow_frame_from_code) {
 func_art_pop_shadow_frame_from_code = Function::Create(
- /*Type=*/FuncTy_6,
+ /*Type=*/FuncTy_7,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_pop_shadow_frame_from_code", mod); // (external, no body)
 func_art_pop_shadow_frame_from_code->setCallingConv(CallingConv::C);
@@ -431,7 +431,7 @@
 Function* func_art_throw_div_zero_from_code = mod->getFunction("art_throw_div_zero_from_code");
 if (!func_art_throw_div_zero_from_code) {
 func_art_throw_div_zero_from_code = Function::Create(
- /*Type=*/FuncTy_6,
+ /*Type=*/FuncTy_7,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_throw_div_zero_from_code", mod); // (external, no body)
 func_art_throw_div_zero_from_code->setCallingConv(CallingConv::C);
@@ -475,7 +475,7 @@
 Function* func_art_throw_stack_overflow_from_code = mod->getFunction("art_throw_stack_overflow_from_code");
 if (!func_art_throw_stack_overflow_from_code) {
 func_art_throw_stack_overflow_from_code = Function::Create(
- /*Type=*/FuncTy_6,
+ /*Type=*/FuncTy_7,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_throw_stack_overflow_from_code", mod); // (external, no body)
 func_art_throw_stack_overflow_from_code->setCallingConv(CallingConv::C);
diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc
index c1152ab..02985f7 100644
--- a/src/compiler_llvm/jni_compiler.cc
+++ b/src/compiler_llvm/jni_compiler.cc
@@ -30,7 +30,6 @@
 #include "shadow_frame.h"
 #include "utils_llvm.h"
 
-#include <llvm/Analysis/Verifier.h>
 #include <llvm/BasicBlock.h>
 #include <llvm/DerivedTypes.h>
 #include <llvm/Function.h>
@@ -264,7 +263,7 @@
                            irb_.getInt32(kRunnable));
 
   // Do a suspend check
-  irb_.CreateCall(irb_.GetRuntime(TestSuspend));
+  irb_.CreateCall(irb_.GetRuntime(TestSuspend), thread_object_addr);
 
   if (return_shorty == 'L') {
     // If the return value is reference, it may point to SIRT, we should decode it.
@@ -298,7 +297,7 @@
   }
 
   // Verify the generated bitcode
-  llvm::verifyFunction(*func_, llvm::PrintMessageAction);
+  VERIFY_LLVM_FUNCTION(*func_);
 
   // Add the memory usage approximation of the compilation unit
   cunit_->AddMemUsageApproximation((sirt_size * 4 + 50) * 50);
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index 5bd1695..8e592fe 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -35,7 +35,6 @@
 
 #include <iomanip>
 
-#include <llvm/Analysis/Verifier.h>
 #include <llvm/BasicBlock.h>
 #include <llvm/Function.h>
 #include <llvm/GlobalVariable.h>
@@ -3687,7 +3686,7 @@
   EmitPrologueLastBranch();
 
   // Verify the generated bitcode
-  llvm::verifyFunction(*func_, llvm::PrintMessageAction);
+  VERIFY_LLVM_FUNCTION(*func_);
 
   // Add the memory usage approximation of the compilation unit
   cunit_->AddMemUsageApproximation(code_item_->insns_size_in_code_units_ * 900);
@@ -3738,8 +3737,12 @@
 
 void MethodCompiler::EmitGuard_GarbageCollectionSuspend(uint32_t dex_pc) {
   llvm::Value* runtime_func = irb_.GetRuntime(TestSuspend);
+
+  llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread));
+
   EmitUpdateDexPC(dex_pc);
-  irb_.CreateCall(runtime_func);
+
+  irb_.CreateCall(runtime_func, thread_object_addr);
 
   EmitGuard_ExceptionLandingPad(dex_pc);
 }
diff --git a/src/compiler_llvm/runtime_support_builder.cc b/src/compiler_llvm/runtime_support_builder.cc
index a13867c..c5ff6d7 100644
--- a/src/compiler_llvm/runtime_support_builder.cc
+++ b/src/compiler_llvm/runtime_support_builder.cc
@@ -20,6 +20,7 @@
 #include "ir_builder.h"
 #include "shadow_frame.h"
 #include "thread.h"
+#include "utils_llvm.h"
 
 #include <llvm/DerivedTypes.h>
 #include <llvm/Function.h>
@@ -98,6 +99,8 @@
                              Thread::TopShadowFrameOffset().Int32Value(),
                              new_shadow_frame);
     irb_.CreateRetVoid();
+
+    VERIFY_LLVM_FUNCTION(*func);
   }
 
   if (!target_runtime_support_func_[PopShadowFrame]) {
@@ -118,6 +121,8 @@
                              Thread::TopShadowFrameOffset().Int32Value(),
                              old_shadow_frame);
     irb_.CreateRetVoid();
+
+    VERIFY_LLVM_FUNCTION(*func);
   }
 
   if (!target_runtime_support_func_[IsExceptionPending]) {
@@ -133,6 +138,8 @@
                                                  irb_.getJObjectTy());
     Value* is_exception_not_null = irb_.CreateICmpNE(exception, irb_.getJNull());
     irb_.CreateRet(is_exception_not_null);
+
+    VERIFY_LLVM_FUNCTION(*func);
   }
 
   if (!target_runtime_support_func_[TestSuspend]) {
@@ -146,8 +153,7 @@
     BasicBlock* basic_block = BasicBlock::Create(context_, "entry", func);
     irb_.SetInsertPoint(basic_block);
 
-    Function* get_thread = GetRuntimeSupportFunction(GetCurrentThread);
-    Value* thread = irb_.CreateCall(get_thread);
+    Value* thread = func->arg_begin();
     Value* suspend_count = irb_.LoadFromObjectOffset(thread,
                                                      Thread::SuspendCountOffset().Int32Value(),
                                                      irb_.getJIntTy());
@@ -165,6 +171,8 @@
     irb_.CreateRetVoid();
 
     OverrideRuntimeSupportFunction(TestSuspend, func);
+
+    VERIFY_LLVM_FUNCTION(*func);
   }
 
   if (!target_runtime_support_func_[MarkGCCard]) {
@@ -197,6 +205,8 @@
     Value* card_table_entry = irb_.CreateGEP(card_table, card_no);
     irb_.CreateStore(irb_.getInt8(GC_CARD_DIRTY), card_table_entry);
     irb_.CreateRetVoid();
+
+    VERIFY_LLVM_FUNCTION(*func);
   }
 }
 
diff --git a/src/compiler_llvm/runtime_support_builder_arm.cc b/src/compiler_llvm/runtime_support_builder_arm.cc
index ab33967..6029d3e 100644
--- a/src/compiler_llvm/runtime_support_builder_arm.cc
+++ b/src/compiler_llvm/runtime_support_builder_arm.cc
@@ -18,6 +18,7 @@
 
 #include "ir_builder.h"
 #include "thread.h"
+#include "utils_llvm.h"
 
 #include <llvm/DerivedTypes.h>
 #include <llvm/Function.h>
@@ -45,6 +46,8 @@
     InlineAsm* get_r9 = InlineAsm::get(func->getFunctionType(), "mov $0, r9", "=r", false);
     Value* r9 = irb_.CreateCall(get_r9);
     irb_.CreateRet(r9);
+
+    VERIFY_LLVM_FUNCTION(*func);
   }
 
   {
@@ -57,6 +60,8 @@
     Value* thread = func->arg_begin();
     irb_.CreateCall(set_r9, thread);
     irb_.CreateRetVoid();
+
+    VERIFY_LLVM_FUNCTION(*func);
   }
 }
 
diff --git a/src/compiler_llvm/runtime_support_builder_x86.cc b/src/compiler_llvm/runtime_support_builder_x86.cc
index c381874..ee5f6d8 100644
--- a/src/compiler_llvm/runtime_support_builder_x86.cc
+++ b/src/compiler_llvm/runtime_support_builder_x86.cc
@@ -18,6 +18,7 @@
 
 #include "ir_builder.h"
 #include "thread.h"
+#include "utils_llvm.h"
 
 #include <llvm/DerivedTypes.h>
 #include <llvm/Function.h>
@@ -50,6 +51,8 @@
     InlineAsm* get_fp = InlineAsm::get(func_ty, "movl %fs:($1), $0", "=r,r", false);
     Value* fp = irb_.CreateCall(get_fp, irb_.getPtrEquivInt(Thread::SelfOffset().Int32Value()));
     irb_.CreateRet(fp);
+
+    VERIFY_LLVM_FUNCTION(*func);
   }
 
   {
@@ -58,6 +61,8 @@
     BasicBlock* basic_block = BasicBlock::Create(context_, "entry", func);
     irb_.SetInsertPoint(basic_block);
     irb_.CreateRetVoid();
+
+    VERIFY_LLVM_FUNCTION(*func);
   }
 }
 
diff --git a/src/compiler_llvm/upcall_compiler.cc b/src/compiler_llvm/upcall_compiler.cc
index 4b99cf7..11d50ff 100644
--- a/src/compiler_llvm/upcall_compiler.cc
+++ b/src/compiler_llvm/upcall_compiler.cc
@@ -26,7 +26,6 @@
 #include "runtime_support_func.h"
 #include "utils_llvm.h"
 
-#include <llvm/Analysis/Verifier.h>
 #include <llvm/BasicBlock.h>
 #include <llvm/Function.h>
 #include <llvm/GlobalVariable.h>
@@ -181,7 +180,7 @@
   irb_.CreateRetVoid();
 
   // Verify the generated function
-  llvm::verifyFunction(*func, llvm::PrintMessageAction);
+  VERIFY_LLVM_FUNCTION(*func);
 
   // Add the memory usage approximation of the compilation unit
   cunit_->AddMemUsageApproximation((shorty_size * 3 + 8) * 50);
diff --git a/src/compiler_llvm/utils_llvm.h b/src/compiler_llvm/utils_llvm.h
index fb9f0cb..89a1946 100644
--- a/src/compiler_llvm/utils_llvm.h
+++ b/src/compiler_llvm/utils_llvm.h
@@ -19,11 +19,19 @@
 
 #include "stringprintf.h"
 
+#include <llvm/Analysis/Verifier.h>
+
 #include <stdint.h>
 #include <string>
 
 namespace art {
 
+#ifndef NDEBUG
+#define VERIFY_LLVM_FUNCTION(func) llvm::verifyFunction(func, llvm::PrintMessageAction)
+#else
+#define VERIFY_LLVM_FUNCTION(func)
+#endif
+
 inline static std::string ElfFuncName(uint16_t elf_func_idx) {
   return StringPrintf("Art%u", static_cast<unsigned int>(elf_func_idx));
 }
