From 6301574206b39f72edb957f3b069f3892c117d4b Mon Sep 17 00:00:00 2001 From: Javier Setoain Date: Tue, 26 Apr 2022 14:39:29 +0100 Subject: [PATCH] [mlir][SparseTensor] Enable VLA ops in index value generation Current index value generation uses fixed-length vector ops, this patch adds an alterantive codegen path compatible with scalable vectors by using `LLVM::StepVectorOp`. Differential Revision: https://reviews.llvm.org/D124454 --- .../Dialect/SparseTensor/Transforms/Sparsification.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp index 237cfa97..e7d03e8 100644 --- a/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp +++ b/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp @@ -17,6 +17,7 @@ #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Dialect/Func/IR/FuncOps.h" +#include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" @@ -889,11 +890,18 @@ static Value genIndexValue(Merger &merger, CodeGen &codegen, VectorType vtp = vectorType(codegen, itype); ival = rewriter.create(loc, vtp, ival); if (idx == ldx) { - SmallVector integers; - for (unsigned i = 0; i < vl; i++) - integers.push_back(APInt(/*width=*/64, i)); - auto values = DenseElementsAttr::get(vtp, integers); - Value incr = rewriter.create(loc, vtp, values); + Value incr; + if (vtp.isScalable()) { + Type stepvty = vectorType(codegen, rewriter.getI64Type()); + Value stepv = rewriter.create(loc, stepvty); + incr = rewriter.create(loc, vtp, stepv); + } else { + SmallVector integers; + for (unsigned i = 0; i < vl; i++) + integers.push_back(APInt(/*width=*/64, i)); + auto values = DenseElementsAttr::get(vtp, integers); + incr = rewriter.create(loc, vtp, values); + } ival = rewriter.create(loc, ival, incr); } } -- 2.7.4