[Mlir-commits] [mlir] [mlir][tosa] Fold 'small' constant 1D concat operations (PR #128080)
Jack Frankland
llvmlistbot at llvm.org
Thu Feb 27 08:01:50 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()) {
+ const auto elementsAttr =
+ llvm::dyn_cast_if_present<DenseElementsAttr>(operand);
+ if (!elementsAttr) {
----------------
FranklandJack wrote:
By the llvm style guide this if statement shouldn't have curly braces: https://llvm.org/docs/CodingStandards.html#don-t-use-braces-on-simple-single-statement-bodies-of-if-else-loop-statements.
https://github.com/llvm/llvm-project/pull/128080
More information about the Mlir-commits
mailing list