[PATCH] D124750: [MLIR] Add a utility to sort the operands of commutative ops
Jeff Niu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Jun 12 22:57:46 PDT 2022
Mogball added inline comments.
================
Comment at: mlir/include/mlir/Transforms/CommutativityUtils.h:211
+ // If `op` is not commutative, do nothing.
+ if (!op->template hasTrait<OpTrait::IsCommutative>())
+ return failure();
----------------
Mogball wrote:
> Please move the body `matchAndRewrite` into a source file. It only needs `Operation *`. And then all the structs/enum/utility functions in the header can be moved there as well.
This could stand to be a `static_assert`
================
Comment at: mlir/include/mlir/Transforms/CommutativityUtils.h:257
+ // smallest.
+ DenseSet<unsigned> smallestKeyIndices;
+ // Stores the indices of the unassigned operands whose key is the largest.
----------------
Could you not change `getIndicesOfUnassigned...` to populate two lists of operands and pass these to `assignSortedPositionTo` instead of using a set to track the indices. You could put the operand index inside `OperandBFS` to keep track.
================
Comment at: mlir/lib/Transforms/Utils/CommutativityUtils.cpp:24
+bool mlir::hasAtLeastOneUnassignedOperand(
+ SmallVector<OperandBFS *, 2> bfsOfOperands) {
+ for (OperandBFS *bfsOfOperand : bfsOfOperands) {
----------------
This function doesn't seem like it pays for itself -- `llvm::any_of`?
================
Comment at: mlir/lib/Transforms/Utils/CommutativityUtils.cpp:92
+ // of `bfsOfOperands`.
+ SmallVector<mlir::BlockArgumentOrOpKey, 4> smallestKey, largestKey;
+ for (OperandBFS *bfsOfOperand : bfsOfOperands) {
----------------
These could all be `ArrayRef`s since you aren't modifying them
================
Comment at: mlir/lib/Transforms/Utils/CommutativityUtils.cpp:167
+ // which is the key associated with a block argument.
+ mlir::BlockArgumentOrOpKey blockArgumentOrOpKey;
+ blockArgumentOrOpKey.type = BLOCK_ARGUMENT;
----------------
drop mlir::
================
Comment at: mlir/lib/Transforms/Utils/CommutativityUtils.cpp:201
+ unsigned positionToAssign, Operation *op) {
+ if (keyIndices.contains(indexOfOperand) &&
+ (isTheOnlyKey || bfsOfOperand->ancestorQueue.empty())) {
----------------
This function doesn't seem like it pays for itself.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D124750/new/
https://reviews.llvm.org/D124750
More information about the cfe-commits
mailing list