[Mlir-commits] [mlir] [mlir][tosa] Fold 'small' constant 1D concat operations (PR #128080)
Jack Frankland
llvmlistbot at llvm.org
Thu Feb 27 08:04:26 PST 2025
================
@@ -1226,16 +1226,54 @@ OpFoldResult tosa::AbsOp::fold(FoldAdaptor adaptor) {
}
OpFoldResult ConcatOp::fold(FoldAdaptor adaptor) {
+ const auto operands = getOperands();
+ const unsigned int numOperands = getNumOperands();
+
+ // Fold concat when all operands are constant and the output is 'small'
+ auto hasAllConstOperands = [](Value v) {
+ return llvm::dyn_cast_or_null<tosa::ConstOp>(v.getDefiningOp());
+ };
+ if (llvm::all_of(operands, hasAllConstOperands)) {
+ const ShapedType outputType = dyn_cast<ShapedType>(getOutput().getType());
+ if (!outputType || !outputType.hasStaticShape()) {
+ return {};
+ }
+
+ // A 'small' output is currently defined as 1D and <= 6 elements
+ // (tosa_level_8k MAX_RANK)
+ if (outputType.getRank() != 1) {
+ return {};
+ }
+ const int64_t outputNumElements = outputType.getNumElements();
+ if (outputNumElements > 6) {
+ return {};
+ }
+
+ llvm::SmallVector<Attribute> constOperands;
+ constOperands.reserve(outputNumElements);
+ for (const Attribute operand : adaptor.getOperands()) {
----------------
FranklandJack wrote:
should this be `const Attribute &` to avoid copying on eadh loop iteration?
https://github.com/llvm/llvm-project/pull/128080
More information about the Mlir-commits
mailing list