mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-21 03:32:21 +00:00
[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@samsung.com>. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206072 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4aee5942c3
commit
92a892e8f9
@ -73,6 +73,11 @@ static cl::opt<unsigned> LastChanceRecoloringMaxInterference(
|
||||
" interference at a time"),
|
||||
cl::init(8));
|
||||
|
||||
static cl::opt<bool>
|
||||
ExhaustiveSearch("fexhaustive-register-search", cl::NotHidden,
|
||||
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(unsigned PhysReg, LiveInterval &VirtReg,
|
||||
// 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::tryLastChanceRecoloring(LiveInterval &VirtReg,
|
||||
// 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(LiveInterval &VirtReg,
|
||||
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;
|
||||
}
|
||||
|
@ -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]
|
||||
|
Loading…
x
Reference in New Issue
Block a user