Do not run mir opts for targets with convergent ops and add convergent attribute #149637
+57 −5
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
GPU targets have convergent operations that require careful handling
when running optimizations. E.g. they must not be duplicated.
An example convergent operation is a barrier/syncthreads.
We do not want to deal with convergent operations in mir optimizations,
so set the optimization level to 0 and skip all optimizations.
On targets with convergent operations, we need to add the convergent
attribute to all functions that run convergent operations. Following
clang, we can conservatively apply the attribute to all functions when
compiling for such a target and rely on LLVM optimizing away the
attribute in cases where it is not necessary.
The amdgpu and nvptx targets are marked as having convergent operations.
Fixes #137086, see this issue for details.
Tracking issue: #135024
cc @RDambrosio016 @kjetilkjeka for nvptx
cc @ZuseZ4