[llvm] r206072 - [RegAllocGreedy][Last Chance Recoloring] Addition of

Quentin Colombet qcolombet at apple.com
Fri Apr 11 14:59:04 PDT 2014


On Apr 11, 2014, at 2:53 PM, Quentin Colombet <qcolombet at apple.com> wrote:

> 
> On Apr 11, 2014, at 2:49 PM, Hal Finkel <hfinkel at anl.gov> wrote:
> 
>> ----- Original Message -----
>>> From: "Quentin Colombet" <qcolombet at apple.com>
>>> To: llvm-commits at cs.uiuc.edu
>>> Sent: Friday, April 11, 2014 4:39:45 PM
>>> Subject: [llvm] r206072 - [RegAllocGreedy][Last Chance Recoloring] Addition of
>>> 
>>> Author: qcolombet
>>> Date: Fri Apr 11 16:39:44 2014
>>> New Revision: 206072
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=206072&view=rev
>>> Log:
>>> [RegAllocGreedy][Last Chance Recoloring] Addition of
>>> -fexhaustive-register-search option to allow an exhaustive search
>>> during last
>>> chance recoloring.
>>> 
>>> This is related to PR18747
>>> 
>>> Patch by MAYUR PANDEY <mayur.p at samsung.com>.
>>> 
>>> Modified:
>>>    llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp
>>>    llvm/trunk/test/CodeGen/X86/ragreedy-last-chance-recoloring.ll
>>> 
>>> Modified: llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp?rev=206072&r1=206071&r2=206072&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp Fri Apr 11 16:39:44
>>> 2014
>>> @@ -73,6 +73,11 @@ static cl::opt<unsigned> LastChanceRecol
>>>              " interference at a time"),
>>>     cl::init(8));
>>> 
>>> +static cl::opt<bool>
>>> +ExhaustiveSearch("fexhaustive-register-search", cl::NotHidden,
>> 
>> We don't normally name these things with a 'f' in front inside LLVM proper. That's a Clang thing ;)
>> 
> Good point!
> I’ll remove it.
> 
This is r206075.

Thanks,
-Quentin

> -Quentin
> 
>> -Hal
>> 
>>> +                 cl::desc("Exhaustive Search for registers bypassing
>>> the depth "
>>> +                          "and interference cutoffs of last chance
>>> recoloring"));
>>> +
>>> // FIXME: Find a good default for this flag and remove the flag.
>>> static cl::opt<unsigned>
>>> CSRFirstTimeCost("regalloc-csr-first-time-cost",
>>> @@ -1932,7 +1937,7 @@ RAGreedy::mayRecolorAllInterferences(uns
>>>     // If there is LastChanceRecoloringMaxInterference or more
>>>     interferences,
>>>     // chances are one would not be recolorable.
>>>     if
>>>     (Q.collectInterferingVRegs(LastChanceRecoloringMaxInterference)
>>>> =
>>> -        LastChanceRecoloringMaxInterference) {
>>> +        LastChanceRecoloringMaxInterference && !ExhaustiveSearch) {
>>>       DEBUG(dbgs() << "Early abort: too many interferences.\n");
>>>       CutOffInfo |= CO_Interf;
>>>       return false;
>>> @@ -2005,7 +2010,7 @@ unsigned RAGreedy::tryLastChanceRecolori
>>>   // We may want to reconsider that if we end up with a too large
>>>   search space
>>>   // for target with hundreds of registers.
>>>   // Indeed, in that case we may want to cut the search space
>>>   earlier.
>>> -  if (Depth >= LastChanceRecoloringMaxDepth) {
>>> +  if (Depth >= LastChanceRecoloringMaxDepth && !ExhaustiveSearch) {
>>>     DEBUG(dbgs() << "Abort because max depth has been reached.\n");
>>>     CutOffInfo |= CO_Depth;
>>>     return ~0u;
>>> @@ -2139,14 +2144,17 @@ unsigned RAGreedy::selectOrSplit(LiveInt
>>>   if (Reg == ~0U && (CutOffInfo != CO_None)) {
>>>     uint8_t CutOffEncountered = CutOffInfo & (CO_Depth | CO_Interf);
>>>     if (CutOffEncountered == CO_Depth)
>>> -      Ctx.emitError(
>>> -          "register allocation failed: maximum depth for recoloring
>>> reached");
>>> +      Ctx.emitError("register allocation failed: maximum depth for
>>> recoloring "
>>> +                    "reached. Use -fexhaustive-register-search to
>>> skip "
>>> +                    "cutoffs");
>>>     else if (CutOffEncountered == CO_Interf)
>>>       Ctx.emitError("register allocation failed: maximum
>>>       interference for "
>>> -                    "recoloring reached");
>>> +                    "recoloring reached. Use
>>> -fexhaustive-register-search "
>>> +                    "to skip cutoffs");
>>>     else if (CutOffEncountered == (CO_Depth | CO_Interf))
>>>       Ctx.emitError("register allocation failed: maximum
>>>       interference and "
>>> -                    "depth for recoloring reached");
>>> +                    "depth for recoloring reached. Use "
>>> +                    "-fexhaustive-register-search to skip cutoffs");
>>>   }
>>>   return Reg;
>>> }
>>> 
>>> Modified:
>>> llvm/trunk/test/CodeGen/X86/ragreedy-last-chance-recoloring.ll
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/ragreedy-last-chance-recoloring.ll?rev=206072&r1=206071&r2=206072&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/test/CodeGen/X86/ragreedy-last-chance-recoloring.ll
>>> (original)
>>> +++ llvm/trunk/test/CodeGen/X86/ragreedy-last-chance-recoloring.ll
>>> Fri Apr 11 16:39:44 2014
>>> @@ -8,6 +8,10 @@
>>> ; RUN: not llc -regalloc=greedy -relocation-model=pic
>>> -lcr-max-interf=1  < %s 2>&1 | FileCheck %s
>>> --check-prefix=CHECK-INTERF
>>> ; Test whether failure due to cutoff for interference is reported
>>> 
>>> +; RUN: llc -regalloc=greedy -relocation-model=pic -lcr-max-interf=1
>>> -lcr-max-depth=0 -fexhaustive-register-search < %s > %t 2>&1
>>> +; RUN: FileCheck --input-file=%t %s --check-prefix=CHECK-EXHAUSTIVE
>>> +; Test whether fexhaustive-register-search can bypass the depth and
>>> interference cutoffs of last chance recoloring
>>> +
>>> target datalayout =
>>> "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32-S128"
>>> target triple = "i386-apple-macosx"
>>> 
>>> @@ -20,6 +24,7 @@ target triple = "i386-apple-macosx"
>>> ; CHECK-NOT: ran out of registers during register allocation
>>> ; CHECK-INTERF: error: register allocation failed: maximum
>>> interference for recoloring reached
>>> ; CHECK-DEPTH: error: register allocation failed: maximum depth for
>>> recoloring reached
>>> +; CHECK-EXHAUSTIVE-NOT: error: register allocation failed: maximum
>>> {{depth|interference}} for recoloring reached
>>> define void @fp_dh_f870bf31fd8ffe068450366e3f05389a(i8* %arg) #0 {
>>> bb:
>>>   indirectbr i8* undef, [label %bb85, label %bb206]
>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>> 
>> 
>> -- 
>> Hal Finkel
>> Assistant Computational Scientist
>> Leadership Computing Facility
>> Argonne National Laboratory
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

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


More information about the llvm-commits mailing list