Skip to content

Commit d6548a3

Browse files
jgu222igcbot
authored andcommitted
Backout : Mark NoMask instructions inserted by RA for EU Fusion WA.
Backout this one and will resubmit it.
1 parent 02088ce commit d6548a3

File tree

8 files changed

+57
-117
lines changed

8 files changed

+57
-117
lines changed

visa/GraphColor.cpp

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6917,13 +6917,10 @@ unsigned GlobalRA::getRegionDisp(
69176917
return rowOffset + columnOffset;
69186918
}
69196919

6920-
void GlobalRA::addEUFusionWAInsts(G4_BB* bb, G4_INST* inst)
6920+
void GlobalRA::addEUFusionWAInsts(G4_INST* inst)
69216921
{
6922-
if (EUFusionWANeeded())
6923-
{
6922+
if(EUFusionWANeeded())
69246923
EUFusionWAInsts.insert(inst);
6925-
kernel.addWAInst(bb, inst);
6926-
}
69276924
}
69286925

69296926
unsigned GlobalRA::getRegionByteSize(
@@ -7673,6 +7670,15 @@ void GlobalRA::stackCallProlog()
76737670
auto iter = std::find_if(entryBB->begin(), entryBB->end(), [](G4_INST* inst) { return !inst->isLabel(); });
76747671
entryBB->insertBefore(iter, store);
76757672

7673+
if (EUFusionWANeeded())
7674+
{
7675+
auto oldSaveInst = builder.getPartFDSaveInst();
7676+
builder.setPartFDSaveInst(store);
7677+
entryBB->remove(oldSaveInst);
7678+
}
7679+
7680+
addEUFusionWAInsts(store);
7681+
76767682
return;
76777683
}
76787684

@@ -8365,6 +8371,14 @@ void GlobalRA::addCalleeStackSetupCode()
83658371
builder.kernel.getKernelDebugInfo()->setFrameSize(frameSize * 16);
83668372
}
83678373

8374+
addEUFusionWAInsts(createBEFP);
8375+
addEUFusionWAInsts(addInst);
8376+
8377+
if (EUFusionWANeeded())
8378+
{
8379+
builder.kernel.getKernelDebugInfo()->setCallerBEFPSaveInst(createBEFP);
8380+
}
8381+
83688382
insertIt++;
83698383
entryBB->insertBefore(insertIt, createBEFP);
83708384
entryBB->insertBefore(insertIt, addInst);
@@ -8682,11 +8696,13 @@ void GlobalRA::addStoreRestoreToReturn()
86828696
auto iter = std::prev(fretBB->end());
86838697
assert((*iter)->isFReturn() && "fret BB must end with fret");
86848698

8685-
restoreBE_FPInst = builder.createMov(g4::SIMD4, FPdst, oldFPSrc, InstOpt_WriteEnable, false);
8686-
fretBB->insertBefore(iter, restoreBE_FPInst);
8687-
8688-
//TODO: Evaluate following for improving stack save/restore
8689-
#if 0
8699+
if (!EUFusionWANeeded())
8700+
{
8701+
restoreBE_FPInst = builder.createMov(g4::SIMD4, FPdst, oldFPSrc, InstOpt_WriteEnable, false);
8702+
fretBB->insertBefore(iter, restoreBE_FPInst);
8703+
}
8704+
else
8705+
{
86908706
// emit frame descriptor
86918707
auto dstDcl = builder.createHardwiredDeclare(8, Type_UD, kernel.getFPSPGRF(), 0);
86928708
dstDcl->setName(builder.getNameString(builder.kernel.fg.mem, 24, "FrameDescriptorGRF"));
@@ -8703,15 +8719,18 @@ void GlobalRA::addStoreRestoreToReturn()
87038719
load = builder.createFill(dstData, G4_ExecSize(execSize), 1, 0, builder.getBEFP(), InstOpt_WriteEnable, false);
87048720
}
87058721
fretBB->insertBefore(iter, load);
8722+
addEUFusionWAInsts(load);
87068723
restoreBE_FPInst = load;
8707-
#endif
8724+
}
87088725

87098726
restoreBE_FPInst->addComment("restore vISA SP/FP from temp");
87108727

87118728
if (builder.kernel.getOption(vISA_GenerateDebugInfo))
87128729
{
87138730
builder.kernel.getKernelDebugInfo()->setCallerBEFPRestoreInst(restoreBE_FPInst);
87148731
builder.kernel.getKernelDebugInfo()->setCallerSPRestoreInst(restoreBE_FPInst);
8732+
if(!EUFusionWANeeded())
8733+
builder.kernel.getKernelDebugInfo()->setCallerBEFPSaveInst(saveBE_FPInst);
87158734
}
87168735

