diff options
-rw-r--r-- | include/llvm/Target/TargetOptions.h | 9 | ||||
-rw-r--r-- | lib/CodeGen/DwarfWriter.cpp | 9 | ||||
-rw-r--r-- | lib/Target/PowerPC/PPCRegisterInfo.cpp | 3 | ||||
-rw-r--r-- | lib/Target/TargetMachine.cpp | 8 | ||||
-rw-r--r-- | lib/Target/X86/X86RegisterInfo.cpp | 4 |
5 files changed, 26 insertions, 7 deletions
diff --git a/include/llvm/Target/TargetOptions.h b/include/llvm/Target/TargetOptions.h index 72bb272015..881ec21a0a 100644 --- a/include/llvm/Target/TargetOptions.h +++ b/include/llvm/Target/TargetOptions.h @@ -74,13 +74,18 @@ namespace llvm { /// be emitted. extern bool ExceptionHandling; + /// UnwindTablesOptional - This flag indicates that unwind tables need not + /// be emitted for all functions. Exception handling may still require them + /// for some functions. + extern bool UnwindTablesOptional; + /// PerformTailCallOpt - This flag is enabled when -tailcallopt is specified /// on the commandline. When the flag is on, the target will perform tail call /// optimization (pop the caller's stack) providing it supports it. extern bool PerformTailCallOpt; - /// OptimizeForSize - When this flags is set, code generator avoids optimization - /// that increases size. + /// OptimizeForSize - When this flag is set, the code generator avoids + /// optimizations that increase size. extern bool OptimizeForSize; } // End llvm namespace diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp index 947b420cd5..6cdc91e1f7 100644 --- a/lib/CodeGen/DwarfWriter.cpp +++ b/lib/CodeGen/DwarfWriter.cpp @@ -2905,8 +2905,11 @@ private: // If there are no calls then you can't unwind. This may mean we can // omit the EH Frame, but some environments do not handle weak absolute - // symbols. + // symbols. + // If UnwindTablesOptional is not set we cannot do this optimization; the + // unwind info is to be available for non-EH uses. if (!EHFrameInfo.hasCalls && + UnwindTablesOptional && ((linkage != Function::WeakLinkage && linkage != Function::LinkOnceLinkage) || !TAI->getWeakDefDirective() || @@ -3427,7 +3430,9 @@ public: shouldEmitTable = true; // See if we need frame move info. - if (MMI->hasDebugInfo() || !MF->getFunction()->doesNotThrow()) + if (MMI->hasDebugInfo() || + !MF->getFunction()->doesNotThrow() || + !UnwindTablesOptional) shouldEmitMoves = true; if (shouldEmitMoves || shouldEmitTable) diff --git a/lib/Target/PowerPC/PPCRegisterInfo.cpp b/lib/Target/PowerPC/PPCRegisterInfo.cpp index 8ef8b3fafa..8b4fb6a356 100644 --- a/lib/Target/PowerPC/PPCRegisterInfo.cpp +++ b/lib/Target/PowerPC/PPCRegisterInfo.cpp @@ -948,7 +948,8 @@ PPCRegisterInfo::emitPrologue(MachineFunction &MF) const { MachineFrameInfo *MFI = MF.getFrameInfo(); MachineModuleInfo *MMI = MFI->getMachineModuleInfo(); bool needsFrameMoves = (MMI && MMI->hasDebugInfo()) || - !MF.getFunction()->doesNotThrow(); + !MF.getFunction()->doesNotThrow() || + !UnwindTablesOptional; // Prepare for frame info. unsigned FrameLabelId = 0; diff --git a/lib/Target/TargetMachine.cpp b/lib/Target/TargetMachine.cpp index e4f633f111..e6f080d328 100644 --- a/lib/Target/TargetMachine.cpp +++ b/lib/Target/TargetMachine.cpp @@ -31,6 +31,7 @@ namespace llvm { bool UseSoftFloat; bool NoZerosInBSS; bool ExceptionHandling; + bool UnwindTablesOptional; Reloc::Model RelocationModel; CodeModel::Model CMModel; bool PerformTailCallOpt; @@ -80,9 +81,14 @@ namespace { cl::init(false)); cl::opt<bool, true> EnableExceptionHandling("enable-eh", - cl::desc("Exception handling should be emitted."), + cl::desc("Emit DWARF exception handling (default if target supports)"), cl::location(ExceptionHandling), cl::init(false)); + cl::opt<bool, true> + DisableUnwindTables("disable-required-unwind-tables", + cl::desc("Do not require unwinding info for all functions"), + cl::location(UnwindTablesOptional), + cl::init(false)); cl::opt<llvm::Reloc::Model, true> DefRelocationModel( diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp index 0a755605d4..2668582aef 100644 --- a/lib/Target/X86/X86RegisterInfo.cpp +++ b/lib/Target/X86/X86RegisterInfo.cpp @@ -504,7 +504,9 @@ void X86RegisterInfo::emitPrologue(MachineFunction &MF) const { MachineModuleInfo *MMI = MFI->getMachineModuleInfo(); X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); MachineBasicBlock::iterator MBBI = MBB.begin(); - bool needsFrameMoves = (MMI && MMI->hasDebugInfo()) || !Fn->doesNotThrow(); + bool needsFrameMoves = (MMI && MMI->hasDebugInfo()) || + !Fn->doesNotThrow() || + !UnwindTablesOptional; // Prepare for frame info. unsigned FrameLabelId = 0; |