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

Hal Finkel hfinkel at anl.gov
Fri Apr 11 14:49:45 PDT 2014


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

 -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



More information about the llvm-commits mailing list