[PATCH] D118102: [LoopInterchange] Prevent interchange with unsafe control-flow divergence inside inner loops (PR48057)
Michael Kruse via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 8 14:38:39 PST 2022
Meinersbur added a comment.
In D118102#3305242 <https://reviews.llvm.org/D118102#3305242>, @congzhe wrote:
> I've updated the check so I could detect the output dependency now (patch not updated yet).
I don't see the update yet.
> The problem in this bug is the "conditional or partial write" you mentioned, in other words, output dependency under control-flow divergence. I can add code to detect "output dependency under control-flow divergence" in loop interchange, or in DependenceAnalysis.cpp.
The problem is more complex than that, it's not just control-flow divergence (by which I think you mean the write being conditional; if conditional on a loop-invariant condition it could be solved with a loop unswitch), but any kind of "non-kill" memory write (e.g. partial overwrite of only some of the bytes, unpredictable/non-constant indices or base addresses, reuse of previous values in eg. an overlapping memmove call, etc.) and potential reads before the kill instruction. If the address can be accessed by multiple instructions, this is an NP-complete problem.
You are free to tackle that problem maybe just for special cases, but I suggest to try that in a separate patch.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D118102/new/
https://reviews.llvm.org/D118102
More information about the llvm-commits
mailing list