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

Side by Side Diff: runtime/vm/flow_graph_optimizer.cc

Issue 16780009: When canonicalize instances check if all fields are canonical. If a field is a non-canonical number… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/dart_entry.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/flow_graph_optimizer.h" 5 #include "vm/flow_graph_optimizer.h"
6 6
7 #include "vm/bit_vector.h" 7 #include "vm/bit_vector.h"
8 #include "vm/cha.h" 8 #include "vm/cha.h"
9 #include "vm/flow_graph_builder.h" 9 #include "vm/flow_graph_builder.h"
10 #include "vm/flow_graph_compiler.h" 10 #include "vm/flow_graph_compiler.h"
(...skipping 5412 matching lines...) Expand 10 before | Expand all | Expand 10 after
5423 const Integer& left_int = Integer::Cast(left); 5423 const Integer& left_int = Integer::Cast(left);
5424 const Integer& right_int = Integer::Cast(right); 5424 const Integer& right_int = Integer::Cast(right);
5425 switch (op_kind) { 5425 switch (op_kind) {
5426 case Token::kADD: 5426 case Token::kADD:
5427 case Token::kSUB: 5427 case Token::kSUB:
5428 case Token::kMUL: 5428 case Token::kMUL:
5429 case Token::kTRUNCDIV: 5429 case Token::kTRUNCDIV:
5430 case Token::kMOD: { 5430 case Token::kMOD: {
5431 Instance& result = Integer::ZoneHandle( 5431 Instance& result = Integer::ZoneHandle(
5432 left_int.ArithmeticOp(op_kind, right_int)); 5432 left_int.ArithmeticOp(op_kind, right_int));
5433 result = result.Canonicalize(); 5433 result = result.CheckAndCanonicalize(NULL);
5434 ASSERT(!result.IsNull());
5434 SetValue(instr, result); 5435 SetValue(instr, result);
5435 break; 5436 break;
5436 } 5437 }
5437 case Token::kSHL: 5438 case Token::kSHL:
5438 case Token::kSHR: 5439 case Token::kSHR:
5439 if (left.IsSmi() && right.IsSmi()) { 5440 if (left.IsSmi() && right.IsSmi()) {
5440 Instance& result = Integer::ZoneHandle( 5441 Instance& result = Integer::ZoneHandle(
5441 Smi::Cast(left_int).ShiftOp(op_kind, Smi::Cast(right_int))); 5442 Smi::Cast(left_int).ShiftOp(op_kind, Smi::Cast(right_int)));
5442 result = result.Canonicalize(); 5443 result = result.CheckAndCanonicalize(NULL);
5444 ASSERT(!result.IsNull());
5443 SetValue(instr, result); 5445 SetValue(instr, result);
5444 } else { 5446 } else {
5445 SetValue(instr, non_constant_); 5447 SetValue(instr, non_constant_);
5446 } 5448 }
5447 break; 5449 break;
5448 case Token::kBIT_AND: 5450 case Token::kBIT_AND:
5449 case Token::kBIT_OR: 5451 case Token::kBIT_OR:
5450 case Token::kBIT_XOR: { 5452 case Token::kBIT_XOR: {
5451 Instance& result = Integer::ZoneHandle( 5453 Instance& result = Integer::ZoneHandle(
5452 left_int.BitOp(op_kind, right_int)); 5454 left_int.BitOp(op_kind, right_int));
5453 result = result.Canonicalize(); 5455 result = result.CheckAndCanonicalize(NULL);
5456 ASSERT(!result.IsNull());
5454 SetValue(instr, result); 5457 SetValue(instr, result);
5455 break; 5458 break;
5456 } 5459 }
5457 case Token::kDIV: 5460 case Token::kDIV:
5458 SetValue(instr, non_constant_); 5461 SetValue(instr, non_constant_);
5459 break; 5462 break;
5460 default: 5463 default:
5461 UNREACHABLE(); 5464 UNREACHABLE();
5462 } 5465 }
5463 } else { 5466 } else {
(...skipping 1122 matching lines...) Expand 10 before | Expand all | Expand 10 after
6586 6589
6587 // Insert materializations at environment uses. 6590 // Insert materializations at environment uses.
6588 const Class& cls = Class::Handle(alloc->constructor().Owner()); 6591 const Class& cls = Class::Handle(alloc->constructor().Owner());
6589 for (intptr_t i = 0; i < exits.length(); i++) { 6592 for (intptr_t i = 0; i < exits.length(); i++) {
6590 CreateMaterializationAt(exits[i], alloc, cls, *fields); 6593 CreateMaterializationAt(exits[i], alloc, cls, *fields);
6591 } 6594 }
6592 } 6595 }
6593 6596
6594 6597
6595 } // namespace dart 6598 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_entry.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698