Add flag trap_on_stub_deopt. We want to be able to trap on hydrogen stub bailouts.

BUG=
R=svenpanne@chromium.org, verwaest@chromium.org

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

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16121 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent f0305bd8
...@@ -811,7 +811,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, ...@@ -811,7 +811,7 @@ void LCodeGen::DeoptimizeIf(Condition cc,
return; return;
} }
if (FLAG_trap_on_deopt && info()->IsOptimizing()) { if (info()->ShouldTrapOnDeopt()) {
__ stop("trap_on_deopt", cc); __ stop("trap_on_deopt", cc);
} }
......
...@@ -199,6 +199,11 @@ class CompilationInfo { ...@@ -199,6 +199,11 @@ class CompilationInfo {
return IsCompilingForDebugging::decode(flags_); return IsCompilingForDebugging::decode(flags_);
} }
bool ShouldTrapOnDeopt() const {
return (FLAG_trap_on_deopt && IsOptimizing()) ||
(FLAG_trap_on_stub_deopt && IsStub());
}
bool has_global_object() const { bool has_global_object() const {
return !closure().is_null() && return !closure().is_null() &&
(closure()->context()->global_object() != NULL); (closure()->context()->global_object() != NULL);
......
...@@ -264,6 +264,8 @@ DEFINE_int(deopt_every_n_garbage_collections, ...@@ -264,6 +264,8 @@ DEFINE_int(deopt_every_n_garbage_collections,
"deoptimize every n garbage collections") "deoptimize every n garbage collections")
DEFINE_bool(print_deopt_stress, false, "print number of possible deopt points") DEFINE_bool(print_deopt_stress, false, "print number of possible deopt points")
DEFINE_bool(trap_on_deopt, false, "put a break point before deoptimizing") DEFINE_bool(trap_on_deopt, false, "put a break point before deoptimizing")
DEFINE_bool(trap_on_stub_deopt, false,
"put a break point before deoptimizing a stub")
DEFINE_bool(deoptimize_uncommon_cases, true, "deoptimize uncommon cases") DEFINE_bool(deoptimize_uncommon_cases, true, "deoptimize uncommon cases")
DEFINE_bool(polymorphic_inlining, true, "polymorphic inlining") DEFINE_bool(polymorphic_inlining, true, "polymorphic inlining")
DEFINE_bool(use_osr, true, "use on-stack replacement") DEFINE_bool(use_osr, true, "use on-stack replacement")
......
...@@ -1010,7 +1010,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, ...@@ -1010,7 +1010,7 @@ void LCodeGen::DeoptimizeIf(Condition cc,
__ bind(&done); __ bind(&done);
} }
if (FLAG_trap_on_deopt && info()->IsOptimizing()) { if (info()->ShouldTrapOnDeopt()) {
Label done; Label done;
if (cc != no_condition) __ j(NegateCondition(cc), &done, Label::kNear); if (cc != no_condition) __ j(NegateCondition(cc), &done, Label::kNear);
__ int3(); __ int3();
......
...@@ -787,7 +787,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, ...@@ -787,7 +787,7 @@ void LCodeGen::DeoptimizeIf(Condition cc,
return; return;
} }
if (FLAG_trap_on_deopt && info()->IsOptimizing()) { if (info()->ShouldTrapOnDeopt()) {
Label skip; Label skip;
if (cc != al) { if (cc != al) {
__ Branch(&skip, NegateCondition(cc), src1, src2); __ Branch(&skip, NegateCondition(cc), src1, src2);
......
...@@ -693,7 +693,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, ...@@ -693,7 +693,7 @@ void LCodeGen::DeoptimizeIf(Condition cc,
ASSERT(FLAG_deopt_every_n_times == 0); // Not yet implemented on x64. ASSERT(FLAG_deopt_every_n_times == 0); // Not yet implemented on x64.
if (FLAG_trap_on_deopt && info()->IsOptimizing()) { if (info()->ShouldTrapOnDeopt()) {
Label done; Label done;
if (cc != no_condition) { if (cc != no_condition) {
__ j(NegateCondition(cc), &done, Label::kNear); __ j(NegateCondition(cc), &done, Label::kNear);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment