[SLP] Avoid getPointerElementType() call

Use the load result type instead of the element type of the load
pointer operand.
This commit is contained in:
Nikita Popov 2021-12-13 15:45:40 +01:00
parent 529e03ea65
commit 432c41ebe9
1 changed files with 3 additions and 3 deletions

View File

@ -5222,15 +5222,15 @@ static bool isLoadCombineCandidateImpl(Value *Root, unsigned NumElts,
FoundOr = true; FoundOr = true;
} }
// Check if the input is an extended load of the required or/shift expression. // Check if the input is an extended load of the required or/shift expression.
Value *LoadPtr; Value *Load;
if ((MustMatchOrInst && !FoundOr) || ZextLoad == Root || if ((MustMatchOrInst && !FoundOr) || ZextLoad == Root ||
!match(ZextLoad, m_ZExt(m_Load(m_Value(LoadPtr))))) !match(ZextLoad, m_ZExt(m_Value(Load))) || !isa<LoadInst>(Load))
return false; return false;
// Require that the total load bit width is a legal integer type. // Require that the total load bit width is a legal integer type.
// For example, <8 x i8> --> i64 is a legal integer on a 64-bit target. // For example, <8 x i8> --> i64 is a legal integer on a 64-bit target.
// But <16 x i8> --> i128 is not, so the backend probably can't reduce it. // But <16 x i8> --> i128 is not, so the backend probably can't reduce it.
Type *SrcTy = LoadPtr->getType()->getPointerElementType(); Type *SrcTy = Load->getType();
unsigned LoadBitWidth = SrcTy->getIntegerBitWidth() * NumElts; unsigned LoadBitWidth = SrcTy->getIntegerBitWidth() * NumElts;
if (!TTI->isTypeLegal(IntegerType::get(Root->getContext(), LoadBitWidth))) if (!TTI->isTypeLegal(IntegerType::get(Root->getContext(), LoadBitWidth)))
return false; return false;