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

Side by Side Diff: pkg/compiler/lib/src/ssa/optimize.dart

Issue 703083002: --trust-primitives: Remove bounds checks and receiver and argument type checks (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month 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 | « pkg/compiler/lib/src/ssa/codegen_helpers.dart ('k') | no next file » | 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 part of ssa; 5 part of ssa;
6 6
7 abstract class OptimizationPhase { 7 abstract class OptimizationPhase {
8 String get name; 8 String get name;
9 void visitGraph(HGraph graph); 9 void visitGraph(HGraph graph);
10 } 10 }
(...skipping 28 matching lines...) Expand all
39 // Run trivial instruction simplification first to optimize 39 // Run trivial instruction simplification first to optimize
40 // some patterns useful for type conversion. 40 // some patterns useful for type conversion.
41 new SsaInstructionSimplifier(constantSystem, backend, work), 41 new SsaInstructionSimplifier(constantSystem, backend, work),
42 new SsaTypeConversionInserter(compiler), 42 new SsaTypeConversionInserter(compiler),
43 new SsaRedundantPhiEliminator(), 43 new SsaRedundantPhiEliminator(),
44 new SsaDeadPhiEliminator(), 44 new SsaDeadPhiEliminator(),
45 new SsaTypePropagator(compiler), 45 new SsaTypePropagator(compiler),
46 // After type propagation, more instructions can be 46 // After type propagation, more instructions can be
47 // simplified. 47 // simplified.
48 new SsaInstructionSimplifier(constantSystem, backend, work), 48 new SsaInstructionSimplifier(constantSystem, backend, work),
49 new SsaCheckInserter(backend, work, context.boundsChecked), 49 new SsaCheckInserter(compiler, backend, work, context.boundsChecked),
50 new SsaInstructionSimplifier(constantSystem, backend, work), 50 new SsaInstructionSimplifier(constantSystem, backend, work),
51 new SsaCheckInserter(backend, work, context.boundsChecked), 51 new SsaCheckInserter(compiler, backend, work, context.boundsChecked),
52 new SsaTypePropagator(compiler), 52 new SsaTypePropagator(compiler),
53 // Run a dead code eliminator before LICM because dead 53 // Run a dead code eliminator before LICM because dead
54 // interceptors are often in the way of LICM'able instructions. 54 // interceptors are often in the way of LICM'able instructions.
55 new SsaDeadCodeEliminator(compiler), 55 new SsaDeadCodeEliminator(compiler),
56 new SsaGlobalValueNumberer(compiler), 56 new SsaGlobalValueNumberer(compiler),
57 // After GVN, some instructions might need their type to be 57 // After GVN, some instructions might need their type to be
58 // updated because they now have different inputs. 58 // updated because they now have different inputs.
59 new SsaTypePropagator(compiler), 59 new SsaTypePropagator(compiler),
60 new SsaCodeMotion(), 60 new SsaCodeMotion(),
61 new SsaLoadElimination(compiler), 61 new SsaLoadElimination(compiler),
62 new SsaDeadPhiEliminator(), 62 new SsaDeadPhiEliminator(),
63 new SsaTypePropagator(compiler), 63 new SsaTypePropagator(compiler),
64 new SsaValueRangeAnalyzer(compiler, constantSystem, work), 64 new SsaValueRangeAnalyzer(compiler, constantSystem, work),
65 // Previous optimizations may have generated new 65 // Previous optimizations may have generated new
66 // opportunities for instruction simplification. 66 // opportunities for instruction simplification.
67 new SsaInstructionSimplifier(constantSystem, backend, work), 67 new SsaInstructionSimplifier(constantSystem, backend, work),
68 new SsaCheckInserter(backend, work, context.boundsChecked), 68 new SsaCheckInserter(compiler, backend, work, context.boundsChecked),
69 new SsaSimplifyInterceptors(compiler, constantSystem, work), 69 new SsaSimplifyInterceptors(compiler, constantSystem, work),
70 dce = new SsaDeadCodeEliminator(compiler), 70 dce = new SsaDeadCodeEliminator(compiler),
71 new SsaTypePropagator(compiler)]; 71 new SsaTypePropagator(compiler)];
72 runPhases(graph, phases); 72 runPhases(graph, phases);
73 if (dce.eliminatedSideEffects) { 73 if (dce.eliminatedSideEffects) {
74 phases = <OptimizationPhase>[ 74 phases = <OptimizationPhase>[
75 new SsaGlobalValueNumberer(compiler), 75 new SsaGlobalValueNumberer(compiler),
76 new SsaCodeMotion(), 76 new SsaCodeMotion(),
77 new SsaValueRangeAnalyzer(compiler, constantSystem, work), 77 new SsaValueRangeAnalyzer(compiler, constantSystem, work),
78 new SsaInstructionSimplifier(constantSystem, backend, work), 78 new SsaInstructionSimplifier(constantSystem, backend, work),
79 new SsaCheckInserter(backend, work, context.boundsChecked), 79 new SsaCheckInserter(
80 compiler, backend, work, context.boundsChecked),
80 new SsaSimplifyInterceptors(compiler, constantSystem, work), 81 new SsaSimplifyInterceptors(compiler, constantSystem, work),
81 new SsaDeadCodeEliminator(compiler)]; 82 new SsaDeadCodeEliminator(compiler)];
82 } else { 83 } else {
83 phases = <OptimizationPhase>[ 84 phases = <OptimizationPhase>[
84 // Run the simplifier to remove unneeded type checks inserted 85 // Run the simplifier to remove unneeded type checks inserted
85 // by type propagation. 86 // by type propagation.
86 new SsaInstructionSimplifier(constantSystem, backend, work)]; 87 new SsaInstructionSimplifier(constantSystem, backend, work)];
87 } 88 }
88 runPhases(graph, phases); 89 runPhases(graph, phases);
89 }); 90 });
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after
879 } 880 }
880 881
881 HInstruction visitOneShotInterceptor(HOneShotInterceptor node) { 882 HInstruction visitOneShotInterceptor(HOneShotInterceptor node) {
882 return handleInterceptedCall(node); 883 return handleInterceptedCall(node);
883 } 884 }
884 } 885 }
885 886
886 class SsaCheckInserter extends HBaseVisitor implements OptimizationPhase { 887 class SsaCheckInserter extends HBaseVisitor implements OptimizationPhase {
887 final Set<HInstruction> boundsChecked; 888 final Set<HInstruction> boundsChecked;
888 final CodegenWorkItem work; 889 final CodegenWorkItem work;
890 final Compiler compiler;
889 final JavaScriptBackend backend; 891 final JavaScriptBackend backend;
890 final String name = "SsaCheckInserter"; 892 final String name = "SsaCheckInserter";
891 HGraph graph; 893 HGraph graph;
892 894
893 SsaCheckInserter(this.backend, 895 SsaCheckInserter(this.compiler,
896 this.backend,
894 this.work, 897 this.work,
895 this.boundsChecked); 898 this.boundsChecked);
896 899
897 void visitGraph(HGraph graph) { 900 void visitGraph(HGraph graph) {
898 this.graph = graph; 901 this.graph = graph;
902
903 // In --trust-primitives mode we don't add bounds checks. This is better
904 // than trying to remove them later as the limit expression would become
905 // dead and require DCE.
906 if (compiler.trustPrimitives) return;
floitsch 2014/11/11 10:02:04 Ok for this CL, but in the future (i.e. the CPS IR
sra1 2014/11/12 02:27:37 I passed the bool.
907
899 visitDominatorTree(graph); 908 visitDominatorTree(graph);
900 } 909 }
901 910
902 void visitBasicBlock(HBasicBlock block) { 911 void visitBasicBlock(HBasicBlock block) {
903 HInstruction instruction = block.first; 912 HInstruction instruction = block.first;
904 while (instruction != null) { 913 while (instruction != null) {
905 HInstruction next = instruction.next; 914 HInstruction next = instruction.next;
906 instruction = instruction.accept(this); 915 instruction = instruction.accept(this);
907 instruction = next; 916 instruction = next;
908 } 917 }
(...skipping 1233 matching lines...) Expand 10 before | Expand all | Expand 10 after
2142 2151
2143 keyedValues.forEach((receiver, values) { 2152 keyedValues.forEach((receiver, values) {
2144 result.keyedValues[receiver] = 2153 result.keyedValues[receiver] =
2145 new Map<HInstruction, HInstruction>.from(values); 2154 new Map<HInstruction, HInstruction>.from(values);
2146 }); 2155 });
2147 2156
2148 result.nonEscapingReceivers.addAll(nonEscapingReceivers); 2157 result.nonEscapingReceivers.addAll(nonEscapingReceivers);
2149 return result; 2158 return result;
2150 } 2159 }
2151 } 2160 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/codegen_helpers.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698