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

Side by Side Diff: pkg/compiler/lib/src/cps_ir/update_refinements.dart

Issue 1859343004: dartfmt pkg/compiler (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 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
OLDNEW
1 library dart2js.cps_ir.update_refinements; 1 library dart2js.cps_ir.update_refinements;
2 2
3 import 'cps_ir_nodes.dart'; 3 import 'cps_ir_nodes.dart';
4 import 'optimizers.dart' show Pass; 4 import 'optimizers.dart' show Pass;
5 import 'type_mask_system.dart'; 5 import 'type_mask_system.dart';
6 import '../world.dart'; 6 import '../world.dart';
7 7
8 /// Updates all references to use the most refined version in scope. 8 /// Updates all references to use the most refined version in scope.
9 /// 9 ///
10 /// [GVN] and [RedundantJoinElimination], and possibly other passes, can create 10 /// [GVN] and [RedundantJoinElimination], and possibly other passes, can create
(...skipping 26 matching lines...) Expand all
37 } 37 }
38 38
39 visitReceiverCheck(ReceiverCheck node) { 39 visitReceiverCheck(ReceiverCheck node) {
40 if (refine(node.valueRef)) { 40 if (refine(node.valueRef)) {
41 // Update the type if the input has changed. 41 // Update the type if the input has changed.
42 Primitive value = node.value; 42 Primitive value = node.value;
43 if (value.type.needsNoSuchMethodHandling(node.selector, classWorld)) { 43 if (value.type.needsNoSuchMethodHandling(node.selector, classWorld)) {
44 node.type = typeSystem.receiverTypeFor(node.selector, value.type); 44 node.type = typeSystem.receiverTypeFor(node.selector, value.type);
45 } else { 45 } else {
46 // Check is no longer needed. 46 // Check is no longer needed.
47 node..replaceUsesWith(value)..destroy(); 47 node
48 ..replaceUsesWith(value)
49 ..destroy();
48 LetPrim letPrim = node.parent; 50 LetPrim letPrim = node.parent;
49 letPrim.remove(); 51 letPrim.remove();
50 return; 52 return;
51 } 53 }
52 } 54 }
53 // Use the ReceiverCheck as a refinement. 55 // Use the ReceiverCheck as a refinement.
54 Primitive value = node.effectiveDefinition; 56 Primitive value = node.effectiveDefinition;
55 Primitive old = refinementFor[value]; 57 Primitive old = refinementFor[value];
56 refinementFor[value] = node; 58 refinementFor[value] = node;
57 pushAction(() { 59 pushAction(() {
58 refinementFor[value] = old; 60 refinementFor[value] = old;
59 }); 61 });
60 } 62 }
61 63
62 visitRefinement(Refinement node) { 64 visitRefinement(Refinement node) {
63 if (refine(node.value)) { 65 if (refine(node.value)) {
64 // Update the type if the input has changed. 66 // Update the type if the input has changed.
65 node.type = typeSystem.intersection(node.value.definition.type, 67 node.type =
66 node.refineType); 68 typeSystem.intersection(node.value.definition.type, node.refineType);
67 } 69 }
68 Primitive value = node.effectiveDefinition; 70 Primitive value = node.effectiveDefinition;
69 Primitive old = refinementFor[value]; 71 Primitive old = refinementFor[value];
70 refinementFor[value] = node; 72 refinementFor[value] = node;
71 pushAction(() { 73 pushAction(() {
72 refinementFor[value] = old; 74 refinementFor[value] = old;
73 }); 75 });
74 } 76 }
75 77
76 visitBoundsCheck(BoundsCheck node) { 78 visitBoundsCheck(BoundsCheck node) {
77 super.visitBoundsCheck(node); 79 super.visitBoundsCheck(node);
78 if (node.hasIntegerCheck && 80 if (node.hasIntegerCheck && typeSystem.isDefinitelyInt(node.index.type)) {
79 typeSystem.isDefinitelyInt(node.index.type)) {
80 node.checks &= ~BoundsCheck.INTEGER; 81 node.checks &= ~BoundsCheck.INTEGER;
81 } 82 }
82 } 83 }
83 84
84 processReference(Reference ref) { 85 processReference(Reference ref) {
85 refine(ref); 86 refine(ref);
86 } 87 }
87 88
88 bool refine(Reference ref) { 89 bool refine(Reference ref) {
89 Definition def = ref.definition; 90 Definition def = ref.definition;
90 if (def is Primitive) { 91 if (def is Primitive) {
91 Primitive refinement = refinementFor[def.effectiveDefinition]; 92 Primitive refinement = refinementFor[def.effectiveDefinition];
92 if (refinement != null && refinement != ref.definition) { 93 if (refinement != null && refinement != ref.definition) {
93 ref.changeTo(refinement); 94 ref.changeTo(refinement);
94 return true; 95 return true;
95 } 96 }
96 } 97 }
97 return false; 98 return false;
98 } 99 }
99 } 100 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/type_propagation.dart ('k') | pkg/compiler/lib/src/cps_ir/use_field_initializers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698