From 821a51a9cacfac7da8b34ccc0498d316471f1dbc Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Mon, 25 Jan 2021 13:45:19 +0000 Subject: [PATCH] [X86][AVX] combineX86ShuffleChainWithExtract - widen to at least original root size. NFCI. We're relying on the source inputs for shuffle combining having already been widened to the root size (otherwise the offset logic falls over) - we're going to be supporting different sized shuffle inputs soon, so we need to explicitly make the minimum widened width the original root size. --- llvm/lib/Target/X86/X86ISelLowering.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index d2a07e7364dd1..ae73a32a5d9ac 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -35997,12 +35997,16 @@ static SDValue combineX86ShuffleChainWithExtract( if (NumInputs == 0) return SDValue(); + EVT RootVT = Root.getValueType(); + unsigned RootSizeInBits = RootVT.getSizeInBits(); + assert((RootSizeInBits % NumMaskElts) == 0 && "Unexpected root shuffle mask"); + SmallVector WideInputs(Inputs.begin(), Inputs.end()); SmallVector Offsets(NumInputs, 0); // Peek through subvectors. // TODO: Support inter-mixed EXTRACT_SUBVECTORs + BITCASTs? - unsigned WideSizeInBits = WideInputs[0].getValueSizeInBits(); + unsigned WideSizeInBits = RootSizeInBits; for (unsigned i = 0; i != NumInputs; ++i) { SDValue &Src = WideInputs[i]; unsigned &Offset = Offsets[i]; @@ -36025,8 +36029,6 @@ static SDValue combineX86ShuffleChainWithExtract( if (llvm::all_of(Offsets, [](unsigned Offset) { return Offset == 0; })) return SDValue(); - EVT RootVT = Root.getValueType(); - unsigned RootSizeInBits = RootVT.getSizeInBits(); unsigned Scale = WideSizeInBits / RootSizeInBits; assert((WideSizeInBits % RootSizeInBits) == 0 && "Unexpected subvector extraction");