From 295e8b4e1223569b7760a38a6a482cc0b63f389e Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Sat, 24 Feb 2018 20:59:14 +0000 Subject: [PATCH] [TargetLowering] SimplifyDemandedVectorElts - pass demanded elts through ADD/SUB ops llvm-svn: 326044 --- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp | 13 +++++++++++++ llvm/test/CodeGen/X86/widen_conv-1.ll | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp index 36cb2cd..cb737dc 100644 --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -1536,6 +1536,19 @@ bool TargetLowering::SimplifyDemandedVectorElts( } break; } + case ISD::ADD: + case ISD::SUB: { + APInt SrcUndef, SrcZero; + if (SimplifyDemandedVectorElts(Op.getOperand(1), DemandedElts, SrcUndef, + SrcZero, TLO, Depth + 1)) + return true; + if (SimplifyDemandedVectorElts(Op.getOperand(0), DemandedElts, KnownUndef, + KnownZero, TLO, Depth + 1)) + return true; + KnownZero &= SrcZero; + KnownUndef &= SrcUndef; + break; + } case ISD::TRUNCATE: if (SimplifyDemandedVectorElts(Op.getOperand(0), DemandedElts, KnownUndef, KnownZero, TLO, Depth + 1)) diff --git a/llvm/test/CodeGen/X86/widen_conv-1.ll b/llvm/test/CodeGen/X86/widen_conv-1.ll index 7e0f999..123e443 100644 --- a/llvm/test/CodeGen/X86/widen_conv-1.ll +++ b/llvm/test/CodeGen/X86/widen_conv-1.ll @@ -8,7 +8,8 @@ define void @convert_v2i64_to_v2i32(<2 x i32>* %dst.addr, <2 x i64> %src) nounwi ; X86-LABEL: convert_v2i64_to_v2i32: ; X86: # %bb.0: # %entry ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax -; X86-NEXT: paddd {{\.LCPI.*}}, %xmm0 +; X86-NEXT: pcmpeqd %xmm1, %xmm1 +; X86-NEXT: psubd %xmm1, %xmm0 ; X86-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] ; X86-NEXT: movq %xmm0, (%eax) ; X86-NEXT: retl -- 2.7.4