diff options
author | Craig Topper <craig.topper@sifive.com> | 2025-06-10 15:11:44 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-10 15:11:44 -0700 |
commit | 2f9dfdfb35bdb10334b09476a47dc1d93beea96c (patch) | |
tree | d1d730bcedecd2e18ba7251880e8aa40a88aa7db /llvm/lib/IR/Instructions.cpp | |
parent | 54e72d15bc09e9e6464792711b8c475f92a759e2 (diff) | |
download | llvm-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.cpp | 19 |
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) |