[PATCH] D149548: [IR] Update to use new shufflevector semantics
Ulrich Weigand via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 12 05:34:32 PDT 2023
uweigand added a comment.
So the semantics of the `vec_promote(a, b)` intrinsic is defined as:
> Returns a vector with a in element position b. The result is a vector with a in element position b. [...] The other elements of the vector are undefined.
This is currently implemented by using `insertvector` to place `a` at position `b` into a source vector that is `undef`. The effect should be that when using element `b` of that vector, we are guaranteed to get `a`, while using any other element is undefined behavior (just like accessing an uninitialized variable).
To be honest, I'm not sure how exactly the LLVM IR semantics changes here when using a `poison` source vector instead of `undef`. I seem to recall that `poison` propagates over operations - is it true that the result of `insertvector` on a `poison` vector is itself `poison`? If so, then this change would break semantics. However, if the result is a vector with `a` in element `b`, and `poison` only in the other elements, then I guess this would still preserve the expected semantics.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D149548/new/
https://reviews.llvm.org/D149548
More information about the cfe-commits
mailing list