Implement new llc flag -disable-required-unwind-tables.
Corresponds to -fno-unwind-tables (usually default in gcc).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49361 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/PowerPC/PPCRegisterInfo.cpp b/lib/Target/PowerPC/PPCRegisterInfo.cpp
index 8ef8b3f..8b4fb6a 100644
--- a/lib/Target/PowerPC/PPCRegisterInfo.cpp
+++ b/lib/Target/PowerPC/PPCRegisterInfo.cpp
@@ -948,7 +948,8 @@
   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 e4f633f..e6f080d 100644
--- a/lib/Target/TargetMachine.cpp
+++ b/lib/Target/TargetMachine.cpp
@@ -31,6 +31,7 @@
   bool UseSoftFloat;
   bool NoZerosInBSS;
   bool ExceptionHandling;
+  bool UnwindTablesOptional;
   Reloc::Model RelocationModel;
   CodeModel::Model CMModel;
   bool PerformTailCallOpt;
@@ -80,9 +81,14 @@
               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 0a75560..2668582 100644
--- a/lib/Target/X86/X86RegisterInfo.cpp
+++ b/lib/Target/X86/X86RegisterInfo.cpp
@@ -504,7 +504,9 @@
   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;