[PATCH] D124111: [AMDGPU]: Fix failing assertion in SIMachineScheduler
Jay Foad via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 21 02:12:53 PDT 2022
foad accepted this revision.
foad added inline comments.
================
Comment at: llvm/lib/Target/AMDGPU/SIMachineScheduler.cpp:1141
-#endif
- SubGraph = DAG->GetTopo()->GetSubGraph(DAG->SUnits[j], SU,
- HasSubGraph);
----------------
jsilvanus wrote:
> foad wrote:
> > Can you confirm that these subgraph-based checks are no longer required? Is that because your new check is stronger?
> **Regarding the assertion check: **The subgraph-based assertion is indeed dropped in the new version and no longer explicitly checked.
> But it is implied by the topological order, and actually the new implementation no longer depends on the topological order to be correct, because we just check for the existence
> of some edge from an export to a non-export.
>
> **Regarding the second subgraph-based check not guarded by `NDEBUG`**: Yes and yes.
>
> The old test determines the set of instructions reachable from `DAG->SUnits[j]` from which `SU` is reachable, using the `GetSubGraph` call,
> and aborts if any of them is a non-export.
> The new test checks if there is any non-export directly reachable from `SU`.
>
> Because the new test goes the other direction, the test is incomparable for a particular `SU` object. But when considering the whole for loop,
> the new test is stronger: If there is any pair of `DAG->SUnits[j]` and `SU` for which the old check aborts, then there is a path from an export to an export
> that visits a non-export. On that path, there must be an edge from an export to a non-export, and for that edge the new test will abort.
>
Thanks for explaining!
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D124111/new/
https://reviews.llvm.org/D124111
More information about the llvm-commits
mailing list