diff options
author | Matthias Springer <springerm@google.com> | 2023-01-13 10:42:01 +0100 |
---|---|---|
committer | Matthias Springer <springerm@google.com> | 2023-01-13 10:51:28 +0100 |
commit | ed9194be6d55776cbbf8432b93f0f23ec7b25a46 (patch) | |
tree | 25ac92be227270ebf01661de76ef282d79df5a2e /llvm/lib/CodeGen/MachineScheduler.cpp | |
parent | 99761276059ca74b2906a76072b1c15f88c43ecb (diff) | |
download | llvm-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