diff options
author | 2021-12-08 11:27:02 +0000 | |
---|---|---|
committer | 2022-04-22 11:38:39 +0000 | |
commit | 640267052653a8c177b6f325675e7217b83d7d3c (patch) | |
tree | ad9a47af4317bc11ede0455a709a29ae468e8e4b /compiler/exception_test.cc | |
parent | 9d31daa0b3f8e748a19555870932bace11f2b199 (diff) |
Update how deoptimization from runtime methods is supported
We need to support deoptimization when returning from runtime methods
- To support setting break points or other debug related features for
long running loops we should be able to deopt at suspend points.
- To deoptimize the full stack when we have runtime functions like
art_quick_to_interpreter_bridge on the stack.
- To deoptimize the optimized code after redefining the class. Once
we redefine the class the offsets of the fields could change
because the field offsets are grouped together by type when
allocating. This would invalidate all optimized code and
deoptimization cannot be pushed to a later point.
Earlier this was achieved by instrumenting the stack and updating
the return pcs of the runtime functions to instrumentation exit
stub, so we could deoptimize the method. However runtime methods
can be called in different scenarios which complicated the logic
and was inaccurate in some scenarios.
This CL changes the approach to check if a deoptimization is
required before returning from the slow path of runtime functions
that can suspend. Checking for deopts only at suspend points is not
sufficient because of the class redefinition support as mentioned
earlier.
Bug: 204766614,208587492
Test: art/test.py
Change-Id: Ia655d957bae4ff891f8f32a0f3110c80e7a80bfd
Diffstat (limited to 'compiler/exception_test.cc')
0 files changed, 0 insertions, 0 deletions