Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(380)

Unified Diff: runtime/vm/intermediate_language_ia32.cc

Issue 10960014: Implement range analysis for smi values. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: cleanup Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/intermediate_language_ia32.cc
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 1390ee58360842783bce4572ce97c48269a13bed..3ccb8ba9317e63f6dc0464973751ecb1b73e69fa 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -1478,13 +1478,7 @@ void BinarySmiOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
Register result = locs()->out().reg();
ASSERT(left == result);
Label* deopt = NULL;
- switch (op_kind()) {
- case Token::kBIT_AND:
- case Token::kBIT_OR:
- case Token::kBIT_XOR:
- // Can't deoptimize. Arguments are already checked for smi.
- break;
- default:
+ if (CanDeoptimize()) {
deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
kDeoptBinarySmiOp);
}
@@ -1497,18 +1491,18 @@ void BinarySmiOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
switch (op_kind()) {
case Token::kADD:
__ addl(left, Immediate(imm));
- __ j(OVERFLOW, deopt);
+ if (deopt != NULL) __ j(OVERFLOW, deopt);
break;
case Token::kSUB: {
__ subl(left, Immediate(imm));
- __ j(OVERFLOW, deopt);
+ if (deopt != NULL) __ j(OVERFLOW, deopt);
break;
}
case Token::kMUL: {
// Keep left value tagged and untag right value.
const intptr_t value = Smi::Cast(constant).Value();
__ imull(left, Immediate(value));
- __ j(OVERFLOW, deopt);
+ if (deopt != NULL) __ j(OVERFLOW, deopt);
break;
}
case Token::kBIT_AND: {
@@ -1559,12 +1553,12 @@ void BinarySmiOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
switch (op_kind()) {
case Token::kADD: {
__ addl(left, right);
- __ j(OVERFLOW, deopt);
+ if (deopt != NULL) __ j(OVERFLOW, deopt);
break;
}
case Token::kSUB: {
__ subl(left, right);
- __ j(OVERFLOW, deopt);
+ if (deopt != NULL) __ j(OVERFLOW, deopt);
break;
}
case Token::kMUL: {

Powered by Google App Engine
This is Rietveld 408576698