aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineScheduler.cpp
diff options
context:
space:
mode:
authorMatthias Springer <springerm@google.com>2023-01-13 10:42:01 +0100
committerMatthias Springer <springerm@google.com>2023-01-13 10:51:28 +0100
commited9194be6d55776cbbf8432b93f0f23ec7b25a46 (patch)
tree25ac92be227270ebf01661de76ef282d79df5a2e /llvm/lib/CodeGen/MachineScheduler.cpp
parent99761276059ca74b2906a76072b1c15f88c43ecb (diff)
downloadllvm-ed9194be6d55776cbbf8432b93f0f23ec7b25a46.zip
llvm-ed9194be6d55776cbbf8432b93f0f23ec7b25a46.tar.gz
llvm-ed9194be6d55776cbbf8432b93f0f23ec7b25a46.tar.bz2
[mlir] GreedyPatternRewriter: Add ancestors to worklist
When adding an op to the worklist, also add its ancestors to the worklist. This allows for RewritePatterns to match an op `a` based on what is inside of the body of `a`. This change fixes a problem that became apparent with `vector.warp_execute_on_lane_0`, but could probably be triggered with similar patterns. The pattern extracts an op `b` with `eligible = true` from the body of an op `a`: ``` test.a { %0 = test.b() {eligible = true} yield %0 } ``` Afterwards: ``` %0 = test.b() {eligible = true} test.a { yield %0 } ``` The pattern is an `OpRewritePattern<OpA>`. For some reason, `test.a` is not on the GreedyPatternRewriter's worklist. E.g., because no pattern could be applied and it was removed. Now, another pattern updates `test.b`, so that `eligible` is changed from `true` to `false`. The `OpRewritePattern<OpA>` could now be applied, but (without this revision) `test.a` is still not on the worklist. Note: In the above example, an `OpRewritePattern<OpB>` could have been used instead of an `OpRewritePattern<OpA>`. With such a design, we can run into the same problem (when the `eligible` attr is on `test.a` and `test.b` is removed from the worklist because no patterns could be applied). Note: This change uncovered an unrelated bug in TestSCFUtils.cpp that was triggered due to a change in the order in which ops are processed. A TODO is added to the broken code and test cases are adapted so that the bug is no longer triggered. Differential Revision: https://reviews.llvm.org/D140304
Diffstat (limited to 'llvm/lib/CodeGen/MachineScheduler.cpp')
0 files changed, 0 insertions, 0 deletions