diff options
author | Duncan Sands <baldrick@free.fr> | 2007-06-13 16:53:21 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2007-06-13 16:53:21 +0000 |
commit | 7413736a7e0941809f9428494929c93de234d2dc (patch) | |
tree | 1e2dbf8f48888b5c90a4df432cb9acb3ba067297 /llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | |
parent | 26455c4ae0c40849a256aef404d932074479a085 (diff) | |
download | bcm5719-llvm-7413736a7e0941809f9428494929c93de234d2dc.tar.gz bcm5719-llvm-7413736a7e0941809f9428494929c93de234d2dc.zip |
Only correctly lower exception handing intrinsics if exception handling is
turned on. Likewise for scanning of invokes to mark landing pads.
llvm-svn: 37570
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index c870edfd686..69d51d81c23 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -2574,7 +2574,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { case Intrinsic::eh_exception: { MachineModuleInfo *MMI = DAG.getMachineModuleInfo(); - if (MMI) { + if (ExceptionHandling && MMI) { // Mark exception register as live in. unsigned Reg = TLI.getExceptionAddressRegister(); if (Reg) CurMBB->addLiveIn(Reg); @@ -2596,7 +2596,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { case Intrinsic::eh_filter:{ MachineModuleInfo *MMI = DAG.getMachineModuleInfo(); - if (MMI) { + if (ExceptionHandling && MMI) { // Inform the MachineModuleInfo of the personality for this landing pad. ConstantExpr *CE = dyn_cast<ConstantExpr>(I.getOperand(2)); assert(CE && CE->getOpcode() == Instruction::BitCast && @@ -4386,12 +4386,11 @@ bool SelectionDAGISel::runOnFunction(Function &Fn) { FunctionLoweringInfo FuncInfo(TLI, Fn, MF); - for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) - if (InvokeInst *Invoke = dyn_cast<InvokeInst>(I->getTerminator())) { - // Mark landing pad. - MachineBasicBlock *LandingPad = FuncInfo.MBBMap[Invoke->getSuccessor(1)]; - LandingPad->setIsLandingPad(); - } + if (ExceptionHandling) + for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) + if (InvokeInst *Invoke = dyn_cast<InvokeInst>(I->getTerminator())) + // Mark landing pad. + FuncInfo.MBBMap[Invoke->getSuccessor(1)]->setIsLandingPad(); for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) SelectBasicBlock(I, MF, FuncInfo); |