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

Side by Side Diff: src/compiler/effect-control-linearizer.h

Issue 2571903004: [turbofan] Introduce graph assembler to build effect-control-linearizer sub-graphs. (Closed)
Patch Set: Fixes Created 3 years, 12 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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_ 5 #ifndef V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_
6 #define V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_ 6 #define V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_
7 7
8 #include "src/compiler/common-operator.h" 8 #include "src/compiler/common-operator.h"
9 #include "src/compiler/graph-assembler.h"
9 #include "src/compiler/node.h" 10 #include "src/compiler/node.h"
10 #include "src/compiler/simplified-operator.h" 11 #include "src/compiler/simplified-operator.h"
11 #include "src/globals.h" 12 #include "src/globals.h"
12 13
13 namespace v8 { 14 namespace v8 {
14 namespace internal { 15 namespace internal {
15 16
16 // Forward declarations. 17 // Forward declarations.
17 class Callable; 18 class Callable;
18 class Zone; 19 class Zone;
(...skipping 12 matching lines...) Expand all
31 public: 32 public:
32 EffectControlLinearizer(JSGraph* graph, Schedule* schedule, Zone* temp_zone, 33 EffectControlLinearizer(JSGraph* graph, Schedule* schedule, Zone* temp_zone,
33 SourcePositionTable* source_positions); 34 SourcePositionTable* source_positions);
34 35
35 void Run(); 36 void Run();
36 37
37 private: 38 private:
38 void ProcessNode(Node* node, Node** frame_state, Node** effect, 39 void ProcessNode(Node* node, Node** frame_state, Node** effect,
39 Node** control); 40 Node** control);
40 41
41 struct ValueEffectControl {
42 Node* value;
43 Node* effect;
44 Node* control;
45 ValueEffectControl(Node* value, Node* effect, Node* control)
46 : value(value), effect(effect), control(control) {}
47 };
48
49 bool TryWireInStateEffect(Node* node, Node* frame_state, Node** effect, 42 bool TryWireInStateEffect(Node* node, Node* frame_state, Node** effect,
50 Node** control); 43 Node** control);
51 ValueEffectControl LowerChangeBitToTagged(Node* node, Node* effect, 44 Node* LowerChangeBitToTagged(Node* node);
52 Node* control); 45 Node* LowerChangeInt31ToTaggedSigned(Node* node);
53 ValueEffectControl LowerChangeInt31ToTaggedSigned(Node* node, Node* effect, 46 Node* LowerChangeInt32ToTagged(Node* node);
54 Node* control); 47 Node* LowerChangeUint32ToTagged(Node* node);
55 ValueEffectControl LowerChangeInt32ToTagged(Node* node, Node* effect, 48 Node* LowerChangeFloat64ToTagged(Node* node);
56 Node* control); 49 Node* LowerChangeFloat64ToTaggedPointer(Node* node);
57 ValueEffectControl LowerChangeUint32ToTagged(Node* node, Node* effect, 50 Node* LowerChangeTaggedSignedToInt32(Node* node);
58 Node* control); 51 Node* LowerChangeTaggedToBit(Node* node);
59 ValueEffectControl LowerChangeFloat64ToTagged(Node* node, Node* effect, 52 Node* LowerChangeTaggedToInt32(Node* node);
60 Node* control); 53 Node* LowerChangeTaggedToUint32(Node* node);
61 ValueEffectControl LowerChangeFloat64ToTaggedPointer(Node* node, Node* effect, 54 Node* LowerCheckBounds(Node* node, Node* frame_state);
62 Node* control); 55 Node* LowerCheckMaps(Node* node, Node* frame_state);
63 ValueEffectControl LowerChangeTaggedSignedToInt32(Node* node, Node* effect, 56 Node* LowerCheckNumber(Node* node, Node* frame_state);
64 Node* control); 57 Node* LowerCheckString(Node* node, Node* frame_state);
65 ValueEffectControl LowerChangeTaggedToBit(Node* node, Node* effect, 58 Node* LowerCheckIf(Node* node, Node* frame_state);
66 Node* control); 59 Node* LowerCheckedInt32Add(Node* node, Node* frame_state);
67 ValueEffectControl LowerChangeTaggedToInt32(Node* node, Node* effect, 60 Node* LowerCheckedInt32Sub(Node* node, Node* frame_state);
68 Node* control); 61 Node* LowerCheckedInt32Div(Node* node, Node* frame_state);
69 ValueEffectControl LowerChangeTaggedToUint32(Node* node, Node* effect, 62 Node* LowerCheckedInt32Mod(Node* node, Node* frame_state);
70 Node* control); 63 Node* LowerCheckedUint32Div(Node* node, Node* frame_state);
71 ValueEffectControl LowerCheckBounds(Node* node, Node* frame_state, 64 Node* LowerCheckedUint32Mod(Node* node, Node* frame_state);
72 Node* effect, Node* control); 65 Node* LowerCheckedInt32Mul(Node* node, Node* frame_state);
73 ValueEffectControl LowerCheckMaps(Node* node, Node* frame_state, Node* effect, 66 Node* LowerCheckedInt32ToTaggedSigned(Node* node, Node* frame_state);
74 Node* control); 67 Node* LowerCheckedUint32ToInt32(Node* node, Node* frame_state);
75 ValueEffectControl LowerCheckNumber(Node* node, Node* frame_state, 68 Node* LowerCheckedUint32ToTaggedSigned(Node* node, Node* frame_state);
76 Node* effect, Node* control); 69 Node* LowerCheckedFloat64ToInt32(Node* node, Node* frame_state);
77 ValueEffectControl LowerCheckString(Node* node, Node* frame_state, 70 Node* LowerCheckedTaggedSignedToInt32(Node* node, Node* frame_state);
78 Node* effect, Node* control); 71 Node* LowerCheckedTaggedToInt32(Node* node, Node* frame_state);
79 ValueEffectControl LowerCheckIf(Node* node, Node* frame_state, Node* effect, 72 Node* LowerCheckedTaggedToFloat64(Node* node, Node* frame_state);
80 Node* control); 73 Node* LowerCheckedTaggedToTaggedSigned(Node* node, Node* frame_state);
81 ValueEffectControl LowerCheckedInt32Add(Node* node, Node* frame_state, 74 Node* LowerCheckedTaggedToTaggedPointer(Node* node, Node* frame_state);
82 Node* effect, Node* control); 75 Node* LowerChangeTaggedToFloat64(Node* node);
83 ValueEffectControl LowerCheckedInt32Sub(Node* node, Node* frame_state, 76 Node* LowerTruncateTaggedToBit(Node* node);
84 Node* effect, Node* control); 77 Node* LowerTruncateTaggedToFloat64(Node* node);
85 ValueEffectControl LowerCheckedInt32Div(Node* node, Node* frame_state, 78 Node* LowerTruncateTaggedToWord32(Node* node);
86 Node* effect, Node* control); 79 Node* LowerCheckedTruncateTaggedToWord32(Node* node, Node* frame_state);
87 ValueEffectControl LowerCheckedInt32Mod(Node* node, Node* frame_state, 80 Node* LowerObjectIsCallable(Node* node);
88 Node* effect, Node* control); 81 Node* LowerObjectIsNumber(Node* node);
89 ValueEffectControl LowerCheckedUint32Div(Node* node, Node* frame_state, 82 Node* LowerObjectIsReceiver(Node* node);
90 Node* effect, Node* control); 83 Node* LowerObjectIsSmi(Node* node);
91 ValueEffectControl LowerCheckedUint32Mod(Node* node, Node* frame_state, 84 Node* LowerObjectIsString(Node* node);
92 Node* effect, Node* control); 85 Node* LowerObjectIsUndetectable(Node* node);
93 ValueEffectControl LowerCheckedInt32Mul(Node* node, Node* frame_state, 86 Node* LowerNewRestParameterElements(Node* node);
94 Node* effect, Node* control); 87 Node* LowerNewUnmappedArgumentsElements(Node* node);
95 ValueEffectControl LowerCheckedInt32ToTaggedSigned(Node* node, 88 Node* LowerArrayBufferWasNeutered(Node* node);
96 Node* frame_state, 89 Node* LowerStringCharAt(Node* node);
97 Node* effect, 90 Node* LowerStringCharCodeAt(Node* node);
98 Node* control); 91 Node* LowerStringFromCharCode(Node* node);
99 ValueEffectControl LowerCheckedUint32ToInt32(Node* node, Node* frame_state, 92 Node* LowerStringFromCodePoint(Node* node);
100 Node* effect, Node* control); 93 Node* LowerStringEqual(Node* node);
101 ValueEffectControl LowerCheckedUint32ToTaggedSigned(Node* node, 94 Node* LowerStringLessThan(Node* node);
102 Node* frame_state, 95 Node* LowerStringLessThanOrEqual(Node* node);
103 Node* effect, 96 Node* LowerCheckFloat64Hole(Node* node, Node* frame_state);
104 Node* control); 97 Node* LowerCheckTaggedHole(Node* node, Node* frame_state);
105 ValueEffectControl LowerCheckedFloat64ToInt32(Node* node, Node* frame_state, 98 Node* LowerConvertTaggedHoleToUndefined(Node* node);
106 Node* effect, Node* control); 99 Node* LowerPlainPrimitiveToNumber(Node* node);
107 ValueEffectControl LowerCheckedTaggedSignedToInt32(Node* node, 100 Node* LowerPlainPrimitiveToWord32(Node* node);
108 Node* frame_state, 101 Node* LowerPlainPrimitiveToFloat64(Node* node);
109 Node* effect, 102 Node* LowerEnsureWritableFastElements(Node* node);
110 Node* control); 103 Node* LowerMaybeGrowFastElements(Node* node, Node* frame_state);
111 ValueEffectControl LowerCheckedTaggedToInt32(Node* node, Node* frame_state, 104 void LowerTransitionElementsKind(Node* node);
112 Node* effect, Node* control); 105 Node* LowerLoadTypedElement(Node* node);
113 ValueEffectControl LowerCheckedTaggedToFloat64(Node* node, Node* frame_state, 106 void LowerStoreTypedElement(Node* node);
114 Node* effect, Node* control);
115 ValueEffectControl LowerCheckedTaggedToTaggedSigned(Node* node,
116 Node* frame_state,
117 Node* effect,
118 Node* control);
119 ValueEffectControl LowerCheckedTaggedToTaggedPointer(Node* node,
120 Node* frame_state,
121 Node* effect,
122 Node* control);
123 ValueEffectControl LowerChangeTaggedToFloat64(Node* node, Node* effect,
124 Node* control);
125 ValueEffectControl LowerTruncateTaggedToBit(Node* node, Node* effect,
126 Node* control);
127 ValueEffectControl LowerTruncateTaggedToFloat64(Node* node, Node* effect,
128 Node* control);
129 ValueEffectControl LowerTruncateTaggedToWord32(Node* node, Node* effect,
130 Node* control);
131 ValueEffectControl LowerCheckedTruncateTaggedToWord32(Node* node,
132 Node* frame_state,
133 Node* effect,
134 Node* control);
135 ValueEffectControl LowerObjectIsCallable(Node* node, Node* effect,
136 Node* control);
137 ValueEffectControl LowerObjectIsNumber(Node* node, Node* effect,
138 Node* control);
139 ValueEffectControl LowerObjectIsReceiver(Node* node, Node* effect,
140 Node* control);
141 ValueEffectControl LowerObjectIsSmi(Node* node, Node* effect, Node* control);
142 ValueEffectControl LowerObjectIsString(Node* node, Node* effect,
143 Node* control);
144 ValueEffectControl LowerObjectIsUndetectable(Node* node, Node* effect,
145 Node* control);
146 ValueEffectControl LowerNewRestParameterElements(Node* node, Node* effect,
147 Node* control);
148 ValueEffectControl LowerNewUnmappedArgumentsElements(Node* node, Node* effect,
149 Node* control);
150 ValueEffectControl LowerArrayBufferWasNeutered(Node* node, Node* effect,
151 Node* control);
152 ValueEffectControl LowerStringCharAt(Node* node, Node* effect, Node* control);
153 ValueEffectControl LowerStringCharCodeAt(Node* node, Node* effect,
154 Node* control);
155 ValueEffectControl LowerStringFromCharCode(Node* node, Node* effect,
156 Node* control);
157 ValueEffectControl LowerStringFromCodePoint(Node* node, Node* effect,
158 Node* control);
159 ValueEffectControl LowerStringEqual(Node* node, Node* effect, Node* control);
160 ValueEffectControl LowerStringLessThan(Node* node, Node* effect,
161 Node* control);
162 ValueEffectControl LowerStringLessThanOrEqual(Node* node, Node* effect,
163 Node* control);
164 ValueEffectControl LowerCheckFloat64Hole(Node* node, Node* frame_state,
165 Node* effect, Node* control);
166 ValueEffectControl LowerCheckTaggedHole(Node* node, Node* frame_state,
167 Node* effect, Node* control);
168 ValueEffectControl LowerConvertTaggedHoleToUndefined(Node* node, Node* effect,
169 Node* control);
170 ValueEffectControl LowerPlainPrimitiveToNumber(Node* node, Node* effect,
171 Node* control);
172 ValueEffectControl LowerPlainPrimitiveToWord32(Node* node, Node* effect,
173 Node* control);
174 ValueEffectControl LowerPlainPrimitiveToFloat64(Node* node, Node* effect,
175 Node* control);
176 ValueEffectControl LowerEnsureWritableFastElements(Node* node, Node* effect,
177 Node* control);
178 ValueEffectControl LowerMaybeGrowFastElements(Node* node, Node* frame_state,
179 Node* effect, Node* control);
180 ValueEffectControl LowerTransitionElementsKind(Node* node, Node* effect,
181 Node* control);
182 ValueEffectControl LowerLoadTypedElement(Node* node, Node* effect,
183 Node* control);
184 ValueEffectControl LowerStoreTypedElement(Node* node, Node* effect,
185 Node* control);
186 107
187 // Lowering of optional operators. 108 // Lowering of optional operators.
188 ValueEffectControl LowerFloat64RoundUp(Node* node, Node* effect, 109 Maybe<Node*> LowerFloat64RoundUp(Node* node);
189 Node* control); 110 Maybe<Node*> LowerFloat64RoundDown(Node* node);
190 ValueEffectControl LowerFloat64RoundDown(Node* node, Node* effect, 111 Maybe<Node*> LowerFloat64RoundTiesEven(Node* node);
191 Node* control); 112 Maybe<Node*> LowerFloat64RoundTruncate(Node* node);
192 ValueEffectControl LowerFloat64RoundTiesEven(Node* node, Node* effect,
193 Node* control);
194 ValueEffectControl LowerFloat64RoundTruncate(Node* node, Node* effect,
195 Node* control);
196 113
197 ValueEffectControl AllocateHeapNumberWithValue(Node* node, Node* effect, 114 Node* AllocateHeapNumberWithValue(Node* node);
198 Node* control); 115 Node* BuildCheckedFloat64ToInt32(CheckForMinusZeroMode mode, Node* value,
199 ValueEffectControl BuildCheckedFloat64ToInt32(CheckForMinusZeroMode mode, 116 Node* frame_state);
200 Node* value, Node* frame_state, 117 Node* BuildCheckedHeapNumberOrOddballToFloat64(CheckTaggedInputMode mode,
201 Node* effect, Node* control); 118 Node* value,
202 ValueEffectControl BuildCheckedHeapNumberOrOddballToFloat64( 119 Node* frame_state);
203 CheckTaggedInputMode mode, Node* value, Node* frame_state, Node* effect, 120 Node* BuildFloat64RoundDown(Node* value);
204 Node* control); 121 Node* LowerStringComparison(Callable const& callable, Node* node);
205 ValueEffectControl BuildFloat64RoundDown(Node* value, Node* effect,
206 Node* control);
207 ValueEffectControl LowerStringComparison(Callable const& callable, Node* node,
208 Node* effect, Node* control);
209 122
210 Node* ChangeInt32ToSmi(Node* value); 123 Node* ChangeInt32ToSmi(Node* value);
Igor Sheludko 2017/01/02 13:23:26 I think these helper methods should live in the Gr
Jarin 2017/01/03 09:27:55 Acknowledged.
211 Node* ChangeUint32ToSmi(Node* value); 124 Node* ChangeUint32ToSmi(Node* value);
212 Node* ChangeInt32ToFloat64(Node* value);
213 Node* ChangeUint32ToFloat64(Node* value);
214 Node* ChangeSmiToInt32(Node* value); 125 Node* ChangeSmiToInt32(Node* value);
215 Node* ObjectIsSmi(Node* value); 126 Node* ObjectIsSmi(Node* value);
216 127
217 Node* SmiMaxValueConstant(); 128 Node* SmiMaxValueConstant();
218 Node* SmiShiftBitsConstant(); 129 Node* SmiShiftBitsConstant();
Igor Sheludko 2017/01/02 13:23:26 Same here.
Jarin 2017/01/03 09:27:55 Acknowledged.
219 130
220 Factory* factory() const; 131 Factory* factory() const;
221 Isolate* isolate() const; 132 Isolate* isolate() const;
222 JSGraph* jsgraph() const { return js_graph_; } 133 JSGraph* jsgraph() const { return js_graph_; }
223 Graph* graph() const; 134 Graph* graph() const;
224 Schedule* schedule() const { return schedule_; } 135 Schedule* schedule() const { return schedule_; }
225 Zone* temp_zone() const { return temp_zone_; } 136 Zone* temp_zone() const { return temp_zone_; }
226 CommonOperatorBuilder* common() const; 137 CommonOperatorBuilder* common() const;
227 SimplifiedOperatorBuilder* simplified() const; 138 SimplifiedOperatorBuilder* simplified() const;
228 MachineOperatorBuilder* machine() const; 139 MachineOperatorBuilder* machine() const;
229 140
230 Operator const* ToNumberOperator(); 141 GraphAssembler* gasm() { return &graph_assembler_; }
231 142
232 JSGraph* js_graph_; 143 JSGraph* js_graph_;
233 Schedule* schedule_; 144 Schedule* schedule_;
234 Zone* temp_zone_; 145 Zone* temp_zone_;
235 RegionObservability region_observability_ = RegionObservability::kObservable; 146 RegionObservability region_observability_ = RegionObservability::kObservable;
236 SourcePositionTable* source_positions_; 147 SourcePositionTable* source_positions_;
237 148 GraphAssembler graph_assembler_;
238 SetOncePointer<Operator const> to_number_operator_;
239 }; 149 };
240 150
241 } // namespace compiler 151 } // namespace compiler
242 } // namespace internal 152 } // namespace internal
243 } // namespace v8 153 } // namespace v8
244 154
245 #endif // V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_ 155 #endif // V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698