diff --git a/src/compiler_llvm/gbc_expander.cc b/src/compiler_llvm/gbc_expander.cc
index c285c0b..42a87a3 100644
--- a/src/compiler_llvm/gbc_expander.cc
+++ b/src/compiler_llvm/gbc_expander.cc
@@ -2660,18 +2660,36 @@
 }
 
 void GBCExpanderPass::EmitGuard_ExceptionLandingPad(uint32_t dex_pc) {
-  llvm::Value* exception_pending = irb_.Runtime().EmitIsExceptionPending();
-
   llvm::BasicBlock* block_cont = CreateBasicBlockWithDexPC(dex_pc, "cont");
+  llvm::BasicBlock* block_flags = CreateBasicBlockWithDexPC(dex_pc, "flags");
+  llvm::BasicBlock* block_suspend = CreateBasicBlockWithDexPC(dex_pc, "suspend");
+
+  llvm::Value* flags =
+      irb_.Runtime().EmitLoadFromThreadOffset(art::Thread::ThreadFlagsOffset().Int32Value(),
+                                              irb_.getInt16Ty(),
+                                              kTBAARuntimeInfo);
+  llvm::Value* flags_set = irb_.CreateICmpNE(flags, irb_.getInt16(0));
+  irb_.CreateCondBr(flags_set, block_flags, block_cont, kUnlikely);
+
+  irb_.SetInsertPoint(block_flags);
+  llvm::Value* exception_pending = irb_.CreateAnd(flags, irb_.getInt16(art::kExceptionPending));
+  llvm::Value* exception_set = irb_.CreateICmpNE(exception_pending, irb_.getInt16(0));
 
   if (llvm::BasicBlock* lpad = GetLandingPadBasicBlock(dex_pc)) {
     landing_pad_phi_mapping_[lpad].push_back(std::make_pair(current_bb_->getUniquePredecessor(),
                                                             irb_.GetInsertBlock()));
-    irb_.CreateCondBr(exception_pending, lpad, block_cont, kUnlikely);
+    irb_.CreateCondBr(exception_set, lpad, block_suspend, kLikely);
   } else {
-    irb_.CreateCondBr(exception_pending, GetUnwindBasicBlock(), block_cont, kUnlikely);
+    irb_.CreateCondBr(exception_set, GetUnwindBasicBlock(), block_suspend, kLikely);
   }
 
+  irb_.SetInsertPoint(block_suspend);
+  if (dex_pc != art::DexFile::kDexNoIndex) {
+    EmitUpdateDexPC(dex_pc);
+  }
+  irb_.Runtime().EmitTestSuspend();
+  irb_.CreateBr(block_cont);
+
   irb_.SetInsertPoint(block_cont);
 }
 
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index ccec7e9..7ab11f5 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -3540,16 +3540,34 @@
     return;
   }
 
-  llvm::Value* exception_pending = irb_.Runtime().EmitIsExceptionPending();
-
   llvm::BasicBlock* block_cont = CreateBasicBlockWithDexPC(dex_pc, "cont");
+  llvm::BasicBlock* block_flags = CreateBasicBlockWithDexPC(dex_pc, "flags");
+  llvm::BasicBlock* block_suspend = CreateBasicBlockWithDexPC(dex_pc, "suspend");
+
+  llvm::Value* flags =
+      irb_.Runtime().EmitLoadFromThreadOffset(art::Thread::ThreadFlagsOffset().Int32Value(),
+                                              irb_.getInt16Ty(),
+                                              kTBAARuntimeInfo);
+  llvm::Value* flags_set = irb_.CreateICmpNE(flags, irb_.getInt16(0));
+  irb_.CreateCondBr(flags_set, block_flags, block_cont, kUnlikely);
+
+  irb_.SetInsertPoint(block_flags);
+  llvm::Value* exception_pending = irb_.CreateAnd(flags, irb_.getInt16(art::kExceptionPending));
+  llvm::Value* exception_set = irb_.CreateICmpNE(exception_pending, irb_.getInt16(0));
 
   if (lpad) {
-    irb_.CreateCondBr(exception_pending, lpad, block_cont, kUnlikely);
+    irb_.CreateCondBr(exception_set, lpad, block_suspend, kLikely);
   } else {
-    irb_.CreateCondBr(exception_pending, GetUnwindBasicBlock(), block_cont, kUnlikely);
+    irb_.CreateCondBr(exception_set, GetUnwindBasicBlock(), block_suspend, kLikely);
   }
 
+  irb_.SetInsertPoint(block_suspend);
+  if (dex_pc != art::DexFile::kDexNoIndex) {
+    EmitUpdateDexPC(dex_pc);
+  }
+  irb_.Runtime().EmitTestSuspend();
+  irb_.CreateBr(block_cont);
+
   irb_.SetInsertPoint(block_cont);
 }
 
diff --git a/src/compiler_llvm/runtime_support_builder.cc b/src/compiler_llvm/runtime_support_builder.cc
index 9513d4a..28ef0d3 100644
--- a/src/compiler_llvm/runtime_support_builder.cc
+++ b/src/compiler_llvm/runtime_support_builder.cc
@@ -147,11 +147,11 @@
 }
 
 llvm::Value* RuntimeSupportBuilder::EmitIsExceptionPending() {
-  Value* state_and_flags = EmitLoadFromThreadOffset(Thread::ThreadFlagsOffset().Int32Value(),
-                                                    irb_.getInt16Ty(),
-                                                    kTBAARuntimeInfo);
+  Value* flags = EmitLoadFromThreadOffset(Thread::ThreadFlagsOffset().Int32Value(),
+                                          irb_.getInt16Ty(),
+                                          kTBAARuntimeInfo);
   // Mask exception pending status and return true if non-zero.
-  Value* exception_pending = irb_.CreateAnd(state_and_flags, irb_.getInt16(kExceptionPending));
+  Value* exception_pending = irb_.CreateAnd(flags, irb_.getInt16(kExceptionPending));
   return irb_.CreateICmpNE(exception_pending, irb_.getInt16(0));
 }
 