87178736
auto gtpin = builder.kernel.getGTPinData();
@@ -9215,11 +9234,6 @@ void VarSplit::insertMovesToTemp(
92159234
(gra.getSubOffset(subDcl)) / numEltPerGRF<Type_UB>(), 0, builder.getRegionStride1(), oldDcl->getElemType());
92169235
G4_INST* splitInst = builder.createMov(G4_ExecSize(subDcl->getTotalElems()), dst, src, maskFlag, false);
92179236
bb->insertBefore(iter, splitInst);
9218-
if (splitInst->isWriteEnableInst() &&
9219-
gra.EUFusionWANeeded())
9220-
{
9221-
gra.addEUFusionWAInsts(bb, splitInst);
9222-
}
92239237
}
92249238
}
92259239

@@ -9272,11 +9286,6 @@ void VarSplit::insertMovesFromTemp(G4_Kernel& kernel, G4_Declare* oldDcl, int in
92729286
G4_INST* movInst = kernel.fg.builder->createMov(
92739287
G4_ExecSize(subDcl->getTotalElems()), dst, src, InstOpt_WriteEnable, false);
92749288
bb->insertBefore(instIter, movInst);
9275-
if (movInst->isWriteEnableInst() &&
9276-
gra.EUFusionWANeeded())
9277-
{
9278-
gra.addEUFusionWAInsts(bb, movInst);
9279-
}
92809289
}
92819290
}
92829291
auto newSrc = kernel.fg.builder->createSrcRegRegion(oldSrc->getModifier(), Direct, newDcl->getRegVar(),

visa/GraphColor.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ namespace vISA
694694
bool m_EUFusionWANeeded;
695695
public:
696696
bool EUFusionWANeeded() const { return m_EUFusionWANeeded; }
697-
void addEUFusionWAInsts(G4_BB* bb, G4_INST* inst);
697+
void addEUFusionWAInsts(G4_INST* inst);
698698
void removeEUFusionWAInst(G4_INST* inst) { EUFusionWAInsts.erase(inst); }
699699
const std::unordered_set<G4_INST*>& getEUFusionWAInsts() { return EUFusionWAInsts; }
700700
public:
@@ -1203,7 +1203,11 @@ namespace vISA
12031203
verifyAugmentation = std::make_unique<VerifyAugmentation>();
12041204
}
12051205

1206-
m_EUFusionWANeeded = builder.hasFusedEU();
1206+
// Need call WA for EU Fusion for non-entry function
1207+
m_EUFusionWANeeded = builder.hasFusedEU()
1208+
&& builder.getOption(vISA_fusedCallWA)
1209+
&& (kernel.fg.getHasStackCalls() || kernel.hasIndirectCall())
1210+
&& !builder.getIsKernel();
12071211
}
12081212

12091213
void emitFGWithLiveness(const LivenessAnalysis& liveAnalysis) const;

visa/Rematerialization.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -966,6 +966,7 @@ namespace vISA
966966
rematSrc = createSrcRgn(src, dst, newTemp);
967967

968968
newInst.push_back(dupOp);
969+
969970
cacheInst = newInst.back();
970971
}
971972
else
@@ -1267,11 +1268,6 @@ namespace vISA
12671268
while (!newInsts.empty())
12681269
{
12691270
bb->insertBefore(instIt, newInsts.front());
1270-
if (newInsts.front()->isWriteEnableInst() &&
1271-
gra.EUFusionWANeeded())
1272-
{
1273-
gra.addEUFusionWAInsts(bb, newInsts.front());
1274-
}
12751271
newInsts.pop_front();
12761272
}
12771273

visa/SpillCleanup.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,6 @@ void CoalesceSpillFills::copyToOldFills(
112112

113113
bb->insertBefore(f, copy);
114114

115-
if (gra.EUFusionWANeeded())
116-
{
117-
gra.addEUFusionWAInsts(bb, copy);
118-
}
119-
120115
numGRFs -= simdSize == 8 ? 1 : 2;
121116
rowOff += simdSize == 8 ? 1 : 2;
122117
}
@@ -1415,12 +1410,6 @@ void CoalesceSpillFills::fixSendsSrcOverlap()
14151410
G4_INST* copyInst = kernel.fg.builder->createMov(
14161411
g4::SIMD8, dstRgn, srcRgn, InstOpt_WriteEnable, false);
14171412
bb->insertBefore(instIt, copyInst);
1418-
1419-
if (gra.EUFusionWANeeded())
1420-
{
1421-
gra.addEUFusionWAInsts(bb, copyInst);
1422-
}
1423-
14241413
elems -= 8;
14251414
row++;
14261415
}
@@ -1878,11 +1867,6 @@ void CoalesceSpillFills::spillFillCleanup()
18781867
execSize, nDst, nSrc, InstOpt_WriteEnable, false);
18791868
bb->insertBefore(instIt, mov);
18801869

