[PATCH] D65447: GlobalISel: Lower scalarizing unmerge of a vector to shifts

Matt Arsenault via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 30 19:17:03 PDT 2019


arsenm added a comment.

In D65447#1607651 <https://reviews.llvm.org/D65447#1607651>, @dsanders wrote:

> This makes sense to me. LGTM
>
> > I also have a growing feeling that we're missing a bitcast legalize action.
>
> I assume the definition of that would be something like:
>
>   %1:(x) = OP %0:(x)
>
> to
>
>   %2:(y) = G_BITCAST %0:(x)
>   %3:(y) = NEW_OP %2:(y)
>   %1:(x) = G_BITCAST %3:(y)
>
> and is somewhat similar in principle to lower but sidesteps instead of simplifying, or alternatively is somewhat like libcall but injects code inline instead of calling.
>
> I can't think of a place I'd want to use it over one of the current actions but it sounds like it ought to be useful. Maybe for doing pointer operations using scalar operations? Do you have anything specific in mind?


I’m specifically thinking of load and store. I want to treat these as blindly loading bits, and never splitting them up to get legal types. I can get pretty far treating all loads as legal and unmerge should naturally do the right thing, but it’s awkward for store since it implies a lot of strange truncates will need to be handled


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

https://reviews.llvm.org/D65447





More information about the llvm-commits mailing list