From d8d69df1a925de8b68831900601ba102c1d1071f Mon Sep 17 00:00:00 2001 From: Anatoly Myachev Date: Mon, 11 Nov 2024 22:49:16 +0100 Subject: [PATCH 1/2] Fix coverity issues Signed-off-by: Anatoly Myachev --- lib/Analysis/Allocation.cpp | 8 +++---- lib/Analysis/AxisInfo.cpp | 43 ++++++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/lib/Analysis/Allocation.cpp b/lib/Analysis/Allocation.cpp index 76f806f0aee1..a88a394f0ce6 100644 --- a/lib/Analysis/Allocation.cpp +++ b/lib/Analysis/Allocation.cpp @@ -84,8 +84,8 @@ ScratchConfig getScratchConfigForCvt(RankedTensorType srcTy, assert(cvtNeedsSharedMemory(srcTy, dstTy)); - auto inOrd = gpu::getOrder(srcLayout); - auto outOrd = gpu::getOrder(dstLayout); + const auto &inOrd = gpu::getOrder(srcLayout); + const auto &outOrd = gpu::getOrder(dstLayout); scratchConfig.order = outOrd; unsigned srcContigPerThread = @@ -304,7 +304,7 @@ class AllocationAnalysis { /// arguments are involved. void resolveAliasBufferLiveness( function_ref(Value value)> getLiveness) { - for (auto aliasBufferIter : allocation->aliasBuffer) { + for (const auto &aliasBufferIter : allocation->aliasBuffer) { auto value = aliasBufferIter.first; auto buffers = aliasBufferIter.second; auto range = getLiveness(value); @@ -444,7 +444,7 @@ class AllocationAnalysis { std::find_if(xBuffers.begin(), xBuffers.end(), [&](auto *buffer) { auto xRange = bufferRange[buffer]; bool res = xRange.intersects(range); - for (auto val : tripleMap) + for (const auto &val : tripleMap) res = res && !val.second.intersects(xRange); // only one buffer intersect return res; diff --git a/lib/Analysis/AxisInfo.cpp b/lib/Analysis/AxisInfo.cpp index f0c5ae3167ec..91051327c6ba 100644 --- a/lib/Analysis/AxisInfo.cpp +++ b/lib/Analysis/AxisInfo.cpp @@ -121,7 +121,8 @@ class BinaryOpVisitorImpl : public AxisInfoVisitorImpl { divisibility.push_back(getDivisibility(op, lhsInfo, rhsInfo, d)); } } - return AxisInfo(contiguity, divisibility, constancy, constantValue); + return AxisInfo(std::move(contiguity), std::move(divisibility), + std::move(constancy), constantValue); } protected: @@ -541,7 +542,8 @@ class SplatOpAxisInfoVisitor final divisibility.push_back(opInfo.getDivisibility(0)); constancy.push_back(retTy.getShape()[d]); } - return AxisInfo(contiguity, divisibility, constancy, + return AxisInfo(std::move(contiguity), std::move(divisibility), + std::move(constancy), operands[0]->getValue().getConstantValue()); } }; @@ -572,7 +574,8 @@ class LoadOpAxisInfoVisitor final : public AxisInfoVisitorImpl { maskInfo.has_value() ? maskInfo->getConstancy(d) : 0)); } - return AxisInfo(contiguity, divisibility, constancy); + return AxisInfo(std::move(contiguity), std::move(divisibility), + std::move(constancy)); } }; @@ -606,7 +609,8 @@ class ExpandDimsOpAxisInfoVisitor final contiguity.insert(contiguity.begin() + op.getAxis(), 1); divisibility.insert(divisibility.begin() + op.getAxis(), newDivisibility); constancy.insert(constancy.begin() + op.getAxis(), 1); - return AxisInfo(contiguity, divisibility, constancy, + return AxisInfo(std::move(contiguity), std::move(divisibility), + std::move(constancy), operands[0]->getValue().getConstantValue()); } }; @@ -635,7 +639,8 @@ class BroadcastOpAxisInfoVisitor final constancy.push_back(opShape[d] == 1 ? retShape[d] : opInfo.getConstancy(d)); } - return AxisInfo(contiguity, divisibility, constancy, + return AxisInfo(std::move(contiguity), std::move(divisibility), + std::move(constancy), operands[0]->getValue().getConstantValue()); } }; @@ -710,7 +715,8 @@ class CmpOpAxisInfoVisitor final : public AxisInfoVisitorImpl { contiguity.push_back(1); } - return AxisInfo(contiguity, divisibility, constancy, constantValue); + return AxisInfo(std::move(contiguity), std::move(divisibility), + std::move(constancy), constantValue); } private: @@ -838,7 +844,8 @@ class SelectOpAxisInfoVisitor final : public AxisInfoVisitorImpl { constantValue = lhsInfo.getConstantValue(); } - return AxisInfo(contiguity, divisibility, constancy, constantValue); + return AxisInfo(std::move(contiguity), std::move(divisibility), + std::move(constancy), constantValue); } }; @@ -991,7 +998,8 @@ class MaxMinOpAxisInfoVisitor final : public AxisInfoVisitorImpl { contiguity.push_back( std::min(lhsInfo.getContiguity(d), rhsInfo.getContiguity(d))); } - return AxisInfo(contiguity, divisibility, constancy, std::nullopt); + return AxisInfo(std::move(contiguity), std::move(divisibility), + std::move(constancy), std::nullopt); } } }; @@ -1074,8 +1082,8 @@ LogicalResult AxisInfoAnalysis::visitOperation( auto vals = cast(attr).getValues(); newConstancy = AxisInfo::DimVectorT(vals.begin(), vals.end()); } - curr = AxisInfo(newContiguity, newDivisibility, newConstancy, - curr.getConstantValue()); + curr = AxisInfo(std::move(newContiguity), std::move(newDivisibility), + std::move(newConstancy), curr.getConstantValue()); // join all lattice elements for (auto *result : results) propagateIfChanged(result, result->join(curr)); @@ -1085,15 +1093,18 @@ LogicalResult AxisInfoAnalysis::visitOperation( void AxisInfoAnalysis::visitForOpInductionVar( scf::ForOp op, ArrayRef *> argLattices) { ProgramPoint programPoint(op); - auto lb = getLatticeElementFor(&programPoint, op.getLowerBound())->getValue(); - auto step = getLatticeElementFor(&programPoint, op.getStep())->getValue(); + const auto &lb = + getLatticeElementFor(&programPoint, op.getLowerBound())->getValue(); + const auto &step = + getLatticeElementFor(&programPoint, op.getStep())->getValue(); AxisInfo::DimVectorT knownContiguity(1, 1); AxisInfo::DimVectorT knownDivisibility(1, 1); AxisInfo::DimVectorT knownConstancy(1, 1); knownDivisibility[0] = gcd(lb.getDivisibility(0), step.getDivisibility(0)); auto inductionVar = - AxisInfo(knownContiguity, knownDivisibility, knownConstancy); + AxisInfo(std::move(knownContiguity), std::move(knownDivisibility), + std::move(knownConstancy)); (void)argLattices[0]->join(inductionVar); } @@ -1180,7 +1191,8 @@ void AxisInfo::initPessimisticStateFromFunc(int argNumber, T funcOp, } } - return AxisInfo(knownContiguity, knownDivisibility, knownConstancy); + return AxisInfo(std::move(knownContiguity), std::move(knownDivisibility), + std::move(knownConstancy)); } /*static*/ AxisInfo AxisInfo::join(const AxisInfo &lhs, const AxisInfo &rhs) { @@ -1202,7 +1214,8 @@ void AxisInfo::initPessimisticStateFromFunc(int argNumber, T funcOp, rhs.getConstantValue().has_value() && lhs.getConstantValue() == rhs.getConstantValue()) constantValue = lhs.getConstantValue(); - return AxisInfo(contiguity, divisibility, constancy, constantValue); + return AxisInfo(std::move(contiguity), std::move(divisibility), + std::move(constancy), constantValue); } unsigned ModuleAxisInfoAnalysis::getPtrContiguity(Value ptr) { From 5dbf3b0af97ee952471985143e15ced4a23822a0 Mon Sep 17 00:00:00 2001 From: Anatoly Myachev Date: Fri, 15 Nov 2024 14:33:35 +0100 Subject: [PATCH 2/2] Use 'ArrayRef' in 'AxisInfo' constructors Signed-off-by: Anatoly Myachev --- include/triton/Analysis/AxisInfo.h | 7 +++--- lib/Analysis/AxisInfo.cpp | 37 +++++++++++------------------- 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/include/triton/Analysis/AxisInfo.h b/include/triton/Analysis/AxisInfo.h index aad4503b4840..1bf9c8a690dc 100644 --- a/include/triton/Analysis/AxisInfo.h +++ b/include/triton/Analysis/AxisInfo.h @@ -27,11 +27,12 @@ class AxisInfo { public: AxisInfo() : AxisInfo({}, {}, {}) {} - AxisInfo(DimVectorT contiguity, DimVectorT divisibility, DimVectorT constancy) + AxisInfo(ArrayRef contiguity, ArrayRef divisibility, + ArrayRef constancy) : AxisInfo(contiguity, divisibility, constancy, std::nullopt) {} - AxisInfo(DimVectorT contiguity, DimVectorT divisibility, DimVectorT constancy, - std::optional constantValue) + AxisInfo(ArrayRef contiguity, ArrayRef divisibility, + ArrayRef constancy, std::optional constantValue) : contiguity(contiguity), divisibility(divisibility), constancy(constancy), constantValue(constantValue) { assert(divisibility.size() == contiguity.size()); diff --git a/lib/Analysis/AxisInfo.cpp b/lib/Analysis/AxisInfo.cpp index 91051327c6ba..3fd19493829c 100644 --- a/lib/Analysis/AxisInfo.cpp +++ b/lib/Analysis/AxisInfo.cpp @@ -121,8 +121,7 @@ class BinaryOpVisitorImpl : public AxisInfoVisitorImpl { divisibility.push_back(getDivisibility(op, lhsInfo, rhsInfo, d)); } } - return AxisInfo(std::move(contiguity), std::move(divisibility), - std::move(constancy), constantValue); + return AxisInfo(contiguity, divisibility, constancy, constantValue); } protected: @@ -542,8 +541,7 @@ class SplatOpAxisInfoVisitor final divisibility.push_back(opInfo.getDivisibility(0)); constancy.push_back(retTy.getShape()[d]); } - return AxisInfo(std::move(contiguity), std::move(divisibility), - std::move(constancy), + return AxisInfo(contiguity, divisibility, constancy, operands[0]->getValue().getConstantValue()); } }; @@ -574,8 +572,7 @@ class LoadOpAxisInfoVisitor final : public AxisInfoVisitorImpl { maskInfo.has_value() ? maskInfo->getConstancy(d) : 0)); } - return AxisInfo(std::move(contiguity), std::move(divisibility), - std::move(constancy)); + return AxisInfo(contiguity, divisibility, constancy); } }; @@ -609,8 +606,7 @@ class ExpandDimsOpAxisInfoVisitor final contiguity.insert(contiguity.begin() + op.getAxis(), 1); divisibility.insert(divisibility.begin() + op.getAxis(), newDivisibility); constancy.insert(constancy.begin() + op.getAxis(), 1); - return AxisInfo(std::move(contiguity), std::move(divisibility), - std::move(constancy), + return AxisInfo(contiguity, divisibility, constancy, operands[0]->getValue().getConstantValue()); } }; @@ -639,8 +635,7 @@ class BroadcastOpAxisInfoVisitor final constancy.push_back(opShape[d] == 1 ? retShape[d] : opInfo.getConstancy(d)); } - return AxisInfo(std::move(contiguity), std::move(divisibility), - std::move(constancy), + return AxisInfo(contiguity, divisibility, constancy, operands[0]->getValue().getConstantValue()); } }; @@ -715,8 +710,7 @@ class CmpOpAxisInfoVisitor final : public AxisInfoVisitorImpl { contiguity.push_back(1); } - return AxisInfo(std::move(contiguity), std::move(divisibility), - std::move(constancy), constantValue); + return AxisInfo(contiguity, divisibility, constancy, constantValue); } private: @@ -844,8 +838,7 @@ class SelectOpAxisInfoVisitor final : public AxisInfoVisitorImpl { constantValue = lhsInfo.getConstantValue(); } - return AxisInfo(std::move(contiguity), std::move(divisibility), - std::move(constancy), constantValue); + return AxisInfo(contiguity, divisibility, constancy, constantValue); } }; @@ -998,8 +991,7 @@ class MaxMinOpAxisInfoVisitor final : public AxisInfoVisitorImpl { contiguity.push_back( std::min(lhsInfo.getContiguity(d), rhsInfo.getContiguity(d))); } - return AxisInfo(std::move(contiguity), std::move(divisibility), - std::move(constancy), std::nullopt); + return AxisInfo(contiguity, divisibility, constancy, std::nullopt); } } }; @@ -1082,8 +1074,8 @@ LogicalResult AxisInfoAnalysis::visitOperation( auto vals = cast(attr).getValues(); newConstancy = AxisInfo::DimVectorT(vals.begin(), vals.end()); } - curr = AxisInfo(std::move(newContiguity), std::move(newDivisibility), - std::move(newConstancy), curr.getConstantValue()); + curr = AxisInfo(newContiguity, newDivisibility, newConstancy, + curr.getConstantValue()); // join all lattice elements for (auto *result : results) propagateIfChanged(result, result->join(curr)); @@ -1103,8 +1095,7 @@ void AxisInfoAnalysis::visitForOpInductionVar( AxisInfo::DimVectorT knownConstancy(1, 1); knownDivisibility[0] = gcd(lb.getDivisibility(0), step.getDivisibility(0)); auto inductionVar = - AxisInfo(std::move(knownContiguity), std::move(knownDivisibility), - std::move(knownConstancy)); + AxisInfo(knownContiguity, knownDivisibility, knownConstancy); (void)argLattices[0]->join(inductionVar); } @@ -1191,8 +1182,7 @@ void AxisInfo::initPessimisticStateFromFunc(int argNumber, T funcOp, } } - return AxisInfo(std::move(knownContiguity), std::move(knownDivisibility), - std::move(knownConstancy)); + return AxisInfo(knownContiguity, knownDivisibility, knownConstancy); } /*static*/ AxisInfo AxisInfo::join(const AxisInfo &lhs, const AxisInfo &rhs) { @@ -1214,8 +1204,7 @@ void AxisInfo::initPessimisticStateFromFunc(int argNumber, T funcOp, rhs.getConstantValue().has_value() && lhs.getConstantValue() == rhs.getConstantValue()) constantValue = lhs.getConstantValue(); - return AxisInfo(std::move(contiguity), std::move(divisibility), - std::move(constancy), constantValue); + return AxisInfo(contiguity, divisibility, constancy, constantValue); } unsigned ModuleAxisInfoAnalysis::getPtrContiguity(Value ptr) {