You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Issue to keep track of the problems we encountered with stackmaps and how we fixed them.
Function prologue
In order to recreate stackframes during deoptimisation we need information about the function prologue (e.g. callee-saved registers, pushed RBP), which LLVM's stackmap don't track. Fixed in ykjit/ykllvm#48
Extra locations
Live variables can live in multiple locations at the same time, while stackmaps only track one. Deopt requires putting back values in all their locations. Fixed in ykjit/ykllvm#57
Register allocator shifts stackmaps around
The register allocator may insert spill reloads inbetween function calls and their stackmap. This changes the address the stackmap is recording as well as the locations of live variables. Fixed in ykjit/ykllvm#61
Selection DAG changes instructions without updating stackmaps
When turning on optimisations, the Selection DAG may change instructions in a way that makes variables live that weren't at the time stackmaps were inserted, causing us to have untracked live variables. Current solution: disable optimisations during selection DAG.
Issue to keep track of the problems we encountered with stackmaps and how we fixed them.
Function prologue
In order to recreate stackframes during deoptimisation we need information about the function prologue (e.g. callee-saved registers, pushed RBP), which LLVM's stackmap don't track. Fixed in ykjit/ykllvm#48
Extra locations
Live variables can live in multiple locations at the same time, while stackmaps only track one. Deopt requires putting back values in all their locations. Fixed in ykjit/ykllvm#57
Register allocator shifts stackmaps around
The register allocator may insert spill reloads inbetween function calls and their stackmap. This changes the address the stackmap is recording as well as the locations of live variables. Fixed in ykjit/ykllvm#61
Selection DAG changes instructions without updating stackmaps
When turning on optimisations, the Selection DAG may change instructions in a way that makes variables live that weren't at the time stackmaps were inserted, causing us to have untracked live variables. Current solution: disable optimisations during selection DAG.
Tracking things that get split across registers
llvm/llvm-project#55957 worked around in ykjit/ykllvm#40
The text was updated successfully, but these errors were encountered: