-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JIT: libraries jitstress Assertion failed 'doesVNMatch' during 'Assertion prop' #109745
Comments
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch |
@jakobbotsch possibly from the CSE/SSA change? |
Seems likely, I'll take a look |
CSEs are keyed by liberal VNs which guarantees that all defs and uses for a single CSE candidate have the same liberal VN. The same is not true for their conservative VNs, however -- each def/use may have a potentially unique conservative VN. However, when VN creates a new The fix will probably be to have the SSA inserter update the VN so that it matches the actual reaching definition. |
Things don't look quite that simple as CSE does a bit of post processing over the conservative VNs. Will probably have to refactor things in CSE a bit to now make use of the proper reaching definitions (as a side note, it looks like some things can be cleaned up now that we have this). |
Now that CSE always inserts into SSA we can update it to make use of the reaching definition information that it has access to. CSE already spent effort to track some extra information to try to do this, which we can remove. - Remove `optCSECheckedBoundMap`: this was used by CSE to try to update conservative VNs of ancestor bounds checks. This is unnececssary since all descendants of the CSE definitions should get the same conservative VNs automatically now. - Remove `CSEdsc::defConservNormVN`; this was used to update conservative VNs in the single-def case, which again is unnecessary now Making this change requires a bit of refactoring to the incremental SSA builder. Before this PR the builder takes all defs and all uses and then inserts everything into SSA. After this change the builder is used in a multi-step process as follows: 1. All definitions are added with `IncrementalSsaBuilder::InsertDef` 2. The definitions are finalized with `IncrementalSsaBuilder::FinalizeDefs` 3. Uses are inserted (one by one) with `IncrementalSsaBuilder::InsertUse`. No finalization are necessary; each use is directly put into SSA as a result of calling this method. The refactoring allows CSE to use the incremental SSA builder such that it can access reaching definition information for each of the uses as part of making replacements. However, this still requires some refactoring such that CSE performs replacements of all defs before performing the replacements of all uses. Additionally, this PR fixes various incorrect VN updating made by CSE. Fix dotnet#109745
Now that CSE always inserts into SSA we can update it to make use of the reaching definition information that it has access to. CSE already spent effort to track some extra information to try to do this, which we can remove. - Remove `optCSECheckedBoundMap`: this was used by CSE to try to update conservative VNs of ancestor bounds checks. This is unnececssary since all descendants of the CSE definitions should get the same conservative VNs automatically now. - Remove `CSEdsc::defConservNormVN`; this was used to update conservative VNs in the single-def case, which again is unnecessary now Making this change requires a bit of refactoring to the incremental SSA builder. Before this PR the builder takes all defs and all uses and then inserts everything into SSA. After this change the builder is used in a multi-step process as follows: 1. All definitions are added with `IncrementalSsaBuilder::InsertDef` 2. The definitions are finalized with `IncrementalSsaBuilder::FinalizeDefs` 3. Uses are inserted (one by one) with `IncrementalSsaBuilder::InsertUse`. No finalization are necessary; each use is directly put into SSA as a result of calling this method. The refactoring allows CSE to use the incremental SSA builder such that it can access reaching definition information for each of the uses as part of making replacements. However, this still requires some refactoring such that CSE performs replacements of all defs before performing the replacements of all uses. Additionally, this PR fixes various incorrect VN updating made by CSE. VN and CSE still track VNs that are interesting bounds check. However, VN was sometimes inserting VNs with exception sets into the set, which is not useful (the consumers always use normal VNs when querying the set). This PR fixes VN to insert the normal VN instead. Fix dotnet#109745
Now that CSE always inserts into SSA we can update it to make use of the reaching definition information that it has access to. CSE already spent effort to track some extra information to try to do this, which we can remove. - Remove `optCSECheckedBoundMap`: this was used by CSE to try to update conservative VNs of ancestor bounds checks. This is unnececssary since all descendants of the CSE definitions should get the same conservative VNs automatically now. - Remove `CSEdsc::defConservNormVN`; this was used to update conservative VNs in the single-def case, which again is unnecessary now Making this change requires a bit of refactoring to the incremental SSA builder. Before this PR the builder takes all defs and all uses and then inserts everything into SSA. After this change the builder is used in a multi-step process as follows: 1. All definitions are added with `IncrementalSsaBuilder::InsertDef` 2. The definitions are finalized with `IncrementalSsaBuilder::FinalizeDefs` 3. Uses are inserted (one by one) with `IncrementalSsaBuilder::InsertUse`. No finalization are necessary; each use is directly put into SSA as a result of calling this method. The refactoring allows CSE to use the incremental SSA builder such that it can access reaching definition information for each of the uses as part of making replacements. However, this still requires some refactoring such that CSE performs replacements of all defs before performing the replacements of all uses. Additionally, this PR fixes various incorrect VN updating made by CSE. VN and CSE still track VNs that are interesting bounds check. However, VN was sometimes inserting VNs with exception sets into the set, which is not useful (the consumers always use normal VNs when querying the set). This PR fixes VN to insert the normal VN instead. Fix dotnet#109745
x86 libraries jitstress
https://dev.azure.com/dnceng-public/public/_build/results?buildId=867933&view=ms.vss-test-web.build-test-results-tab
Known Issue Error Message
Fill the error message using step by step known issues guidance.
Known issue validation
Build: 🔎 https://dev.azure.com/dnceng-public/public/_build/results?buildId=867933
Error message validated:
[Assertion failed 'doesVNMatch'
]Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 11/14/2024 12:58:45 PM UTC
Report
Summary
The text was updated successfully, but these errors were encountered: