mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-06 12:04:48 +00:00
Turn shuffles into unpacks for VT == MVT::v2i64 and MVT::v2f64
too. Patch by Jeff Muizelaar. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135789 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6e5fda213f
commit
23e31011fb
@ -5837,11 +5837,9 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const {
|
||||
// NOTE: isPSHUFDMask can also match both masks below (unpckl_undef and
|
||||
// unpckh_undef). Only use pshufd if speed is more important than size.
|
||||
if (OptForSize && X86::isUNPCKL_v_undef_Mask(SVOp))
|
||||
if (VT != MVT::v2i64 && VT != MVT::v2f64)
|
||||
return getTargetShuffleNode(getUNPCKLOpcode(VT, getSubtarget()), dl, VT, V1, V1, DAG);
|
||||
return getTargetShuffleNode(getUNPCKLOpcode(VT, getSubtarget()), dl, VT, V1, V1, DAG);
|
||||
if (OptForSize && X86::isUNPCKH_v_undef_Mask(SVOp))
|
||||
if (VT != MVT::v2i64 && VT != MVT::v2f64)
|
||||
return getTargetShuffleNode(getUNPCKHOpcode(VT), dl, VT, V1, V1, DAG);
|
||||
return getTargetShuffleNode(getUNPCKHOpcode(VT), dl, VT, V1, V1, DAG);
|
||||
|
||||
if (X86::isMOVDDUPMask(SVOp) && HasSSE3 && V2IsUndef &&
|
||||
RelaxedMayFoldVectorLoad(V1))
|
||||
@ -6038,12 +6036,10 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const {
|
||||
}
|
||||
|
||||
if (X86::isUNPCKL_v_undef_Mask(SVOp))
|
||||
if (VT != MVT::v2i64 && VT != MVT::v2f64)
|
||||
return getTargetShuffleNode(getUNPCKLOpcode(VT, getSubtarget()),
|
||||
dl, VT, V1, V1, DAG);
|
||||
return getTargetShuffleNode(getUNPCKLOpcode(VT, getSubtarget()),
|
||||
dl, VT, V1, V1, DAG);
|
||||
if (X86::isUNPCKH_v_undef_Mask(SVOp))
|
||||
if (VT != MVT::v2i64 && VT != MVT::v2f64)
|
||||
return getTargetShuffleNode(getUNPCKHOpcode(VT), dl, VT, V1, V1, DAG);
|
||||
return getTargetShuffleNode(getUNPCKHOpcode(VT), dl, VT, V1, V1, DAG);
|
||||
|
||||
// Handle v8i16 specifically since SSE can do byte extraction and insertion.
|
||||
if (VT == MVT::v8i16) {
|
||||
|
26
test/CodeGen/X86/vec_shuffle-38.ll
Normal file
26
test/CodeGen/X86/vec_shuffle-38.ll
Normal file
@ -0,0 +1,26 @@
|
||||
; RUN: llc < %s -march=x86-64 | FileCheck %s
|
||||
|
||||
define <2 x double> @ld(<2 x double> %p) nounwind optsize ssp {
|
||||
; CHECK: unpcklpd
|
||||
%shuffle = shufflevector <2 x double> %p, <2 x double> undef, <2 x i32> zeroinitializer
|
||||
ret <2 x double> %shuffle
|
||||
}
|
||||
|
||||
define <2 x double> @hd(<2 x double> %p) nounwind optsize ssp {
|
||||
; CHECK: unpckhpd
|
||||
%shuffle = shufflevector <2 x double> %p, <2 x double> undef, <2 x i32> <i32 1, i32 1>
|
||||
ret <2 x double> %shuffle
|
||||
}
|
||||
|
||||
define <2 x i64> @ldi(<2 x i64> %p) nounwind optsize ssp {
|
||||
; CHECK: punpcklqdq
|
||||
%shuffle = shufflevector <2 x i64> %p, <2 x i64> undef, <2 x i32> zeroinitializer
|
||||
ret <2 x i64> %shuffle
|
||||
}
|
||||
|
||||
define <2 x i64> @hdi(<2 x i64> %p) nounwind optsize ssp {
|
||||
; CHECK: punpckhqdq
|
||||
%shuffle = shufflevector <2 x i64> %p, <2 x i64> undef, <2 x i32> <i32 1, i32 1>
|
||||
ret <2 x i64> %shuffle
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user