OLD | NEW |
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 5418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5429 const Integer& left_int = Integer::Cast(left); | 5429 const Integer& left_int = Integer::Cast(left); |
5430 const Integer& right_int = Integer::Cast(right); | 5430 const Integer& right_int = Integer::Cast(right); |
5431 switch (op_kind) { | 5431 switch (op_kind) { |
5432 case Token::kADD: | 5432 case Token::kADD: |
5433 case Token::kSUB: | 5433 case Token::kSUB: |
5434 case Token::kMUL: | 5434 case Token::kMUL: |
5435 case Token::kTRUNCDIV: | 5435 case Token::kTRUNCDIV: |
5436 case Token::kMOD: { | 5436 case Token::kMOD: { |
5437 Instance& result = Integer::ZoneHandle( | 5437 Instance& result = Integer::ZoneHandle( |
5438 left_int.ArithmeticOp(op_kind, right_int)); | 5438 left_int.ArithmeticOp(op_kind, right_int)); |
5439 result = result.Canonicalize(); | 5439 result = result.CheckAndCanonicalize(NULL); |
| 5440 ASSERT(!result.IsNull()); |
5440 SetValue(instr, result); | 5441 SetValue(instr, result); |
5441 break; | 5442 break; |
5442 } | 5443 } |
5443 case Token::kSHL: | 5444 case Token::kSHL: |
5444 case Token::kSHR: | 5445 case Token::kSHR: |
5445 if (left.IsSmi() && right.IsSmi()) { | 5446 if (left.IsSmi() && right.IsSmi()) { |
5446 Instance& result = Integer::ZoneHandle( | 5447 Instance& result = Integer::ZoneHandle( |
5447 Smi::Cast(left_int).ShiftOp(op_kind, Smi::Cast(right_int))); | 5448 Smi::Cast(left_int).ShiftOp(op_kind, Smi::Cast(right_int))); |
5448 result = result.Canonicalize(); | 5449 result = result.CheckAndCanonicalize(NULL); |
| 5450 ASSERT(!result.IsNull()); |
5449 SetValue(instr, result); | 5451 SetValue(instr, result); |
5450 } else { | 5452 } else { |
5451 SetValue(instr, non_constant_); | 5453 SetValue(instr, non_constant_); |
5452 } | 5454 } |
5453 break; | 5455 break; |
5454 case Token::kBIT_AND: | 5456 case Token::kBIT_AND: |
5455 case Token::kBIT_OR: | 5457 case Token::kBIT_OR: |
5456 case Token::kBIT_XOR: { | 5458 case Token::kBIT_XOR: { |
5457 Instance& result = Integer::ZoneHandle( | 5459 Instance& result = Integer::ZoneHandle( |
5458 left_int.BitOp(op_kind, right_int)); | 5460 left_int.BitOp(op_kind, right_int)); |
5459 result = result.Canonicalize(); | 5461 result = result.CheckAndCanonicalize(NULL); |
| 5462 ASSERT(!result.IsNull()); |
5460 SetValue(instr, result); | 5463 SetValue(instr, result); |
5461 break; | 5464 break; |
5462 } | 5465 } |
5463 case Token::kDIV: | 5466 case Token::kDIV: |
5464 SetValue(instr, non_constant_); | 5467 SetValue(instr, non_constant_); |
5465 break; | 5468 break; |
5466 default: | 5469 default: |
5467 UNREACHABLE(); | 5470 UNREACHABLE(); |
5468 } | 5471 } |
5469 } else { | 5472 } else { |
(...skipping 1122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6592 | 6595 |
6593 // Insert materializations at environment uses. | 6596 // Insert materializations at environment uses. |
6594 const Class& cls = Class::Handle(alloc->constructor().Owner()); | 6597 const Class& cls = Class::Handle(alloc->constructor().Owner()); |
6595 for (intptr_t i = 0; i < exits.length(); i++) { | 6598 for (intptr_t i = 0; i < exits.length(); i++) { |
6596 CreateMaterializationAt(exits[i], alloc, cls, *fields); | 6599 CreateMaterializationAt(exits[i], alloc, cls, *fields); |
6597 } | 6600 } |
6598 } | 6601 } |
6599 | 6602 |
6600 | 6603 |
6601 } // namespace dart | 6604 } // namespace dart |
OLD | NEW |