]> granicus.if.org Git - clang/commitdiff
Driver: Add clang -cc1 -mrelax-all option, which sets relaxes all instructions when...
authorDaniel Dunbar <daniel@zuster.org>
Thu, 27 May 2010 05:39:39 +0000 (05:39 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 27 May 2010 05:39:39 +0000 (05:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104807 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/CodeGen/CodeGenOptions.h
include/clang/Driver/CC1Options.td
lib/Frontend/CodeGenAction.cpp
lib/Frontend/CompilerInvocation.cpp

index 54d3ba03f3f0e17e1c05a15598ed104bff22bf50..6241230ffb4588ef70cf39debfb580b7eb902f5a 100644 (file)
@@ -54,6 +54,7 @@ public:
   unsigned ObjCDispatchMethod : 2; /// Method of Objective-C dispatch to use.
   unsigned OptimizationLevel : 3; /// The -O[0-4] option specified.
   unsigned OptimizeSize      : 1; /// If -Os is specified.
+  unsigned RelaxAll          : 1; /// Relax all machine code instructions.
   unsigned SoftFloat         : 1; /// -soft-float.
   unsigned TimePasses        : 1; /// Set when -ftime-report is enabled.
   unsigned UnitAtATime       : 1; /// Unused. For mirroring GCC optimization
@@ -108,6 +109,7 @@ public:
     ObjCDispatchMethod = Legacy;
     OptimizationLevel = 0;
     OptimizeSize = 0;
+    RelaxAll = 0;
     SoftFloat = 0;
     TimePasses = 0;
     UnitAtATime = 1;
index d7079bb933b9ade9ab4fd616654e450f5fc9b8c7..fd8322b84370941818446b19f4831397bbe4e914 100644 (file)
@@ -147,6 +147,8 @@ def mno_zero_initialized_in_bss : Flag<"-mno-zero-initialized-in-bss">,
   HelpText<"Do not put zero initialized data in the BSS">;
 def msoft_float : Flag<"-msoft-float">,
   HelpText<"Use software floating point">;
+def mrelax_all : Flag<"-mrelax-all">,
+  HelpText<"Relax all machine instructions">;
 def mrelocation_model : Separate<"-mrelocation-model">,
   HelpText<"The relocation model to use">;
 def munwind_tables : Flag<"-munwind-tables">,
index 03e3ea605cccd93c4a997eb2184f85c12c5b2ef8..3416aa825fcbe4673313fd11d767c28b672cd483 100644 (file)
@@ -321,6 +321,9 @@ bool BackendConsumer::AddEmitPasses() {
   }
   TargetMachine *TM = TheTarget->createTargetMachine(Triple, FeaturesStr);
 
+  if (CodeGenOpts.RelaxAll)
+    TM->setMCRelaxAll(true);
+
   // Set register scheduler & allocation policy.
   RegisterScheduler::setDefault(createDefaultScheduler);
   RegisterRegAlloc::setDefault(Fast ? createLocalRegisterAllocator :
index 2b75b64dc7da13d101ddd1ba0ce661a6b9fabc77..1d81e82ca37b105f810fbf49c0b3091dd344cc84 100644 (file)
@@ -187,6 +187,8 @@ static void CodeGenOptsToArgs(const CodeGenOptions &Opts,
     Res.push_back("-fobjc-dispatch-method=non-legacy");
     break;
   }
+  if (Opts.RelaxAll)
+    Res.push_back("-mrelax-all");
   if (Opts.SoftFloat)
     Res.push_back("-msoft-float");
   if (Opts.UnwindTables)
@@ -815,6 +817,7 @@ static void ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
   Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi);
   Opts.LimitFloatPrecision = Args.getLastArgValue(OPT_mlimit_float_precision);
   Opts.NoZeroInitializedInBSS = Args.hasArg(OPT_mno_zero_initialized_in_bss);
+  Opts.RelaxAll = Args.hasArg(OPT_mrelax_all);
   Opts.SoftFloat = Args.hasArg(OPT_msoft_float);
   Opts.UnwindTables = Args.hasArg(OPT_munwind_tables);
   Opts.RelocationModel = Args.getLastArgValue(OPT_mrelocation_model, "pic");