Skip to content

Commit 2b5222b

Browse files
authored
[X86] SimplifyDemandedVectorEltsForTargetNode - add X86ISD::MOVDDUP handling (#140237)
Reduce YMM MOVDDUP node to XMM if the upper elements are not demanded Noticed while working on #140234
1 parent e1ca2c5 commit 2b5222b

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -44013,6 +44013,8 @@ bool X86TargetLowering::SimplifyDemandedVectorEltsForTargetNode(
4401344013
case X86ISD::VZEXT_MOVL:
4401444014
// Variable blend.
4401544015
case X86ISD::BLENDV:
44016+
// Target unary shuffles:
44017+
case X86ISD::MOVDDUP:
4401644018
// Target unary shuffles by immediate:
4401744019
case X86ISD::PSHUFD:
4401844020
case X86ISD::PSHUFLW:

llvm/test/CodeGen/X86/vector-shuffle-256-v4.ll

+1-2
Original file line numberDiff line numberDiff line change
@@ -861,8 +861,7 @@ define <4 x double> @shuffle_v4f64_2345_0567_select(<4 x double> %vec1, <4 x dou
861861
define <4 x double> @shuffle_v4f64_1436_split_load(ptr %px, ptr %py) {
862862
; AVX1-LABEL: shuffle_v4f64_1436_split_load:
863863
; AVX1: # %bb.0:
864-
; AVX1-NEXT: vmovapd (%rsi), %xmm0
865-
; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
864+
; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0]
866865
; AVX1-NEXT: vmovupd (%rdi), %ymm1
867866
; AVX1-NEXT: vinsertf128 $1, 16(%rsi), %ymm0, %ymm0
868867
; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[2]

0 commit comments

Comments
 (0)