From: Bill Wendling Date: Wed, 28 Sep 2011 20:29:45 +0000 (+0000) Subject: Perform the lowering only if there are invokes. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b18abd077e168f38acb1633c4101fbe3c8a18e41;p=oota-llvm.git Perform the lowering only if there are invokes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140719 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/ARMSjLjLoweringPass.cpp b/lib/Target/ARM/ARMSjLjLoweringPass.cpp index a7dce3be4b8..e082bc6dd2a 100644 --- a/lib/Target/ARM/ARMSjLjLoweringPass.cpp +++ b/lib/Target/ARM/ARMSjLjLoweringPass.cpp @@ -35,14 +35,14 @@ class ARMSjLjLowering : public MachineFunctionPass { LLVMContext *Context; MachineFunction *MF; - const Function *Fn; + const Function *F; const TargetLowering *TLI; const TargetInstrInfo *TII; const TargetRegisterInfo *TRI; - /// createFunctionContext - Create the function context on the stack. This - /// returns the nonnegative identifier representing it in the FrameInfo. - int createFunctionContext(); + /// setupFunctionContext - Setup the function context on the stack. Some of + /// the fields were set by the SjLj EH prepare pass. + int setupFunctionContext(); public: static char ID; @@ -67,19 +67,29 @@ bool ARMSjLjLowering::runOnMachineFunction(MachineFunction &mf) { if (!EnableNewSjLjEHPrepare) return false; MF = &mf; - Fn = MF->getFunction(); - Context = &Fn->getContext(); + F = MF->getFunction(); + Context = &F->getContext(); TLI = MF->getTarget().getTargetLowering(); TII = MF->getTarget().getInstrInfo(); TRI = MF->getTarget().getRegisterInfo(); - int FrameIdx = createFunctionContext(); (void)FrameIdx; + // Perform the lowering only if there are invokes. + bool HasInvokes = false; + for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB) + if (isa(BB->getTerminator())) { + HasInvokes = true; + break; + } + + if (!HasInvokes) return false; + + int FrameIdx = setupFunctionContext(); (void)FrameIdx; return true; } -/// createFunctionContext - Create the function context on the stack. -int ARMSjLjLowering::createFunctionContext() { +/// setupFunctionContext - Create the function context on the stack. +int ARMSjLjLowering::setupFunctionContext() { // struct _Unwind_FunctionContext { // // next function in stack of handlers. // struct _Unwind_FunctionContext *prev;