aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Instructions.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@sifive.com>2025-06-10 15:11:44 -0700
committerGitHub <noreply@github.com>2025-06-10 15:11:44 -0700
commit2f9dfdfb35bdb10334b09476a47dc1d93beea96c (patch)
treed1d730bcedecd2e18ba7251880e8aa40a88aa7db /llvm/lib/IR/Instructions.cpp
parent54e72d15bc09e9e6464792711b8c475f92a759e2 (diff)
downloadllvm-2f9dfdfb35bdb10334b09476a47dc1d93beea96c.zip
llvm-2f9dfdfb35bdb10334b09476a47dc1d93beea96c.tar.gz
llvm-2f9dfdfb35bdb10334b09476a47dc1d93beea96c.tar.bz2
[IR] Simplify scalable vector handling in ShuffleVectorInst::getShuffleMask. NFC (#143596)
Combine the scalable vector UndefValue check with the earlier ConstantAggregateZero handling for fixed and scalable vectors. Assert that the rest of the code is only reached for fixed vectors. Use append instead of resize since we know the size is increasing.
Diffstat (limited to 'llvm/lib/IR/Instructions.cpp')
-rw-r--r--llvm/lib/IR/Instructions.cpp19
1 files changed, 7 insertions, 12 deletions
diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp
index b299696..2d89ec1 100644
--- a/llvm/lib/IR/Instructions.cpp
+++ b/llvm/lib/IR/Instructions.cpp
@@ -1854,23 +1854,18 @@ void ShuffleVectorInst::getShuffleMask(const Constant *Mask,
SmallVectorImpl<int> &Result) {
ElementCount EC = cast<VectorType>(Mask->getType())->getElementCount();
- if (isa<ConstantAggregateZero>(Mask)) {
- Result.resize(EC.getKnownMinValue(), 0);
+ if (isa<ConstantAggregateZero>(Mask) || isa<UndefValue>(Mask)) {
+ int MaskVal = isa<UndefValue>(Mask) ? -1 : 0;
+ Result.append(EC.getKnownMinValue(), MaskVal);
return;
}
- Result.reserve(EC.getKnownMinValue());
+ assert(!EC.isScalable() &&
+ "Scalable vector shuffle mask must be undef or zeroinitializer");
- if (EC.isScalable()) {
- assert((isa<ConstantAggregateZero>(Mask) || isa<UndefValue>(Mask)) &&
- "Scalable vector shuffle mask must be undef or zeroinitializer");
- int MaskVal = isa<UndefValue>(Mask) ? -1 : 0;
- for (unsigned I = 0; I < EC.getKnownMinValue(); ++I)
- Result.emplace_back(MaskVal);
- return;
- }
+ unsigned NumElts = EC.getFixedValue();
- unsigned NumElts = EC.getKnownMinValue();
+ Result.reserve(NumElts);
if (auto *CDS = dyn_cast<ConstantDataSequential>(Mask)) {
for (unsigned i = 0; i != NumElts; ++i)