@@ -50,6 +50,7 @@ IGC_INITIALIZE_PASS_DEPENDENCY(CodeGenPatternMatch)
50
50
IGC_INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
51
51
IGC_INITIALIZE_PASS_DEPENDENCY(DeSSA)
52
52
IGC_INITIALIZE_PASS_DEPENDENCY(MetaDataUtilsWrapper)
53
+ IGC_INITIALIZE_PASS_DEPENDENCY(ResourceLoopAnalysis)
53
54
IGC_INITIALIZE_PASS_END(CoalescingEngine, PASS_FLAG, PASS_DESCRIPTION, PASS_CFG_ONLY, PASS_ANALYSIS)
54
55
55
56
namespace IGC
@@ -70,6 +71,7 @@ namespace IGC
70
71
AU.addRequired <DeSSA>();
71
72
AU.addRequired <MetaDataUtilsWrapper>();
72
73
AU.addRequired <CodeGenContextWrapper>();
74
+ AU.addRequired <ResourceLoopAnalysis>();
73
75
}
74
76
75
77
void CoalescingEngine::CCTuple::print (raw_ostream& OS, const Module*) const
@@ -127,6 +129,7 @@ namespace IGC
127
129
WIA = &getAnalysis<WIAnalysis>();
128
130
CG = &getAnalysis<CodeGenPatternMatch>();
129
131
LV = &getAnalysis<LiveVarsAnalysis>().getLiveVars ();
132
+ RLA = &getAnalysis<ResourceLoopAnalysis>();
130
133
if (IGC_IS_FLAG_ENABLED (EnableDeSSA)) {
131
134
m_DeSSA = &getAnalysis<DeSSA>();
132
135
}
@@ -239,7 +242,19 @@ namespace IGC
239
242
}
240
243
241
244
}
242
-
245
+ #if 0
246
+ // turn off coalescing when inst is inside a fused resource-loop
247
+ // feels like this approach may not be strong enough.
248
+ // So opt to the solution of disabling coalescing in whole BB
249
+ auto loopMarker =
250
+ RLA->GetResourceLoopMarker(tupleGeneratingInstruction);
251
+ if ((loopMarker & ResourceLoopAnalysis::MarkResourceLoopInside) ||
252
+ ((loopMarker & ResourceLoopAnalysis::MarkResourceLoopStart) &&
253
+ !(loopMarker & ResourceLoopAnalysis::MarkResourceLoopEnd)))
254
+ {
255
+ return;
256
+ }
257
+ #endif
243
258
IGC_ASSERT (numOperands >= 2 );
244
259
245
260
// No result, but has side effects of updating the split mapping.
@@ -1422,6 +1437,17 @@ namespace IGC
1422
1437
// Loop through instructions top to bottom
1423
1438
for (I = instructionList.begin (), E = instructionList.end (); I != E; ++I) {
1424
1439
llvm::Instruction& inst = (*I);
1440
+ auto loopMarker =
1441
+ RLA->GetResourceLoopMarker (&inst);
1442
+ // turn off coalescing in this block when there is a fused resource-loop
1443
+ if ((loopMarker & ResourceLoopAnalysis::MarkResourceLoopInside) ||
1444
+ ((loopMarker & ResourceLoopAnalysis::MarkResourceLoopStart) &&
1445
+ !(loopMarker & ResourceLoopAnalysis::MarkResourceLoopEnd)))
1446
+ {
1447
+ BBProcessingDefs[bb].clear ();
1448
+ return ;
1449
+ }
1450
+
1425
1451
visit (inst);
1426
1452
}
1427
1453
}
0 commit comments