[Inliner] Handle convergence control when inlining a call
When a convergencectrl token is passed to a convergent call, and the called function in turn calls the entry intrinsic, the intrinsic is now now replaced with the convergencectrl token. The spec requires the following check: A call from function F to function G can be inlined only if: - at least one of F or G does not make any convergent calls, or, - both F and G make the same kind of convergent calls: controlled or uncontrolled. But this change does not implement this complete check. A proper implemenation require a whole new analysis that identifies convergence in every function. For now, we skip that and just do a cursory check for the entry intrinsic. The underlying assumption is that in a compiler flow that fully implements convergence control tokens, there is no mixing of controlled and uncontrolled convergent operations in the whole program. This is a reboot of the original change D85606 by Nicolai Haehnle <nicolai.haehnle@amd.com>. Reviewed By: arsenm, nhaehnle Differential Revision: https://reviews.llvm.org/D152431
Loading
Please sign in to comment