diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2014-04-15 21:30:06 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2014-04-15 21:30:06 +0000 |
commit | 3d90f99d1aae58b1d0ab28a0d7a838305eab2a49 (patch) | |
tree | 718c8233268d42d75f14cf100fe71c2bcc855c87 /llvm/lib/CodeGen | |
parent | e2ef2a09ef265fe854f160d127537dc243d1ffc4 (diff) | |
download | bcm5719-llvm-3d90f99d1aae58b1d0ab28a0d7a838305eab2a49.tar.gz bcm5719-llvm-3d90f99d1aae58b1d0ab28a0d7a838305eab2a49.zip |
Make FastISel::SelectInstruction return before target specific fast-isel code
handles Intrinsic::trap if TargetOptions::TrapFuncName is set.
This fixes a bug in which the trap function was not taken into consideration
when a program was compiled without optimization (at -O0).
<rdar://problem/16291933>
llvm-svn: 206323
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/FastISel.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp index 9cebf5b9324..09563fd368b 100644 --- a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -826,15 +826,21 @@ FastISel::SelectInstruction(const Instruction *I) { MachineBasicBlock::iterator SavedInsertPt = FuncInfo.InsertPt; - // As a special case, don't handle calls to builtin library functions that - // may be translated directly to target instructions. if (const CallInst *Call = dyn_cast<CallInst>(I)) { const Function *F = Call->getCalledFunction(); LibFunc::Func Func; + + // As a special case, don't handle calls to builtin library functions that + // may be translated directly to target instructions. if (F && !F->hasLocalLinkage() && F->hasName() && LibInfo->getLibFunc(F->getName(), Func) && LibInfo->hasOptimizedCodeGen(Func)) return false; + + // Don't handle Intrinsic::trap if a trap funciton is specified. + if (F && F->getIntrinsicID() == Intrinsic::trap && + !TM.Options.getTrapFunctionName().empty()) + return false; } // First, try doing target-independent selection. |