[Mlir-commits] [mlir] [mlir][vector] Add AlignmentBytes struct (PR #152207)

Erick Ochoa Lopez llvmlistbot at llvm.org
Tue Aug 5 14:14:34 PDT 2025


https://github.com/amd-eochoalo created https://github.com/llvm/llvm-project/pull/152207

This patchset adds a small struct which represents the alignment in terms of bytes. Adding an explicit struct instead of using integers allows for easier reading and avoids confusion since the alignment can be given in different units. See for example the following [RFC.](https://discourse.llvm.org/t/rfc-changing-byte-alignment-to-bit-alignment-for-memref-and-vector-dialects/87727)

>From 8798040f284e1177cb1a8021d267630b88943442 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Tue, 5 Aug 2025 10:40:55 -0400
Subject: [PATCH 1/3] Add AlignmentBytes class

---
 mlir/include/mlir/Dialect/Vector/IR/VectorOps.h  | 8 ++++++++
 mlir/include/mlir/Dialect/Vector/IR/VectorOps.td | 6 +++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
index 364c1728715e8..048fd1f937c9e 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
@@ -77,6 +77,14 @@ struct VectorDim {
   int64_t dim;
   bool isScalable;
 };
+
+struct AlignmentBytes {
+  uint64_t alignment = 0;
+  AlignmentBytes() = default;
+  explicit AlignmentBytes(uint64_t alignment_) : alignment(alignment_){};
+  operator bool() const { return 0 != alignment; }
+};
+
 BroadcastableToResult
 isBroadcastableTo(Type srcType, VectorType dstVectorType,
                   std::pair<VectorDim, VectorDim> *mismatchingDims = nullptr);
diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
index 3885439e11f89..6b56c7bb58822 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
@@ -1729,7 +1729,7 @@ def Vector_LoadOp : Vector_Op<"load", [
                    "Value":$base,
                    "ValueRange":$indices,
                    CArg<"bool", "false">:$nontemporal,
-                   CArg<"uint64_t", "0">:$alignment), [{
+                   CArg<"AlignmentBytes", "AlignmentBytes()">: $alignment), [{
       return build($_builder, $_state, resultType, base, indices, nontemporal,
                    alignment != 0 ? $_builder.getI64IntegerAttr(alignment) :
                                     nullptr);
@@ -1738,7 +1738,7 @@ def Vector_LoadOp : Vector_Op<"load", [
                    "Value":$base,
                    "ValueRange":$indices,
                    CArg<"bool", "false">:$nontemporal,
-                   CArg<"uint64_t", "0">:$alignment), [{
+                   CArg<"AlignmentBytes", "AlignmentBytes()">: $alignment), [{
       return build($_builder, $_state, resultTypes, base, indices, nontemporal,
                    alignment != 0 ? $_builder.getI64IntegerAttr(alignment) :
                                     nullptr);
@@ -1847,7 +1847,7 @@ def Vector_StoreOp : Vector_Op<"store", [
                    "Value":$base,
                    "ValueRange":$indices,
                    CArg<"bool", "false">:$nontemporal,
-                   CArg<"uint64_t", "0">:$alignment), [{
+                   CArg<"AlignmentBytes", "AlignmentBytes()">:$alignment), [{
       return build($_builder, $_state, valueToStore, base, indices, nontemporal,
                    alignment != 0 ? $_builder.getI64IntegerAttr(alignment) :
                                     nullptr);

>From 3ce76bc6d753e377711a6c35a3b7b1afc2121607 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Tue, 5 Aug 2025 13:54:54 -0400
Subject: [PATCH 2/3] Style

---
 mlir/include/mlir/Dialect/Vector/IR/VectorOps.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
index 048fd1f937c9e..7bc597e3af22e 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
@@ -81,7 +81,7 @@ struct VectorDim {
 struct AlignmentBytes {
   uint64_t alignment = 0;
   AlignmentBytes() = default;
-  explicit AlignmentBytes(uint64_t alignment_) : alignment(alignment_){};
+  explicit AlignmentBytes(uint64_t alignment) : alignment(alignment) {};
   operator bool() const { return 0 != alignment; }
 };
 

>From 1a68ecf180808b65f41ae1ab3fa8ef5e09aaf327 Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Tue, 5 Aug 2025 17:11:21 -0400
Subject: [PATCH 3/3] Make bool operator explicit

---
 mlir/include/mlir/Dialect/Vector/IR/VectorOps.h  | 3 ++-
 mlir/include/mlir/Dialect/Vector/IR/VectorOps.td | 6 +++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
index 7bc597e3af22e..b5ae0123d8c53 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
@@ -82,7 +82,8 @@ struct AlignmentBytes {
   uint64_t alignment = 0;
   AlignmentBytes() = default;
   explicit AlignmentBytes(uint64_t alignment) : alignment(alignment) {};
-  operator bool() const { return 0 != alignment; }
+  explicit operator bool() const { return alignment; }
+  uint64_t getAlignment() const { return alignment; }
 };
 
 BroadcastableToResult
diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
index 6b56c7bb58822..3ebb5721d7181 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
@@ -1731,7 +1731,7 @@ def Vector_LoadOp : Vector_Op<"load", [
                    CArg<"bool", "false">:$nontemporal,
                    CArg<"AlignmentBytes", "AlignmentBytes()">: $alignment), [{
       return build($_builder, $_state, resultType, base, indices, nontemporal,
-                   alignment != 0 ? $_builder.getI64IntegerAttr(alignment) :
+                   alignment ? $_builder.getI64IntegerAttr(alignment.getAlignment()) :
                                     nullptr);
     }]>,
     OpBuilder<(ins "TypeRange":$resultTypes,
@@ -1740,7 +1740,7 @@ def Vector_LoadOp : Vector_Op<"load", [
                    CArg<"bool", "false">:$nontemporal,
                    CArg<"AlignmentBytes", "AlignmentBytes()">: $alignment), [{
       return build($_builder, $_state, resultTypes, base, indices, nontemporal,
-                   alignment != 0 ? $_builder.getI64IntegerAttr(alignment) :
+                   alignment ? $_builder.getI64IntegerAttr(alignment.getAlignment()) :
                                     nullptr);
     }]>
   ];
@@ -1849,7 +1849,7 @@ def Vector_StoreOp : Vector_Op<"store", [
                    CArg<"bool", "false">:$nontemporal,
                    CArg<"AlignmentBytes", "AlignmentBytes()">:$alignment), [{
       return build($_builder, $_state, valueToStore, base, indices, nontemporal,
-                   alignment != 0 ? $_builder.getI64IntegerAttr(alignment) :
+                   alignment ? $_builder.getI64IntegerAttr(alignment.getAlignment()) :
                                     nullptr);
     }]>
   ];



More information about the Mlir-commits mailing list