OSDN Git Service

[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)
commite541870740404ca1cff9e1a73987bc17169aa7ef
treeffe1b53a8fb19f46e785e28d784c9f767e7415bd
parentb8b226b5173011330b41a3d42d4d8bc0425e9f01
[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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243519 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCISelLowering.cpp
test/CodeGen/PowerPC/pr24216.ll [new file with mode: 0644]