ro-i wrote:

@ruiling You can find most of the rationale behind this in 
https://discourse.llvm.org/t/rfc-add-callbr-intrinsic-support/86087 and the PR 
that is adding support for callbr+intrinsics: 
https://github.com/llvm/llvm-project/pull/133907.
In short:
> do you plan to support arbitrary form of callbr, or only very limited form?

very limited, only for selected intrinsics, such as llvm.amdgcn.kill

> What is the expected use case?

Being able to explicitly show the semantics of control-flow manipulating 
intrinsics, such as kill, which either continues execution without doing 
anything or basically directly leads to unreachable (since IR is representing a 
single lane).

> How would callbr be lowered in the backend?

Not at all. It only serves as an improvement of the IR handling. For the 
resulting assembly, there mostly won't/shouldn't be any differences. At least 
for my implementation of callbr+amdgcn.kill, the assembly stayed the same. See 
https://github.com/llvm/llvm-project/pull/133907/files#diff-9a591a6648d6c195914e07f22aae2329611e8c7de5ca5968412c4341e62d8d23
 (this link will probably become invalid if I have to rebase that PR again).

> (I mean how the wave-execution would be look like if different threads went 
> to different labels?)

see above. kill and callbr+kill are no different in that the thread is either 
continuing execution or become dead.

https://github.com/llvm/llvm-project/pull/152161
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to