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

Erick Ochoa Lopez llvmlistbot at llvm.org
Wed Aug 6 05:54:15 PDT 2025


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

>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/4] 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/4] 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/4] 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);
     }]>
   ];

>From 502bd1e664225d5397c576867190a7accfe1428c Mon Sep 17 00:00:00 2001
From: Erick Ochoa <erick.ochoalopez at amd.com>
Date: Wed, 6 Aug 2025 08:41:31 -0400
Subject: [PATCH 4/4] add comment

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

diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
index b5ae0123d8c53..191615b560aa1 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h
@@ -78,6 +78,7 @@ struct VectorDim {
   bool isScalable;
 };
 
+// Struct used to denote bytes is the unit of alignment.
 struct AlignmentBytes {
   uint64_t alignment = 0;
   AlignmentBytes() = default;



More information about the Mlir-commits mailing list