[llvm] r310876 - IPRA: Allow target to enable IPRA by default

Daniel Sanders via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 18 08:47:18 PDT 2017


> On 18 Aug 2017, at 16:02, Hal Finkel <hfinkel at anl.gov> wrote:
> 
> 
> On 08/18/2017 08:16 AM, Daniel Sanders via llvm-commits wrote:
>> Hi Matt,
>> 
>> This change disabled IPRA on one of our out-of-tree targets. We are setting TM.Options.EnableIPRA but then the default path from this code is overriding our settings. I've worked around this locally by changing:
>>> +    // If not explicitly specified, use target default.
>>> +    TM.Options.EnableIPRA = TM.useIPRA();
>> to use |= instead of =. Should we make this change upstream too or should we fix it another way?
> 
> Can you update your target to use the new callback?

Unfortunately, that won't work for us since useIPRA() configures the default for a target. We're using LLVM as a library and want to have it enabled for some compilations and disabled for others.

> Are you changing this in your target code or have you patched LLVM to change the default?
> 
> -Hal

I've patched our LLVM for the moment to keep our CI going but I'll switch it to whichever solution we choose here.

>> Thanks
>> 
>>> On 14 Aug 2017, at 20:54, Matt Arsenault via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>> 
>>> Author: arsenm
>>> Date: Mon Aug 14 12:54:47 2017
>>> New Revision: 310876
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=310876&view=rev
>>> Log:
>>> IPRA: Allow target to enable IPRA by default
>>> 
>>> Modified:
>>>    llvm/trunk/include/llvm/Target/TargetMachine.h
>>>    llvm/trunk/lib/CodeGen/TargetPassConfig.cpp
>>>    llvm/trunk/lib/Target/TargetMachine.cpp
>>> 
>>> Modified: llvm/trunk/include/llvm/Target/TargetMachine.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=310876&r1=310875&r2=310876&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/include/llvm/Target/TargetMachine.h (original)
>>> +++ llvm/trunk/include/llvm/Target/TargetMachine.h Mon Aug 14 12:54:47 2017
>>> @@ -259,6 +259,12 @@ public:
>>>   /// PEI. If false (virtual-register machines), then callee-save register
>>>   /// spilling and scavenging are not needed or used.
>>>   virtual bool usesPhysRegsForPEI() const { return true; }
>>> +
>>> +  /// True if the target wants to use interprocedural register allocation by
>>> +  /// default. The -enable-ipra flag can be used to override this.
>>> +  virtual bool useIPRA() const {
>>> +    return false;
>>> +  }
>>> };
>>> 
>>> /// This class describes a target machine that is implemented with the LLVM
>>> 
>>> Modified: llvm/trunk/lib/CodeGen/TargetPassConfig.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetPassConfig.cpp?rev=310876&r1=310875&r2=310876&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/CodeGen/TargetPassConfig.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/TargetPassConfig.cpp Mon Aug 14 12:54:47 2017
>>> @@ -47,6 +47,9 @@
>>> 
>>> using namespace llvm;
>>> 
>>> +cl::opt<bool> EnableIPRA("enable-ipra", cl::init(false), cl::Hidden,
>>> +                         cl::desc("Enable interprocedural register allocation "
>>> +                                  "to reduce load/store at procedure calls."));
>>> static cl::opt<bool> DisablePostRASched("disable-post-ra", cl::Hidden,
>>>     cl::desc("Disable Post Regalloc Scheduler"));
>>> static cl::opt<bool> DisableBranchFold("disable-branch-fold", cl::Hidden,
>>> @@ -362,6 +365,13 @@ TargetPassConfig::TargetPassConfig(LLVMT
>>>   if (StringRef(PrintMachineInstrs.getValue()).equals(""))
>>>     TM.Options.PrintMachineCode = true;
>>> 
>>> +  if (EnableIPRA.getNumOccurrences())
>>> +    TM.Options.EnableIPRA = EnableIPRA;
>>> +  else {
>>> +    // If not explicitly specified, use target default.
>>> +    TM.Options.EnableIPRA = TM.useIPRA();
>>> +  }
>>> +
>>>   if (TM.Options.EnableIPRA)
>>>     setRequiresCodeGenSCCOrder();
>>> 
>>> 
>>> Modified: llvm/trunk/lib/Target/TargetMachine.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=310876&r1=310875&r2=310876&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/Target/TargetMachine.cpp (original)
>>> +++ llvm/trunk/lib/Target/TargetMachine.cpp Mon Aug 14 12:54:47 2017
>>> @@ -31,10 +31,6 @@
>>> #include "llvm/Target/TargetSubtargetInfo.h"
>>> using namespace llvm;
>>> 
>>> -cl::opt<bool> EnableIPRA("enable-ipra", cl::init(false), cl::Hidden,
>>> -                         cl::desc("Enable interprocedural register allocation "
>>> -                                  "to reduce load/store at procedure calls."));
>>> -
>>> //---------------------------------------------------------------------------
>>> // TargetMachine Class
>>> //
>>> @@ -45,8 +41,6 @@ TargetMachine::TargetMachine(const Targe
>>>     : TheTarget(T), DL(DataLayoutString), TargetTriple(TT), TargetCPU(CPU),
>>>       TargetFS(FS), AsmInfo(nullptr), MRI(nullptr), MII(nullptr), STI(nullptr),
>>>       RequireStructuredCFG(false), DefaultOptions(Options), Options(Options) {
>>> -  if (EnableIPRA.getNumOccurrences())
>>> -    this->Options.EnableIPRA = EnableIPRA;
>>> }
>>> 
>>> TargetMachine::~TargetMachine() {
>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
> 
> -- 
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170818/3860a558/attachment.html>


More information about the llvm-commits mailing list