<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 13, 2016 at 4:47 PM Mehdi Amini via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: mehdi_amini<br>
Date: Wed Jul 13 18:39:46 2016<br>
New Revision: 275348<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=275348&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=275348&view=rev</a><br>
Log:<br>
Add EnableIPRA to TargetOptions, and move the cl::opt -enable-ipra to TargetMachine.cpp<br>
<br>
Avoid exposing a cl::opt in a public header and instead promote this<br>
option in the API.<br>
Alternatively, we could land the cl::opt in CommandFlags.h so that<br>
it is available to every tool, but we would still have to find an<br>
option for clang.<br>
<br></blockquote><div><br></div><div>Are you planning to have it as a -f option to clang or just something via -mllvm?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Modified: llvm/trunk/include/llvm/Target/TargetOptions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetOptions.h?rev=275348&r1=275347&r2=275348&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetOptions.h?rev=275348&r1=275347&r2=275348&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Target/TargetOptions.h (original)<br>
+++ llvm/trunk/include/llvm/Target/TargetOptions.h Wed Jul 13 18:39:46 2016<br>
@@ -100,7 +100,8 @@ namespace llvm {<br>
           DisableIntegratedAS(false), CompressDebugSections(false),<br>
           RelaxELFRelocations(false), FunctionSections(false),<br>
           DataSections(false), UniqueSectionNames(true), TrapUnreachable(false),<br>
-          EmulatedTLS(false), FloatABIType(FloatABI::Default),<br>
+          EmulatedTLS(false), EnableIPRA(false),<br>
+          FloatABIType(FloatABI::Default),<br>
           AllowFPOpFusion(FPOpFusion::Standard), Reciprocals(TargetRecip()),<br>
           JTType(JumpTable::Single), ThreadModel(ThreadModel::POSIX),<br>
           EABIVersion(EABI::Default), DebuggerTuning(DebuggerKind::Default),<br>
@@ -207,6 +208,9 @@ namespace llvm {<br>
     /// function in the runtime library..<br>
     unsigned EmulatedTLS : 1;<br>
<br>
+    /// This flag enables InterProcedural Register Allocation (IPRA).<br>
+    unsigned EnableIPRA : 1;<br>
+<br></blockquote><div><br></div><div>You forgot to add it to the copy routine.</div><div><br></div><div>-eric</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     /// FloatABIType - This setting is set by -float-abi=xxx option is specfied<br>
     /// on the command line. This setting may either be Default, Soft, or Hard.<br>
     /// Default selects the target's default behavior. Soft selects the ABI for<br>
<br>
Modified: llvm/trunk/lib/CodeGen/TargetFrameLoweringImpl.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetFrameLoweringImpl.cpp?rev=275348&r1=275347&r2=275348&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetFrameLoweringImpl.cpp?rev=275348&r1=275347&r2=275348&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/TargetFrameLoweringImpl.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/TargetFrameLoweringImpl.cpp Wed Jul 13 18:39:46 2016<br>
@@ -69,7 +69,7 @@ void TargetFrameLowering::determineCalle<br>
<br>
   // When interprocedural register allocation is enabled caller saved registers<br>
   // are preferred over callee saved registers.<br>
-  if (UseIPRA && isSafeForNoCSROpt(MF.getFunction()))<br>
+  if (MF.getTarget().Options.EnableIPRA && isSafeForNoCSROpt(MF.getFunction()))<br>
     return;<br>
<br>
   // Get the callee saved register list...<br>
<br>
Modified: llvm/trunk/lib/CodeGen/TargetPassConfig.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetPassConfig.cpp?rev=275348&r1=275347&r2=275348&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetPassConfig.cpp?rev=275348&r1=275347&r2=275348&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/TargetPassConfig.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/TargetPassConfig.cpp Wed Jul 13 18:39:46 2016<br>
@@ -124,10 +124,6 @@ static cl::opt<CFLAAType> UseCFLAA(<br>
                           "Enable both variants of CFL-AA"),<br>
                clEnumValEnd));<br>
<br>
-cl::opt<bool> UseIPRA("enable-ipra", cl::init(false), cl::Hidden,<br>
-                      cl::desc("Enable interprocedural register allocation "<br>
-                               "to reduce load/store at procedure calls."));<br>
-<br>
 /// Allow standard passes to be disabled by command line options. This supports<br>
 /// simple binary flags that either suppress the pass or do nothing.<br>
 /// i.e. -disable-mypass=false has no effect.<br>
@@ -522,7 +518,7 @@ void TargetPassConfig::addISelPrepare()<br>
   addPreISel();<br>
<br>
   // Force codegen to run according to the callgraph.<br>
-  if (UseIPRA)<br>
+  if (TM->Options.EnableIPRA)<br>
     addPass(new DummyCGSCCPass);<br>
<br>
   // Add both the safe stack and the stack protection passes: each of them will<br>
@@ -561,7 +557,7 @@ void TargetPassConfig::addISelPrepare()<br>
 void TargetPassConfig::addMachinePasses() {<br>
   AddingMachinePasses = true;<br>
<br>
-  if (UseIPRA)<br>
+  if (TM->Options.EnableIPRA)<br>
     addPass(createRegUsageInfoPropPass());<br>
<br>
   // Insert a machine instr printer pass after the specified pass.<br>
@@ -649,7 +645,7 @@ void TargetPassConfig::addMachinePasses(<br>
<br>
   addPreEmitPass();<br>
<br>
-  if (UseIPRA)<br>
+  if (TM->Options.EnableIPRA)<br>
     // Collect register usage information and produce a register mask of<br>
     // clobbered registers, to be used to optimize call sites.<br>
     addPass(createRegUsageInfoCollector());<br>
<br>
Modified: llvm/trunk/lib/Target/TargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=275348&r1=275347&r2=275348&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=275348&r1=275347&r2=275348&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/TargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/TargetMachine.cpp Wed Jul 13 18:39:46 2016<br>
@@ -31,6 +31,10 @@<br>
 #include "llvm/Target/TargetSubtargetInfo.h"<br>
 using namespace llvm;<br>
<br>
+cl::opt<bool> EnableIPRA("enable-ipra", cl::init(false), cl::Hidden,<br>
+                         cl::desc("Enable interprocedural register allocation "<br>
+                                  "to reduce load/store at procedure calls."));<br>
+<br>
 //---------------------------------------------------------------------------<br>
 // TargetMachine Class<br>
 //<br>
@@ -40,7 +44,10 @@ TargetMachine::TargetMachine(const Targe<br>
                              const TargetOptions &Options)<br>
     : TheTarget(T), DL(DataLayoutString), TargetTriple(TT), TargetCPU(CPU),<br>
       TargetFS(FS), AsmInfo(nullptr), MRI(nullptr), MII(nullptr), STI(nullptr),<br>
-      RequireStructuredCFG(false), Options(Options) {}<br>
+      RequireStructuredCFG(false), Options(Options) {<br>
+  if (EnableIPRA.getNumOccurrences())<br>
+    this->Options.EnableIPRA = EnableIPRA;<br>
+}<br>
<br>
 TargetMachine::~TargetMachine() {<br>
   delete AsmInfo;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>