[Mlir-commits] [clang] [llvm] [mlir] [AArch64][SME] Improve codegen for aarch64.sme.cnts* when not in streaming mode (PR #154761)

Kerry McLaughlin llvmlistbot at llvm.org
Thu Sep 4 06:00:01 PDT 2025


================
@@ -845,15 +847,25 @@ struct StreamingVLOpConversion
     auto loc = streamingVlOp.getLoc();
     auto i64Type = rewriter.getI64Type();
     auto *intrOp = [&]() -> Operation * {
+      auto cntsd = arm_sme::aarch64_sme_cntsd::create(rewriter, loc, i64Type);
       switch (streamingVlOp.getTypeSize()) {
-      case arm_sme::TypeSize::Byte:
-        return arm_sme::aarch64_sme_cntsb::create(rewriter, loc, i64Type);
-      case arm_sme::TypeSize::Half:
-        return arm_sme::aarch64_sme_cntsh::create(rewriter, loc, i64Type);
-      case arm_sme::TypeSize::Word:
-        return arm_sme::aarch64_sme_cntsw::create(rewriter, loc, i64Type);
+      case arm_sme::TypeSize::Byte: {
+        auto mul = arith::ConstantIndexOp::create(rewriter, loc, 8);
+        auto mul64 = arith::IndexCastOp::create(rewriter, loc, i64Type, mul);
+        return arith::MulIOp::create(rewriter, loc, cntsd, mul64);
+      }
+      case arm_sme::TypeSize::Half: {
+        auto mul = arith::ConstantIndexOp::create(rewriter, loc, 4);
+        auto mul64 = arith::IndexCastOp::create(rewriter, loc, i64Type, mul);
+        return arith::MulIOp::create(rewriter, loc, cntsd, mul64);
+      }
+      case arm_sme::TypeSize::Word: {
+        auto mul = arith::ConstantIndexOp::create(rewriter, loc, 2);
+        auto mul64 = arith::IndexCastOp::create(rewriter, loc, i64Type, mul);
+        return arith::MulIOp::create(rewriter, loc, cntsd, mul64);
+      }
       case arm_sme::TypeSize::Double:
-        return arm_sme::aarch64_sme_cntsd::create(rewriter, loc, i64Type);
+        return cntsd;
       }
       llvm_unreachable("unknown type size in StreamingVLOpConversion");
     }();
----------------
kmclaughlin-arm wrote:

I've removed the lambda and added getSizeInBytes in Utils.cpp, as there seemed to be similar helpers in there for SME types.

https://github.com/llvm/llvm-project/pull/154761


More information about the Mlir-commits mailing list