[PATCH] D73030: GlobalISel: Assume G_INTRINSIC* are convergent

Matt Arsenault via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 4 12:51:24 PST 2020


arsenm added a comment.

In D73030#1857708 <https://reviews.llvm.org/D73030#1857708>, @aemerson wrote:

> I'm not 100% sure on what the convergent attribute means here, but assuming that it means it's not allowed to sink instructions into control flow etc, I don't think we should be marking these generic intrinsic ops with it. On arm64 we can use G_INTRINSIC to represent user-written intrinsic instructions which have no problem with being made control dependent.


The intrinsic opcodes need to conservatively assume it could call an intrinsic with any property. These can be used to call an intrinsic or call site marked as convergent, so they have to be convergent to be conservatively correct. Since nothing in the globalisel pipeline currently does any control flow sinking or anything, it's not worth the hassle of optimizing this by adding an additional 2 G_INTRINSIC* variants. Until that comes up, I'd rather leave this in the safe state so somebody doesn't silently break convergent handling at some point in the future.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73030/new/

https://reviews.llvm.org/D73030





More information about the llvm-commits mailing list