[all-commits] [llvm/llvm-project] a60050: [mlir][dataflow] Allow re-run all analyses in Data...
Hongren Zheng via All-commits
all-commits at lists.llvm.org
Mon Dec 23 12:33:44 PST 2024
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: a60050cf1966eb8d46253c8da13df52ac8b9ec33
https://github.com/llvm/llvm-project/commit/a60050cf1966eb8d46253c8da13df52ac8b9ec33
Author: Hongren Zheng <i at zenithal.me>
Date: 2024-12-23 (Mon, 23 Dec 2024)
Changed paths:
M mlir/include/mlir/Analysis/DataFlowFramework.h
Log Message:
-----------
[mlir][dataflow] Allow re-run all analyses in DataFlowSolver (#120881)
In downstream (check https://github.com/google/heir/pull/1228,
especially [this
commit](https://github.com/ZenithalHourlyRate/heir/commit/fbf0b2733f1f60e852c757602afac65a4364e30c);
also check https://github.com/google/heir/pull/1154) we often need to
re-run the analysis during the transformation pass as IR get changed
based on the analysis result and analysis continuously get invalidated.
There are solutions to it like `getOrCreateState` for newly created
`Value` (`AnchorT`), but warning is that the new state does not
propagate! This is quite unexpected as user of analysis would expect it
to propagate. We downstream used to use `solver->propagateIfChanged` but
that turned out to be not working, see detailed writeup in
https://github.com/google/heir/issues/1153.
Just call `initializeAndRun` repeatedly also does not solve the problem
as `analysisStates` is not cleared and the monotonicity of
`AnalysisState` will make the analysis invalid as `join` will not work
as expected (the first join is no longer `join(uninitialized, init
value)`, instead it becomes `join(higher value, init value)`.
To correctly re-run the analysis, either a new `DataFlowSolver` is
created, or we can just clear the `analysisState`.
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list