[PATCH] D103038: [InstCombine] canonicalize cast before unary shuffle

Sanjay Patel via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon May 24 11:51:30 PDT 2021


spatel created this revision.
spatel added reviewers: lebedev.ri, fhahn, RKSimon, anton-afanasyev.
Herald added subscribers: pengfei, hiraditya, mcrosier.
spatel requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

We could go either direction on this transform. VectorCombine already goes this way for bitcasts (and handles more complicated cases using the cost model), so I'm proposing cast-first.

Deferring completely to VectorCombine is another possibility. But the backend should be able to invert this easily when the vectors have the same shape, so it doesn't seem like a transform that we need to avoid.

The motivating example from https://bugs.llvm.org/PR49081 has an int-to-float sandwiched between 2 shuffles, and the backend currently does not reduce that, so on x86, we get something like:
	pshufd	$249, %xmm0, %xmm0              ## xmm0 = xmm0[1,2,3,3]
	cvtdq2ps	%xmm0, %xmm0
	shufps	$144, %xmm0, %xmm0              ## xmm0 = xmm0[0,0,1,2]
...instead of just a single conversion instruction.


https://reviews.llvm.org/D103038

Files:
  llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
  llvm/test/Transforms/InstCombine/X86/x86-f16c-inseltpoison.ll
  llvm/test/Transforms/InstCombine/X86/x86-f16c.ll
  llvm/test/Transforms/InstCombine/shuffle-cast-dist.ll
  llvm/test/Transforms/InstCombine/shufflevec-bitcast-inseltpoison.ll
  llvm/test/Transforms/InstCombine/shufflevec-bitcast.ll
  llvm/test/Transforms/InstCombine/vector-casts.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D103038.347462.patch
Type: text/x-patch
Size: 11320 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210524/61083857/attachment.bin>


More information about the llvm-commits mailing list