[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