[llvm] [AMDGPU] AMDGPUIGroupLP: Avoid repeating reachability checks in greedy algorithm (PR #182463)
Frederik Harwath via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 2 01:21:57 PST 2026
================
@@ -729,21 +733,38 @@ void PipelineSolver::greedyFind(
LLVM_DEBUG(dbgs() << "SGID # " << CandSGID << " has conflicting rule\n");
continue;
}
- TempCost = addEdges(SyncPipeline, CurrSU.first, CandSGID, AddedEdges);
+
+ std::list<std::pair<SUnit *, SUnit *>> TempEdges;
+ TempCost = addEdges(SyncPipeline, CurrSU.first, CandSGID, TempEdges);
LLVM_DEBUG(dbgs() << "Cost of Group " << TempCost << "\n");
+
if (TempCost < BestNodeCost || BestNodeCost == -1) {
+ BestEdges = TempEdges;
BestGroup = Match;
BestNodeCost = TempCost;
BestGroupID = CandSGID;
+
+ if (BestNodeCost == 0)
+ break;
+
+ removeEdges(BestEdges);
}
- removeEdges(AddedEdges);
- if (BestNodeCost == 0)
- break;
+
+ removeEdges(TempEdges);
}
if (BestGroupID != -1) {
BestGroup->add(*CurrSU.first);
- addEdges(SyncPipeline, CurrSU.first, BestGroupID, AddedEdges);
+ if (AddedEdges.empty())
+ AddedEdges = BestEdges;
+ else
----------------
frederik-h wrote:
Yes, `llvm/test/CodeGen/AMDGPU/sched-group-barrier-pipeline-solver.mir` does. A - perhaps somewhat degenerated but valid - reduced version:
```
---
name: sched_group_barrier_2_VMEM_10_ALU_5_MFMA_2_VMEM_WRITE
tracksRegLiveness: true
body: |
bb.0:
%17:sreg_64_xexec_xnull = IMPLICIT_DEF
%18:vgpr_32 = IMPLICIT_DEF
GLOBAL_STORE_DWORD_SADDR undef %18, undef %18, undef %17, 512, 0, implicit $exec
SCHED_GROUP_BARRIER 16, 2, 0
S_ENDPGM 0
...
```
https://github.com/llvm/llvm-project/pull/182463
More information about the llvm-commits
mailing list