Skip to content

Commit cbb6a35

Browse files
pratikasharsys_zuul
authored andcommitted
Modify spill/fill intrinsics' offset units
Change-Id: I1fc1aa5c43ac21cf6f623ea0fd339e836c2c34ca
1 parent ffc20ba commit cbb6a35

File tree

4 files changed

+16
-20
lines changed

4 files changed

+16
-20
lines changed

visa/BuildIR.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,6 +1113,8 @@ class IR_Builder {
11131113
return inst;
11141114
}
11151115

1116+
static const unsigned int HWORD_BYTE_SIZE = 32;
1117+
11161118
// numRows is in hword units
11171119
// offset is in hword units
11181120
G4_INST* createSpill(
@@ -1126,7 +1128,8 @@ class IR_Builder {
11261128
spill->asSpillIntrinsic()->setSrcFilename(srcFilename);
11271129
spill->asSpillIntrinsic()->setCISAOff(CISAoff);
11281130
spill->asSpillIntrinsic()->setFP(fp);
1129-
spill->asSpillIntrinsic()->setOffset(offset);
1131+
spill->asSpillIntrinsic()->setOffset((uint32_t)
1132+
(((uint64_t)offset * HWORD_BYTE_SIZE) / G4_GRF_REG_NBYTES));
11301133
spill->asSpillIntrinsic()->setNumRows(numRows);
11311134
return spill;
11321135
}
@@ -1146,7 +1149,8 @@ class IR_Builder {
11461149
spill->asSpillIntrinsic()->setSrcFilename(srcFilename);
11471150
spill->asSpillIntrinsic()->setCISAOff(CISAoff);
11481151
spill->asSpillIntrinsic()->setFP(fp);
1149-
spill->asSpillIntrinsic()->setOffset(offset);
1152+
spill->asSpillIntrinsic()->setOffset((uint32_t)
1153+
(((uint64_t)offset * HWORD_BYTE_SIZE) / G4_GRF_REG_NBYTES));
11501154
spill->asSpillIntrinsic()->setNumRows(numRows);
11511155
return spill;
11521156
}
@@ -1159,7 +1163,8 @@ class IR_Builder {
11591163
fill->asFillIntrinsic()->setSrcFilename(srcFilename);
11601164
fill->asFillIntrinsic()->setCISAOff(CISAoff);
11611165
fill->asFillIntrinsic()->setFP(fp);
1162-
fill->asFillIntrinsic()->setOffset(offset);
1166+
fill->asFillIntrinsic()->setOffset((uint32_t)
1167+
(((uint64_t)offset * HWORD_BYTE_SIZE) / G4_GRF_REG_NBYTES));
11631168
fill->asFillIntrinsic()->setNumRows(numRows);
11641169
return fill;
11651170
}
@@ -1175,7 +1180,8 @@ class IR_Builder {
11751180
fill->asFillIntrinsic()->setSrcFilename(srcFilename);
11761181
fill->asFillIntrinsic()->setCISAOff(CISAoff);
11771182
fill->asFillIntrinsic()->setFP(fp);
1178-
fill->asFillIntrinsic()->setOffset(offset);
1183+
fill->asFillIntrinsic()->setOffset((uint32_t)
1184+
(((uint64_t)offset * HWORD_BYTE_SIZE) / G4_GRF_REG_NBYTES));
11791185
fill->asFillIntrinsic()->setNumRows(numRows);
11801186
return fill;
11811187
}

visa/GraphColor.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9390,6 +9390,7 @@ int GlobalRA::coloringRegAlloc()
93909390
bool disableSpillCoalecse = builder.getOption(vISA_DisableSpillCoalescing) ||
93919391
builder.getOption(vISA_FastSpill) || builder.getOption(vISA_Debug) ||
93929392
!useScratchMsgForSpill;
9393+
93939394
if (!reserveSpillReg && !disableSpillCoalecse && builder.useSends())
93949395
{
93959396
CoalesceSpillFills c(kernel, liveAnalysis, coloring, spillGRF, iterationNo, rpe, *this);

visa/SpillCleanup.cpp

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -445,20 +445,7 @@ void CoalesceSpillFills::sendsInRange(std::list<INST_LIST_ITER>& instList,
445445
{
446446
unsigned scratchOffset, sizeInGrfUnit, lastScratchOffset;
447447
auto inst = *(*iter);
448-
if (inst->isSpillIntrinsic())
449-
{
450-
scratchOffset = inst->asSpillIntrinsic()->getOffset();
451-
sizeInGrfUnit = inst->asSpillIntrinsic()->getNumRows();
452-
}
453-
else if (inst->isFillIntrinsic())
454-
{
455-
scratchOffset = inst->asFillIntrinsic()->getOffset();
456-
sizeInGrfUnit = inst->asFillIntrinsic()->getNumRows();
457-
}
458-
else
459-
{
460-
MUST_BE_TRUE(false, "unknown inst type");
461-
}
448+
getScratchMsgInfo(inst, scratchOffset, sizeInGrfUnit);
462449
lastScratchOffset = scratchOffset + sizeInGrfUnit - 1;
463450

464451
if (min == 0xffffffff && max == 0)

visa/SpillManagerGMRF.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4560,7 +4560,8 @@ void GlobalRA::expandSpillIntrinsic(G4_BB* bb)
45604560
{
45614561
bool isOffBP = inst->asSpillIntrinsic()->isOffBP();
45624562
uint32_t numRows = inst->asSpillIntrinsic()->getNumRows();
4563-
uint32_t offset = inst->asSpillIntrinsic()->getOffset();
4563+
uint32_t offset = inst->asSpillIntrinsic()->getOffset() *
4564+
(G4_GRF_REG_NBYTES / HWORD_BYTE_SIZE);
45644565
auto header = inst->getSrc(0)->asSrcRegRegion();
45654566
auto payload = inst->getSrc(1)->asSrcRegRegion();
45664567
auto spillIt = instIt;
@@ -4728,7 +4729,8 @@ void GlobalRA::expandFillIntrinsic(G4_BB* bb)
47284729
{
47294730
bool isOffBP = inst->asFillIntrinsic()->isOffBP();
47304731
uint32_t numRows = inst->asFillIntrinsic()->getNumRows();
4731-
uint32_t offset = inst->asFillIntrinsic()->getOffset();
4732+
uint32_t offset = inst->asFillIntrinsic()->getOffset() *
4733+
(G4_GRF_REG_NBYTES / HWORD_BYTE_SIZE);
47324734
auto header = inst->getSrc(0)->asSrcRegRegion();
47334735
auto resultRgn = inst->getDst()->asDstRegRegion();
47344736
auto fillIt = instIt;

0 commit comments

Comments
 (0)