1881-
if (gra.EUFusionWANeeded())
1882-
{
1883-
gra.addEUFusionWAInsts(bb, mov);
1884-
}
1885-
18861870
row += execSize / 8;
18871871
}
18881872

visa/SpillCode.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,6 @@ void SpillManager::genRegMov(G4_BB* bb,
198198
}
199199
MUST_BE_TRUE(nRegs == 0, ERROR_SPILLCODE);
200200

201-
if (gra.EUFusionWANeeded())
202-
{
203-
for (auto inst : builder.instList)
204-
{
205-
gra.addEUFusionWAInsts(bb, inst);
206-
}
207-
}
208-
209201
//
210202
// insert newly created insts from builder to instList
211203
//
@@ -336,11 +328,6 @@ void SpillManager::replaceSpilledSrc(G4_BB* bb,
336328
G4_INST* movInst = builder.createMov(g4::SIMD1, movDst, movSrc, InstOpt_WriteEnable, false);
337329
bb->insertBefore(it, movInst);
338330

339-
if (gra.EUFusionWANeeded())
340-
{
341-
gra.addEUFusionWAInsts(bb, movInst);
342-
}
343-
344331
s = builder.createSrc(
345332
tmpDcl->getRegVar(),
346333
0,

visa/SpillManagerGMRF.cpp

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4913,10 +4913,6 @@ void GlobalRA::saveRestoreA0(G4_BB * bb)
49134913
{
49144914
auto addrSpill = a0SaveMov();
49154915
bb->insertBefore(instIt, addrSpill);
4916-
if (EUFusionWANeeded())
4917-
{
4918-
addEUFusionWAInsts(bb, addrSpill);
4919-
}
49204916
}
49214917
auto a0SSO = a0SSOMove();
49224918
bb->insertBefore(instIt, a0SSO);
@@ -4928,10 +4924,6 @@ void GlobalRA::saveRestoreA0(G4_BB * bb)
49284924
// restore A0
49294925
auto addrFill = a0RestoreMov();
49304926
bb->insertBefore(instIt, addrFill);
4931-
if (EUFusionWANeeded())
4932-
{
4933-
addEUFusionWAInsts(bb, addrFill);
4934-
}
49354927
hasActiveSpillFill = false;
49364928
}
49374929
}
@@ -5146,13 +5138,8 @@ void GlobalRA::expandSpillLSC(G4_BB* bb, INST_LIST_ITER& instIt)
51465138
if (getEUFusionWAInsts().count(inst) > 0)
51475139
{
51485140
removeEUFusionWAInst(inst);
5149-
// no WA needed for stack call spill/fill
5150-
if (!inst->getFP() &&
5151-
inst->isWriteEnableInst())
5152-
{
5153-
for (auto inst : builder->instList)
5154-
addEUFusionWAInsts(bb, inst);
5155-
}
5141+
for (auto inst : builder->instList)
5142+
addEUFusionWAInsts(inst);
51565143
}
51575144

51585145
splice(bb, instIt, builder->instList, inst->getCISAOff());
@@ -5234,13 +5221,8 @@ void GlobalRA::expandFillLSC(G4_BB* bb, INST_LIST_ITER& instIt)
52345221
if (getEUFusionWAInsts().count(inst) > 0)
52355222
{
52365223
removeEUFusionWAInst(inst);
5237-
// no WA needed for stack call spill/fill
5238-
if (!inst->getFP() &&
5239-
inst->isWriteEnableInst())
5240-
{
5241-
for (auto inst : builder->instList)
5242-
addEUFusionWAInsts(bb, inst);
5243-
}
5224+
for (auto inst : builder->instList)
5225+
addEUFusionWAInsts(inst);
52445226
}
52455227

