Fix deoptimization address patching in Turbofan to use safepoints.
authorjarin@chromium.org <jarin@chromium.org>
Mon, 25 Aug 2014 07:02:19 +0000 (07:02 +0000)
committerjarin@chromium.org <jarin@chromium.org>
Mon, 25 Aug 2014 07:02:19 +0000 (07:02 +0000)
commitd8295050d28434395df4960290b3df81cb4634b2
tree90975c4fe8b38e36bc732545bb8f57fb883d678f
parent3a1c55590fdfa432310ac16a3353a2299d6ab125
Fix deoptimization address patching in Turbofan to use safepoints.

Since the deopt patch address needs to be available during GC to
resolve safepoints, we need to move it to the code object (instead of
the deoptimization input data) - accessing a separate fixed array
is not safe during GC. This CL adds a deoptimization_pc field to
each safepoint. The fields points to the deoptimization block.

The CL also fixes wrong register allocator constraints for
frame states on calls. These should always live on the stack
because registers are not preserved during a call.

BUG=
R=bmeurer@chromium.org

Review URL: https://codereview.chromium.org/504493002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23334 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
18 files changed:
src/arm/lithium-codegen-arm.cc
src/arm64/lithium-codegen-arm64.cc
src/compiler/code-generator.cc
src/compiler/code-generator.h
src/compiler/instruction-selector.cc
src/deoptimizer.cc
src/ia32/lithium-codegen-ia32.cc
src/mips/lithium-codegen-mips.cc
src/mips64/lithium-codegen-mips64.cc
src/objects-inl.h
src/objects.cc
src/objects.h
src/safepoint-table.cc
src/safepoint-table.h
src/x64/lithium-codegen-x64.cc
src/x87/lithium-codegen-x87.cc
test/cctest/compiler/test-codegen-deopt.cc
test/mjsunit/mjsunit.status