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

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

Issue 2301293002: kernel -> ssa: implement if-statements (Closed)
Patch Set: add visitNot Created 4 years, 3 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 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import '../elements/elements.dart'; 5 import '../elements/elements.dart';
6 import '../types/types.dart'; 6 import '../types/types.dart';
7
8 import 'locals_handler.dart';
7 import 'nodes.dart'; 9 import 'nodes.dart';
8 10
9 /// Base class for objects that build up an SSA graph. 11 /// Base class for objects that build up an SSA graph.
10 /// 12 ///
11 /// This contains helpers for building the graph and tracking information about 13 /// This contains helpers for building the graph and tracking information about
12 /// the current state of the graph being built. 14 /// the current state of the graph being built.
13 abstract class GraphBuilder { 15 abstract class GraphBuilder {
14 /// Holds the resulting SSA graph. 16 /// Holds the resulting SSA graph.
15 final HGraph graph = new HGraph(); 17 final HGraph graph = new HGraph();
16 18
19 /// Used to track the locals while building the graph.
20 LocalsHandler localsHandler;
21
17 /// A stack of instructions. 22 /// A stack of instructions.
18 /// 23 ///
19 /// We build the SSA graph by simulating a stack machine. 24 /// We build the SSA graph by simulating a stack machine.
20 List<HInstruction> stack = <HInstruction>[]; 25 List<HInstruction> stack = <HInstruction>[];
21 26
22 void push(HInstruction instruction) { 27 void push(HInstruction instruction) {
23 add(instruction); 28 add(instruction);
24 stack.add(instruction); 29 stack.add(instruction);
25 } 30 }
26 31
27 HInstruction pop() { 32 HInstruction pop() {
28 return stack.removeLast(); 33 return stack.removeLast();
29 } 34 }
30 35
36 /// Pops the most recent instruction from the stack and 'boolifies' it.
37 ///
38 /// Boolification is checking if the value is '=== true'.
39 HInstruction popBoolified();
40
41 /// Pushes a boolean checking [expression] against null.
42 pushCheckNull(HInstruction expression);
43
31 void dup() { 44 void dup() {
32 stack.add(stack.last); 45 stack.add(stack.last);
33 } 46 }
34 47
35 HBasicBlock _current; 48 HBasicBlock _current;
36 49
37 /// The current block to add instructions to. Might be null, if we are 50 /// The current block to add instructions to. Might be null, if we are
38 /// visiting dead code, but see [isReachable]. 51 /// visiting dead code, but see [isReachable].
39 HBasicBlock get current => _current; 52 HBasicBlock get current => _current;
40 53
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 HParameterValue result = new HParameterValue(parameter, type); 127 HParameterValue result = new HParameterValue(parameter, type);
115 if (lastAddedParameter == null) { 128 if (lastAddedParameter == null) {
116 graph.entry.addBefore(graph.entry.first, result); 129 graph.entry.addBefore(graph.entry.first, result);
117 } else { 130 } else {
118 graph.entry.addAfter(lastAddedParameter, result); 131 graph.entry.addAfter(lastAddedParameter, result);
119 } 132 }
120 lastAddedParameter = result; 133 lastAddedParameter = result;
121 return result; 134 return result;
122 } 135 }
123 } 136 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder_kernel.dart ('k') | pkg/compiler/lib/src/ssa/locals_handler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698