From 8798040f284e1177cb1a8021d267630b88943442 Mon Sep 17 00:00:00 2001 From: Erick Ochoa Date: Tue, 5 Aug 2025 10:40:55 -0400 Subject: [PATCH 1/6] 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 *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 Date: Tue, 5 Aug 2025 13:54:54 -0400 Subject: [PATCH 2/6] 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 Date: Tue, 5 Aug 2025 17:11:21 -0400 Subject: [PATCH 3/6] 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 Date: Wed, 6 Aug 2025 08:41:31 -0400 Subject: [PATCH 4/6] 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; From 306efb76ce9b23e29fa36d151cc5d5cfb9714cf6 Mon Sep 17 00:00:00 2001 From: Erick Ochoa Date: Wed, 6 Aug 2025 16:23:44 -0700 Subject: [PATCH 5/6] Revert changes Revert "add comment" This reverts commit 502bd1e664225d5397c576867190a7accfe1428c. Revert "Make bool operator explicit" This reverts commit 1a68ecf180808b65f41ae1ab3fa8ef5e09aaf327. Revert "Style" This reverts commit 3ce76bc6d753e377711a6c35a3b7b1afc2121607. Revert "Add AlignmentBytes class" This reverts commit 8798040f284e1177cb1a8021d267630b88943442. --- mlir/include/mlir/Dialect/Vector/IR/VectorOps.h | 10 ---------- mlir/include/mlir/Dialect/Vector/IR/VectorOps.td | 12 ++++++------ 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h index 191615b560aa1..364c1728715e8 100644 --- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h +++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h @@ -77,16 +77,6 @@ struct VectorDim { int64_t dim; bool isScalable; }; - -// Struct used to denote bytes is the unit of alignment. -struct AlignmentBytes { - uint64_t alignment = 0; - AlignmentBytes() = default; - explicit AlignmentBytes(uint64_t alignment) : alignment(alignment) {}; - explicit operator bool() const { return alignment; } - uint64_t getAlignment() const { return alignment; } -}; - BroadcastableToResult isBroadcastableTo(Type srcType, VectorType dstVectorType, std::pair *mismatchingDims = nullptr); diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td index 8908efb291acb..dc55704c36183 100644 --- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td +++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td @@ -1729,18 +1729,18 @@ def Vector_LoadOp : Vector_Op<"load", [ "Value":$base, "ValueRange":$indices, CArg<"bool", "false">:$nontemporal, - CArg<"AlignmentBytes", "AlignmentBytes()">: $alignment), [{ + CArg<"uint64_t", "0">:$alignment), [{ return build($_builder, $_state, resultType, base, indices, nontemporal, - alignment ? $_builder.getI64IntegerAttr(alignment.getAlignment()) : + alignment != 0 ? $_builder.getI64IntegerAttr(alignment) : nullptr); }]>, OpBuilder<(ins "TypeRange":$resultTypes, "Value":$base, "ValueRange":$indices, CArg<"bool", "false">:$nontemporal, - CArg<"AlignmentBytes", "AlignmentBytes()">: $alignment), [{ + CArg<"uint64_t", "0">:$alignment), [{ return build($_builder, $_state, resultTypes, base, indices, nontemporal, - alignment ? $_builder.getI64IntegerAttr(alignment.getAlignment()) : + alignment != 0 ? $_builder.getI64IntegerAttr(alignment) : nullptr); }]> ]; @@ -1847,9 +1847,9 @@ def Vector_StoreOp : Vector_Op<"store", [ "Value":$base, "ValueRange":$indices, CArg<"bool", "false">:$nontemporal, - CArg<"AlignmentBytes", "AlignmentBytes()">:$alignment), [{ + CArg<"uint64_t", "0">:$alignment), [{ return build($_builder, $_state, valueToStore, base, indices, nontemporal, - alignment ? $_builder.getI64IntegerAttr(alignment.getAlignment()) : + alignment != 0 ? $_builder.getI64IntegerAttr(alignment) : nullptr); }]> ]; From 55542d223ca0c15cd69e0330115e365e449d8b20 Mon Sep 17 00:00:00 2001 From: Erick Ochoa Date: Wed, 6 Aug 2025 16:34:02 -0700 Subject: [PATCH 6/6] Use llvm::Align --- mlir/include/mlir/Dialect/Vector/IR/VectorOps.h | 1 + mlir/include/mlir/Dialect/Vector/IR/VectorOps.td | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h index 364c1728715e8..63410b8bea747 100644 --- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h +++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h @@ -32,6 +32,7 @@ #include "mlir/Interfaces/ViewLikeInterface.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/Support/Alignment.h" // Pull in all enum type definitions and utility function declarations. #include "mlir/Dialect/Vector/IR/VectorEnums.h.inc" diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td index dc55704c36183..eeedf68a1df7c 100644 --- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td +++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td @@ -1729,18 +1729,18 @@ def Vector_LoadOp : Vector_Op<"load", [ "Value":$base, "ValueRange":$indices, CArg<"bool", "false">:$nontemporal, - CArg<"uint64_t", "0">:$alignment), [{ + CArg<"llvm::Align", "llvm::Align()">:$alignment), [{ return build($_builder, $_state, resultType, base, indices, nontemporal, - alignment != 0 ? $_builder.getI64IntegerAttr(alignment) : + alignment != llvm::Align() ? $_builder.getI64IntegerAttr(alignment.value()) : nullptr); }]>, OpBuilder<(ins "TypeRange":$resultTypes, "Value":$base, "ValueRange":$indices, CArg<"bool", "false">:$nontemporal, - CArg<"uint64_t", "0">:$alignment), [{ + CArg<"llvm::Align", "llvm::Align()">:$alignment), [{ return build($_builder, $_state, resultTypes, base, indices, nontemporal, - alignment != 0 ? $_builder.getI64IntegerAttr(alignment) : + alignment != llvm::Align() ? $_builder.getI64IntegerAttr(alignment.value()) : nullptr); }]> ]; @@ -1847,9 +1847,9 @@ def Vector_StoreOp : Vector_Op<"store", [ "Value":$base, "ValueRange":$indices, CArg<"bool", "false">:$nontemporal, - CArg<"uint64_t", "0">:$alignment), [{ + CArg<"llvm::Align", "llvm::Align()">:$alignment), [{ return build($_builder, $_state, valueToStore, base, indices, nontemporal, - alignment != 0 ? $_builder.getI64IntegerAttr(alignment) : + alignment != llvm::Align() ? $_builder.getI64IntegerAttr(alignment.value()) : nullptr); }]> ];