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

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: addressed majority of comments 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..4e7e54a0382e6cac1a00c1744317887bf8d892cf 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,18 +1553,18 @@ 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: {
__ SmiUntag(left);
__ imull(left, right);
- __ j(OVERFLOW, deopt);
+ if (deopt != NULL) __ j(OVERFLOW, deopt);
break;
}
case Token::kBIT_AND: {

Powered by Google App Engine
This is Rietveld 408576698