Skip to content

Commit b38cd84

Browse files
pratikasharZuul
authored andcommitted
Honoring GRF alignment computed by augmentation is required for correctness. Bank conflict alignment is honored only if special alignment isnt needed by augmentation.
Change-Id: I09ddae465e8f8ff619f0f05a78ba5c29d58edaad
1 parent 2f0daaf commit b38cd84

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

visa/GraphColor.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5413,11 +5413,13 @@ bool GraphColor::assignColors(ColorHeuristic colorHeuristicGRF, bool doBankConfl
54135413

54145414
if (!failed_alloc)
54155415
{
5416-
BankAlign align = gra.isEvenAligned(lrVar->getDeclare()) ? BankAlign::Even : BankAlign::Either;
5416+
// When evenAlignNeeded is true, it is binding for correctness
5417+
bool evenAlignNeeded = gra.isEvenAligned(lrVar->getDeclare());
5418+
BankAlign align = evenAlignNeeded ? BankAlign::Even : BankAlign::Either;
54175419
if (allocFromBanks)
54185420
{
54195421

5420-
if (!isHybrid && oneGRFBankDivision)
5422+
if (!isHybrid && oneGRFBankDivision && !evenAlignNeeded)
54215423
{
54225424
gra.getBankAlignment(lr, align);
54235425
}

visa/PhyRegUsage.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ bool PhyRegUsage::assignRegs(bool highInternalConflict,
10511051
}
10521052

10531053
PhyRegUsage::PhyReg phyReg = findGRFSubReg(forbidden, varBasis->getCalleeSaveBias(),
1054-
varBasis->getCallerSaveBias(), bankAlign != BankAlign::Either ? bankAlign : align, subAlign,
1054+
varBasis->getCallerSaveBias(), align != BankAlign::Either ? align : bankAlign, subAlign,
10551055
numAllocUnit(decl->getNumElems(), decl->getElemType()));
10561056
if (phyReg.reg != -1)
10571057
{
@@ -1115,7 +1115,7 @@ bool PhyRegUsage::assignRegs(bool highInternalConflict,
11151115

11161116
unsigned short occupiedBundles = gra.getOccupiedBundle(decl);
11171117
bool success = findContiguousGRF(availableGregs, forbidden, occupiedBundles,
1118-
bankAlign != BankAlign::Either ? bankAlign : align, decl->getNumRows(), endGRFReg,
1118+
align != BankAlign::Either ? align : bankAlign, decl->getNumRows(), endGRFReg,
11191119
startGRFReg, i, varBasis->getCalleeSaveBias(), varBasis->getEOTSrc());
11201120
if (success) {
11211121
varBasis->setPhyReg(regPool.getGreg(i), 0);

0 commit comments

Comments
 (0)