[SLP] Avoid getPointerElementType() call
Use the load result type instead of the element type of the load pointer operand.
This commit is contained in:
parent
529e03ea65
commit
432c41ebe9
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue