diff options
Diffstat (limited to 'src/compiler_llvm/method_compiler.cc')
| -rw-r--r-- | src/compiler_llvm/method_compiler.cc | 26 |
1 files changed, 4 insertions, 22 deletions
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc index 7ab11f5bd5..ccec7e96ec 100644 --- a/src/compiler_llvm/method_compiler.cc +++ b/src/compiler_llvm/method_compiler.cc @@ -3540,34 +3540,16 @@ void MethodCompiler::EmitGuard_ExceptionLandingPad(uint32_t dex_pc, bool can_ski return; } - 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* exception_pending = irb_.Runtime().EmitIsExceptionPending(); - 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)); + llvm::BasicBlock* block_cont = CreateBasicBlockWithDexPC(dex_pc, "cont"); if (lpad) { - irb_.CreateCondBr(exception_set, lpad, block_suspend, kLikely); + irb_.CreateCondBr(exception_pending, lpad, block_cont, kUnlikely); } else { - irb_.CreateCondBr(exception_set, GetUnwindBasicBlock(), block_suspend, kLikely); + irb_.CreateCondBr(exception_pending, GetUnwindBasicBlock(), block_cont, kUnlikely); } - irb_.SetInsertPoint(block_suspend); - if (dex_pc != art::DexFile::kDexNoIndex) { - EmitUpdateDexPC(dex_pc); - } - irb_.Runtime().EmitTestSuspend(); - irb_.CreateBr(block_cont); - irb_.SetInsertPoint(block_cont); } |