Description[turbofan] Add general support for sp-based frame access
Some highlights of this CL:
* Refactor the mutable state out of Frame into FrameAccessState,
which is maintained and updated during code generation to
record whether sp- or fp-based frame access is currently active
and how deep the stack on top of the frame is.
* The operand resultion in linkage.cc now uses FrameAccessState
to determine how to generate frame-accessing operands.
* Update all platforms to accurately track additionally pushed
stack slots (e.g. arguments for calls) in the FrameAccessState.
* Add a flag, --turbo_sp_frame_access, which forces all frame
access to be sp-based whenever possible. This will likely never
be used in production, but for testing it's useful in verifying
that the stack-tracking of each platform maintained in the
FrameAccessState is correct.
* Use sp-based frame access for gap resolving before tail
calls. This will allow for slightly more efficient restoration
of the frame pointer in the tail call in a later CL.
* Remove most ad hoc groping into CallDescriptors to
determine if a frame is needed, instead consistently use
predicates like needs_frame(), IsCFunctionCall() and
IsJSFunctionCall().
BUG=v8:4076
LOG=n
Committed: https://crrev.com/51669873694ed266ea06a2726f87138374eea1e7
Cr-Commit-Position: refs/heads/master@{#32234}
Patch Set 1 #Patch Set 2 : Correct diff #Patch Set 3 : Refactor #Patch Set 4 : Fix arm64 #
Total comments: 6
Patch Set 5 : Port to x64 #Patch Set 6 : All platforms #Patch Set 7 : Latest ports #Patch Set 8 : All platforms #
Total comments: 8
Patch Set 9 : Address reviewer feedback #
Total comments: 1
Patch Set 10 : Last comment addressed #
Messages
Total messages: 24 (12 generated)
|