Reviewers: Rodolph Perfetta (ARM), ulan,
Description:
A64: Add support for --deopt-every-n-times for n != 2
To match arm, the DeoptimizeIf*() methods need to invoke the
DeoptimizeHeader() method explicitly, so we do the check even if the
condition does not hold.
BUG=none
[email protected],[email protected]
LOG=n
Please review this at https://codereview.chromium.org/155723004/
SVN Base: https://v8.googlecode.com/svn/branches/experimental/a64
Affected files (+17, -6 lines):
M src/a64/lithium-codegen-a64.cc
Index: src/a64/lithium-codegen-a64.cc
diff --git a/src/a64/lithium-codegen-a64.cc b/src/a64/lithium-codegen-a64.cc
index
eaeb9cee9041b2c621d0af99082553167904fe99..e8d4579d171793c62c97c8155fe6be6de5364a04
100644
--- a/src/a64/lithium-codegen-a64.cc
+++ b/src/a64/lithium-codegen-a64.cc
@@ -958,14 +958,25 @@ bool LCodeGen::DeoptimizeHeader(LEnvironment*
environment) {
return false;
}
- ASSERT(FLAG_deopt_every_n_times < 2); // Other values not supported on
A64.
- TODO_UNIMPLEMENTED("Support for FLAG_deopt_every_n_times >= 2.");
- if (FLAG_deopt_every_n_times == 1 &&
- !info()->IsStub() &&
- info()->opt_count() == id) {
- ASSERT(frame_is_built_);
+ if (FLAG_deopt_every_n_times != 0 && !info()->IsStub()) {
+ Label not_zero;
+ ExternalReference count =
ExternalReference::stress_deopt_count(isolate());
+
+ __ Push(x0, x1);
+ __ Mov(x0, Operand(count));
+ __ Ldr(w1, MemOperand(x0));
+ __ Subs(x1, x1, 1);
+ __ B(ge, ¬_zero);
+ __ Mov(w1, FLAG_deopt_every_n_times);
+ __ Str(w1, MemOperand(x0));
+ __ Pop(x0, x1);
__ Call(entry, RelocInfo::RUNTIME_ENTRY);
return false;
+
+ __ Bind(not_zero);
+ __ Str(w1, MemOperand(x0));
+ __ Pop(x0, x1);
+ return true;
}
return true;
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.