Only ops that were newly inserted or changed should be enqueued.
Patterns can match based on their operands but not based on the uses of their results.
Depends On: D144257
Differential D144642
[mlir] GreedyPatternRewriteDriver: Do not enqueue operands of deleted ops springerm on Feb 23 2023, 6:24 AM. Authored by
Details
Only ops that were newly inserted or changed should be enqueued. Patterns can match based on their operands but not based on the uses of their results. Depends On: D144257
Diff Detail
Event TimelineComment Actions This change is needed for D144193. Otherwise, we may enqueue deleted operations when removing an op op such as: "op"() { // graph region %a = "foo"(%b) %b = "foo"(%a) } The alternative would be to immediately erase an op after triggering notifyOperationRemoved. I.e., a walk over the op that removes nested ops one-by-one and triggers notifications. This would be less efficient than what we are doing now: a walk over an operation to send notifications, followed by a single Operation::erase (that also drops all nested ops). Comment Actions One problem with this approach is that it increases the number of iterations needed for convergence. |