mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-19 06:31:18 +00:00
getSplatIndex assumes that the first element of the mask contains the splat index
which is not always true if the mask contains undefs. Modified it to return the first non undef value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96621 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
39a4bb3527
commit
1c40e188c5
@ -1764,7 +1764,12 @@ public:
|
||||
bool isSplat() const { return isSplatMask(Mask, getValueType(0)); }
|
||||
int getSplatIndex() const {
|
||||
assert(isSplat() && "Cannot get splat index for non-splat!");
|
||||
return Mask[0];
|
||||
EVT VT = getValueType(0);
|
||||
for (unsigned i = 0, e = VT.getVectorNumElements(); i != e; ++i) {
|
||||
if (Mask[i] != -1)
|
||||
return Mask[i];
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
static bool isSplatMask(const int *Mask, EVT VT);
|
||||
|
||||
|
@ -1,9 +1,16 @@
|
||||
; RUN: llc < %s -march=x86 -mattr=sse41 -o %t
|
||||
; RUN: grep pshufb %t | count 1
|
||||
|
||||
; RUN: llc < %s -march=x86-64 -mattr=sse41 | FileCheck %s
|
||||
|
||||
define <8 x i16> @shuf6(<8 x i16> %T0, <8 x i16> %T1) nounwind readnone {
|
||||
; CHECK: pshufb
|
||||
; CHECK-NOT: pshufb
|
||||
; CHECK: ret
|
||||
entry:
|
||||
%tmp9 = shufflevector <8 x i16> %T0, <8 x i16> %T1, <8 x i32> < i32 3, i32 2, i32 0, i32 2, i32 1, i32 5, i32 6 , i32 undef >
|
||||
ret <8 x i16> %tmp9
|
||||
%tmp9 = shufflevector <8 x i16> %T0, <8 x i16> %T1, <8 x i32> < i32 3, i32 2, i32 0, i32 2, i32 1, i32 5, i32 6 , i32 undef >
|
||||
ret <8 x i16> %tmp9
|
||||
}
|
||||
|
||||
define <8 x i16> @shuf7(<8 x i16> %t0) {
|
||||
; CHECK: pshufd
|
||||
%tmp10 = shufflevector <8 x i16> %t0, <8 x i16> undef, <8 x i32> < i32 undef, i32 2, i32 2, i32 2, i32 2, i32 2, i32 undef, i32 undef >
|
||||
ret <8 x i16> %tmp10
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user