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

Side by Side Diff: lib/compiler/implementation/ssa/nodes.dart

Issue 10855004: Fix dominatedUsers for phis. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 8 years, 4 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 | « no previous file | tests/language/type_propagation_phi_test.dart » ('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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 interface HVisitor<R> { 5 interface HVisitor<R> {
6 R visitAdd(HAdd node); 6 R visitAdd(HAdd node);
7 R visitBailoutTarget(HBailoutTarget node); 7 R visitBailoutTarget(HBailoutTarget node);
8 R visitBitAnd(HBitAnd node); 8 R visitBitAnd(HBitAnd node);
9 R visitBitNot(HBitNot node); 9 R visitBitNot(HBitNot node);
10 R visitBitOr(HBitOr node); 10 R visitBitOr(HBitOr node);
(...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 // potentially dominated by [other]. 956 // potentially dominated by [other].
957 HBasicBlock otherBlock = other.block; 957 HBasicBlock otherBlock = other.block;
958 for (int i = 0, length = usedBy.length; i < length; i++) { 958 for (int i = 0, length = usedBy.length; i < length; i++) {
959 HInstruction current = usedBy[i]; 959 HInstruction current = usedBy[i];
960 if (current !== other && otherBlock.dominates(current.block)) { 960 if (current !== other && otherBlock.dominates(current.block)) {
961 if (current.block === otherBlock) usersInCurrentBlock++; 961 if (current.block === otherBlock) usersInCurrentBlock++;
962 users.add(current); 962 users.add(current);
963 } 963 }
964 } 964 }
965 965
966 // Run through all the phis in the same block as [other] and remove them
967 // from the users set.
968 if (usersInCurrentBlock > 0) {
969 for (HPhi phi = otherBlock.phis.first; phi !== null; phi = phi.next) {
970 if (users.contains(phi)) {
971 users.remove(phi);
972 if (--usersInCurrentBlock == 0) break;
973 }
974 }
975 }
976
966 // Run through all the instructions before [other] and remove them 977 // Run through all the instructions before [other] and remove them
967 // from the users set. 978 // from the users set.
968 if (usersInCurrentBlock > 0) { 979 if (usersInCurrentBlock > 0) {
969 HInstruction current = otherBlock.first; 980 HInstruction current = otherBlock.first;
970 while (current !== other) { 981 while (current !== other) {
971 if (users.contains(current)) { 982 if (users.contains(current)) {
972 users.remove(current); 983 users.remove(current);
973 if (--usersInCurrentBlock == 0) break; 984 if (--usersInCurrentBlock == 0) break;
974 } 985 }
975 current = current.next; 986 current = current.next;
(...skipping 1707 matching lines...) Expand 10 before | Expand all | Expand 10 after
2683 HBasicBlock get start() => expression.start; 2694 HBasicBlock get start() => expression.start;
2684 HBasicBlock get end() { 2695 HBasicBlock get end() {
2685 // We don't create a switch block if there are no cases. 2696 // We don't create a switch block if there are no cases.
2686 assert(!statements.isEmpty()); 2697 assert(!statements.isEmpty());
2687 return statements.last().end; 2698 return statements.last().end;
2688 } 2699 }
2689 2700
2690 bool accept(HStatementInformationVisitor visitor) => 2701 bool accept(HStatementInformationVisitor visitor) =>
2691 visitor.visitSwitchInfo(this); 2702 visitor.visitSwitchInfo(this);
2692 } 2703 }
OLDNEW
« no previous file with comments | « no previous file | tests/language/type_propagation_phi_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698