mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[SVE] Fix casts to <FixedVectorType> in truncateToMinimalBitwidths
Fixes more casts to `<FixedVectorType>` for the cases where the instruction is a Insert/ExtractElementInst. For fixed-width, this part of truncateToMinimalBitWidths is tested by AArch64/type-shrinkage-insertelt.ll. I attempted to write a test case for this part of truncateToMinimalBitWidths which uses scalable vectors, but was unable to add one. The tests in type-shrinkage-insertelt.ll rely on scalarization to create extract element instructions for instance, which is not possible for scalable vectors. Reviewed By: david-arm Differential Revision: https://reviews.llvm.org/D106163
This commit is contained in:
parent
7d6020c9b9
commit
d43867c3c3
@ -4049,19 +4049,17 @@ void InnerLoopVectorizer::truncateToMinimalBitwidths(VPTransformState &State) {
|
||||
// Don't do anything with the operands, just extend the result.
|
||||
continue;
|
||||
} else if (auto *IE = dyn_cast<InsertElementInst>(I)) {
|
||||
auto Elements = cast<FixedVectorType>(IE->getOperand(0)->getType())
|
||||
->getNumElements();
|
||||
auto Elements =
|
||||
cast<VectorType>(IE->getOperand(0)->getType())->getElementCount();
|
||||
auto *O0 = B.CreateZExtOrTrunc(
|
||||
IE->getOperand(0),
|
||||
FixedVectorType::get(ScalarTruncatedTy, Elements));
|
||||
IE->getOperand(0), VectorType::get(ScalarTruncatedTy, Elements));
|
||||
auto *O1 = B.CreateZExtOrTrunc(IE->getOperand(1), ScalarTruncatedTy);
|
||||
NewI = B.CreateInsertElement(O0, O1, IE->getOperand(2));
|
||||
} else if (auto *EE = dyn_cast<ExtractElementInst>(I)) {
|
||||
auto Elements = cast<FixedVectorType>(EE->getOperand(0)->getType())
|
||||
->getNumElements();
|
||||
auto Elements =
|
||||
cast<VectorType>(EE->getOperand(0)->getType())->getElementCount();
|
||||
auto *O0 = B.CreateZExtOrTrunc(
|
||||
EE->getOperand(0),
|
||||
FixedVectorType::get(ScalarTruncatedTy, Elements));
|
||||
EE->getOperand(0), VectorType::get(ScalarTruncatedTy, Elements));
|
||||
NewI = B.CreateExtractElement(O0, EE->getOperand(2));
|
||||
} else {
|
||||
// If we don't know what to do, be conservative and don't do anything.
|
||||
|
Loading…
x
Reference in New Issue
Block a user