<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>