[PPC] Fix PR24216: Don't generate splat for misaligned shuffle mask
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Wed, 29 Jul 2015 14:31:57 +0000 (14:31 +0000)
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>
Wed, 29 Jul 2015 14:31:57 +0000 (14:31 +0000)
commit42ddd71120e445748a8d992e12297560590b3ca4
treec717d9c23359ab5809316b934ccad037c08e608f
parent085da7ecae9f00338f95bd60f38be5f3de58733a
[PPC] Fix PR24216: Don't generate splat for misaligned shuffle mask

Given certain shuffle-vector masks, LLVM emits splat instructions
which splat the wrong bytes from the source register.  The issue is
that the function PPC::isSplatShuffleMask() in PPCISelLowering.cpp
does not ensure that the splat pattern found is requesting bytes that
are aligned on an EltSize boundary.  This patch detects this situation
as not a valid splat mask, resulting in a permute being generated
instead of a splat.

Patch and test case by Tyler Kenney, cleaned up a bit by me.

This is a simple bug fix that would be good to incorporate into 3.7.

llvm-svn: 243519
llvm/lib/Target/PowerPC/PPCISelLowering.cpp
llvm/test/CodeGen/PowerPC/pr24216.ll [new file with mode: 0644]