From 1a529f58f959255d954b48e9ee65db2dd3225a10 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Fri, 1 Feb 2019 15:31:01 +0000 Subject: [X86][AVX] Combine INSERT_SUBVECTOR(SRC0, BITCAST(SHUFFLE(EXTRACT_SUBVECTOR(SRC1))) Enable peeking through one use bitcasts to the subvector shuffle. This still depends on the subvector being the same scalar-size but D57514 has already helped with the more tricky patterns llvm-svn: 352879 --- llvm/lib/Target/X86/X86ISelLowering.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp') diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index cc00970569e..36d3fe1dd60 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -6592,7 +6592,6 @@ static bool getFauxShuffleMask(SDValue N, SmallVectorImpl &Mask, case ISD::INSERT_SUBVECTOR: { // Handle INSERT_SUBVECTOR(SRC0, SHUFFLE(EXTRACT_SUBVECTOR(SRC1)) where // SRC0/SRC1 are both of the same valuetype VT. - // TODO - add peekThroughOneUseBitcasts support. SDValue Src = N.getOperand(0); SDValue Sub = N.getOperand(1); EVT SubVT = Sub.getValueType(); @@ -6602,8 +6601,10 @@ static bool getFauxShuffleMask(SDValue N, SmallVectorImpl &Mask, return false; SmallVector SubMask; SmallVector SubInputs; - if (!resolveTargetShuffleInputs(Sub, SubInputs, SubMask, DAG) || - SubMask.size() != NumSubElts) + if (!resolveTargetShuffleInputs(peekThroughOneUseBitcasts(Sub), SubInputs, + SubMask, DAG)) + return false; + if (SubMask.size() != NumSubElts) return false; Ops.push_back(Src); for (SDValue &SubInput : SubInputs) { -- cgit v1.2.3