52465228
splice(bb, instIt, builder->instList, inst->getCISAOff());
@@ -5289,11 +5271,6 @@ void GlobalRA::expandSpillNonStackcall(
52895271
msgDesc, extDesc);
52905272
}
52915273
instIt = bb->insertBefore(instIt, sendInst);
5292-
if (EUFusionWANeeded() &&
5293-
sendInst->isWriteEnableInst())
5294-
{
5295-
addEUFusionWAInsts(bb, sendInst);
5296-
}
52975274
}
52985275
else
52995276
{
@@ -5321,12 +5298,6 @@ void GlobalRA::expandSpillNonStackcall(
53215298

53225299
instIt = bb->insertBefore(instIt, sendInst);
53235300

5324-
if (EUFusionWANeeded() &&
5325-
sendInst->isWriteEnableInst())
5326-
{
5327-
addEUFusionWAInsts(bb, sendInst);
5328-
}
5329-
53305301
numRows -= getPayloadSizeGRF(numRows);
53315302
offset += getPayloadSizeGRF(numRows);
53325303
rowOffset += getPayloadSizeGRF(numRows);
@@ -5426,6 +5397,14 @@ void GlobalRA::expandSpillStackcall(
54265397

54275398
bb->insertBefore(spillIt, spillSends);
54285399

5400+
if (getEUFusionWAInsts().count(inst) > 0)
5401+
{
5402+
removeEUFusionWAInst(inst);
5403+
addEUFusionWAInsts(spillSends);
5404+
if (hdrSetInst)
5405+
addEUFusionWAInsts(hdrSetInst);
5406+
}
5407+
54295408
if (kernel.getOption(vISA_GenerateDebugInfo))
54305409
{
54315410
kernel.getKernelDebugInfo()->updateExpandedIntrinsic(inst->asSpillIntrinsic(), hdrSetInst);
@@ -5529,12 +5508,6 @@ void GlobalRA::expandSpillIntrinsic(G4_BB* bb)
55295508
InstOpt_WriteEnable, msgDesc);
55305509
}
55315510
instIt = bb->insertBefore(instIt, sendInst);
5532-
5533-
if (EUFusionWANeeded() &&
5534-
sendInst->isWriteEnableInst())
5535-
{
5536-
addEUFusionWAInsts(bb, sendInst);
5537-
}
55385511
}
55395512
else
55405513
{
@@ -5563,12 +5536,6 @@ void GlobalRA::expandSpillIntrinsic(G4_BB* bb)
55635536

55645537
instIt = bb->insertBefore(instIt, sendInst);
55655538

5566-
if (EUFusionWANeeded() &&
5567-
sendInst->isWriteEnableInst())
5568-
{
5569-
addEUFusionWAInsts(bb, sendInst);
5570-
}
5571-
55725539
numRows -= getPayloadSizeGRF(numRows);
55735540
offset += getPayloadSizeGRF(numRows);
55745541
rowOffset += getPayloadSizeGRF(numRows);
@@ -5663,6 +5630,14 @@ void GlobalRA::expandFillStackcall(uint32_t numRows, uint32_t offset, short rowO
56635630

56645631
auto fillSends = createOwordFill(respSizeInOwords, fillDst);
56655632

5633+
if (getEUFusionWAInsts().count(inst) > 0)
5634+
{
5635+
removeEUFusionWAInst(inst);
5636+
addEUFusionWAInsts(fillSends);
5637+
if (hdrSetInst)
5638+
addEUFusionWAInsts(hdrSetInst);
5639+
}
5640+
56665641
std::stringstream comments;
56675642
comments << "stack fill: " << resultRgn->getTopDcl()->getName() << " from FP[" << inst->asFillIntrinsic()->getOffset() << "x32]";
56685643
fillSends->addComment(comments.str());

visa/SplitAlignedScalars.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -448,11 +448,6 @@ void SplitAlignedScalars::run()
448448
g4::NOSAT, G4_ExecSize(execSize), dstRgnOfCopy, src, nullptr, InstOpt_WriteEnable);
449449
newInstIt = bb->insertAfter(instIt, newInst);
450450

451-
if (gra.EUFusionWANeeded())
452-
{
453-
gra.addEUFusionWAInsts(bb, newInst);
454-
}
455-
456451
gra.addNoRemat(newInst);
457452

458453
numMovsAdded++;
@@ -507,11 +502,6 @@ void SplitAlignedScalars::run()
507502
inst->setSrc(newAlignedSrc, i);
508503
bb->insertBefore(instIt, copy);
509504

510-
if (gra.EUFusionWANeeded())
511-
{
512-
gra.addEUFusionWAInsts(bb, copy);
513-
}
514-
515505
// this copy shouldnt be rematerialized
516506
gra.addNoRemat(copy);
517507

visa/VarSplit.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,11 +1244,6 @@ void LoopVarSplit::copy(G4_BB* bb, G4_Declare* dst, G4_Declare* src, SplitResult
12441244
break;
12451245
}
12461246
}
1247-
if (inst->isWriteEnableInst() &&
1248-
coloring->getGRA().EUFusionWANeeded())
1249-
{
1250-
coloring->getGRA().addEUFusionWAInsts(bb, inst);
1251-
}
12521247
};
12531248

12541249
// first copy full GRF rows

0 commit comments

Comments
 (0)