Home | History | Annotate | Download | only in compiler

Lines Matching refs:node

13 #include "src/compiler/node-matchers.h"
14 #include "src/compiler/node-properties.h"
27 Reduction JSIntrinsicLowering::Reduce(Node* node) {
28 if (node->opcode() != IrOpcode::kJSCallRuntime) return NoChange();
30 Runtime::FunctionForId(CallRuntimeParametersOf(node->op()).id());
34 return ReduceCreateIterResultObject(node);
36 return ReduceDeoptimizeNow(node);
38 return ReduceDoubleHi(node);
40 return ReduceDoubleLo(node);
42 return ReduceGeneratorClose(node);
44 return ReduceGeneratorGetInputOrDebugPos(node);
46 return ReduceGeneratorGetResumeMode(node);
48 return ReduceIsInstanceType(node, JS_ARRAY_TYPE);
50 return ReduceIsInstanceType(node, JS_TYPED_ARRAY_TYPE);
52 return ReduceIsInstanceType(node, JS_REGEXP_TYPE);
54 return ReduceIsJSReceiver(node);
56 return ReduceIsSmi(node);
58 return ReduceValueOf(node);
60 return ReduceFixedArrayGet(node);
62 return ReduceFixedArraySet(node);
64 return ReduceRegExpConstructResult(node);
66 return ReduceRegExpExec(node);
68 return ReduceRegExpFlags(node);
70 return ReduceRegExpSource(node);
72 return ReduceSubString(node);
74 return ReduceToInteger(node);
76 return ReduceToLength(node);
78 return ReduceToName(node);
80 return ReduceToNumber(node);
82 return ReduceToObject(node);
84 return ReduceToPrimitive(node);
86 return ReduceToString(node);
88 return ReduceCall(node);
90 return ReduceNewObject(node);
92 return ReduceGetSuperConstructor(node);
100 Reduction JSIntrinsicLowering::ReduceCreateIterResultObject(Node* node) {
101 Node* const value = NodeProperties::GetValueInput(node, 0);
102 Node* const done = NodeProperties::GetValueInput(node, 1);
103 Node* const context = NodeProperties::GetContextInput(node);
104 Node* const effect = NodeProperties::GetEffectInput(node);
105 return Change(node, javascript()->CreateIterResultObject(), value, done,
110 Reduction JSIntrinsicLowering::ReduceDeoptimizeNow(Node* node) {
112 Node* const frame_state = NodeProperties::GetFrameStateInput(node, 0);
113 Node* const effect = NodeProperties::GetEffectInput(node);
114 Node* const control = NodeProperties::GetControlInput(node);
117 Node* deoptimize =
123 node->TrimInputCount(0);
124 NodeProperties::ChangeOp(node, common()->Dead());
125 return Changed(node);
129 Reduction JSIntrinsicLowering::ReduceDoubleHi(Node* node) {
131 Node* renamed = graph()->NewNode(simplified()->TypeGuard(Type::Number()),
132 node->InputAt(0), graph()->start());
133 node->ReplaceInput(0, renamed);
134 return Change(node, machine()->Float64ExtractHighWord32());
138 Reduction JSIntrinsicLowering::ReduceDoubleLo(Node* node) {
140 Node* renamed = graph()->NewNode(simplified()->TypeGuard(Type::Number()),
141 node->InputAt(0), graph()->start());
142 node->ReplaceInput(0, renamed);
143 return Change(node, machine()->Float64ExtractLowWord32());
146 Reduction JSIntrinsicLowering::ReduceGeneratorClose(Node* node) {
147 Node* const generator = NodeProperties::GetValueInput(node, 0);
148 Node* const effect = NodeProperties::GetEffectInput(node);
149 Node* const control = NodeProperties::GetControlInput(node);
150 Node* const closed = jsgraph()->Constant(JSGeneratorObject::kGeneratorClosed);
151 Node* const undefined = jsgraph()->UndefinedConstant();
155 ReplaceWithValue(node, undefined, node);
156 NodeProperties::RemoveType(node);
157 return Change(node, op, generator, closed, effect, control);
160 Reduction JSIntrinsicLowering::ReduceGeneratorGetInputOrDebugPos(Node* node) {
161 Node* const generator = NodeProperties::GetValueInput(node, 0);
162 Node* const effect = NodeProperties::GetEffectInput(node);
163 Node* const control = NodeProperties::GetControlInput(node);
167 return Change(node, op, generator, effect, control);
170 Reduction JSIntrinsicLowering::ReduceGeneratorGetResumeMode(Node* node) {
171 Node* const generator = NodeProperties::GetValueInput(node, 0);
172 Node* const effect = NodeProperties::GetEffectInput(node);
173 Node* const control = NodeProperties::GetControlInput(node);
177 return Change(node, op, generator, effect, control);
181 Node* node, InstanceType instance_type) {
187 Node* value = NodeProperties::GetValueInput(node, 0);
188 Node* effect = NodeProperties::GetEffectInput(node);
189 Node* control = NodeProperties::GetControlInput(node);
191 Node* check = graph()->NewNode(simplified()->ObjectIsSmi(), value);
192 Node* branch = graph()->NewNode(common()->Branch(), check, control);
194 Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
195 Node* etrue = effect;
196 Node* vtrue = jsgraph()->FalseConstant();
198 Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
199 Node* efalse = graph()->NewNode(
204 Node* vfalse = graph()->NewNode(machine()->Word32Equal(), efalse,
207 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false);
209 // Replace all effect uses of {node} with the {ephi}.
210 Node* ephi = graph()->NewNode(common()->EffectPhi(2), etrue, efalse, merge);
211 ReplaceWithValue(node, node, ephi);
213 // Turn the {node} into a Phi.
214 return Change(node, common()->Phi(MachineRepresentation::kTagged, 2), vtrue,
219 Reduction JSIntrinsicLowering::ReduceIsJSReceiver(Node* node) {
220 return Change(node, simplified()->ObjectIsReceiver());
224 Reduction JSIntrinsicLowering::ReduceIsSmi(Node* node) {
225 return Change(node, simplified()->ObjectIsSmi());
229 Reduction JSIntrinsicLowering::ReduceValueOf(Node* node) {
242 Node* value = NodeProperties::GetValueInput(node, 0);
243 Node* effect = NodeProperties::GetEffectInput(node);
244 Node* control = NodeProperties::GetControlInput(node);
246 Node* check0 = graph()->NewNode(simplified()->ObjectIsSmi(), value);
247 Node* branch0 = graph()->NewNode(common()->Branch(), check0, control);
249 Node* if_true0 = graph()->NewNode(common()->IfTrue(), branch0);
250 Node* etrue0 = effect;
251 Node* vtrue0 = value;
253 Node* if_false0 = graph()->NewNode(common()->IfFalse(), branch0);
254 Node* efalse0;
255 Node* vfalse0;
257 Node* check1 = graph()->NewNode(
265 Node* branch1 = graph()->NewNode(common()->Branch(), check1, if_false0);
267 Node* if_true1 = graph()->NewNode(common()->IfTrue(), branch1);
268 Node* etrue1 =
271 Node* vtrue1 = etrue1;
273 Node* if_false1 = graph()->NewNode(common()->IfFalse(), branch1);
274 Node* efalse1 = effect;
275 Node* vfalse1 = value;
277 Node* merge1 = graph()->NewNode(merge_op, if_true1, if_false1);
282 Node* merge0 = graph()->NewNode(merge_op, if_true0, if_false0);
284 // Replace all effect uses of {node} with the {ephi0}.
285 Node* ephi0 = graph()->NewNode(ephi_op, etrue0, efalse0, merge0);
286 ReplaceWithValue(node, node, ephi0);
288 // Turn the {node} into a Phi.
289 return Change(node, phi_op, vtrue0, vfalse0, merge0);
293 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op) {
294 // Replace all effect uses of {node} with the effect dependency.
295 RelaxEffectsAndControls(node);
297 NodeProperties::RemoveNonValueInputs(node);
299 NodeProperties::ChangeOp(node, op);
300 return Changed(node);
304 Reduction JSIntrinsicLowering::ReduceFixedArrayGet(Node* node) {
305 Node* base = node->InputAt(0);
306 Node* index = node->InputAt(1);
307 Node* effect = NodeProperties::GetEffectInput(node);
308 Node* control = NodeProperties::GetControlInput(node);
310 node, simplified()->LoadElement(AccessBuilder::ForFixedArrayElement()),
315 Reduction JSIntrinsicLowering::ReduceFixedArraySet(Node* node) {
316 Node* base = node->InputAt(0);
317 Node* index = node->InputAt(1);
318 Node* value = node->InputAt(2);
319 Node* effect = NodeProperties::GetEffectInput(node);
320 Node* control = NodeProperties::GetControlInput(node);
321 Node* store = (graph()->NewNode(
324 ReplaceWithValue(node, value, store);
329 Reduction JSIntrinsicLowering::ReduceRegExpConstructResult(Node* node) {
331 return Change(node, CodeFactory::RegExpConstructResult(isolate()), 0);
335 Reduction JSIntrinsicLowering::ReduceRegExpExec(Node* node) {
336 return Change(node, CodeFactory::RegExpExec(isolate()), 4);
340 Reduction JSIntrinsicLowering::ReduceRegExpFlags(Node* node) {
341 Node* const receiver = NodeProperties::GetValueInput(node, 0);
342 Node* const effect = NodeProperties::GetEffectInput(node);
343 Node* const control = NodeProperties::GetControlInput(node);
346 return Change(node, op, receiver, effect, control);
350 Reduction JSIntrinsicLowering::ReduceRegExpSource(Node* node) {
351 Node* const receiver = NodeProperties::GetValueInput(node, 0);
352 Node* const effect = NodeProperties::GetEffectInput(node);
353 Node* const control = NodeProperties::GetControlInput(node);
356 return Change(node, op, receiver, effect, control);
360 Reduction JSIntrinsicLowering::ReduceSubString(Node* node) {
361 return Change(node, CodeFactory::SubString(isolate()), 3);
365 Reduction JSIntrinsicLowering::ReduceToInteger(Node* node) {
366 NodeProperties::ChangeOp(node, javascript()->ToInteger());
367 return Changed(node);
371 Reduction JSIntrinsicLowering::ReduceToName(Node* node) {
372 NodeProperties::ChangeOp(node, javascript()->ToName());
373 return Changed(node);
377 Reduction JSIntrinsicLowering::ReduceToNumber(Node* node) {
378 NodeProperties::ChangeOp(node, javascript()->ToNumber());
379 return Changed(node);
383 Reduction JSIntrinsicLowering::ReduceToLength(Node* node) {
384 NodeProperties::ChangeOp(node, javascript()->ToLength());
385 return Changed(node);
389 Reduction JSIntrinsicLowering::ReduceToObject(Node* node) {
390 NodeProperties::ChangeOp(node, javascript()->ToObject());
391 return Changed(node);
395 Reduction JSIntrinsicLowering::ReduceToPrimitive(Node* node) {
396 Node* value = NodeProperties::GetValueInput(node, 0);
399 ReplaceWithValue(node, value);
406 Reduction JSIntrinsicLowering::ReduceToString(Node* node) {
407 NodeProperties::ChangeOp(node, javascript()->ToString());
408 return Changed(node);
412 Reduction JSIntrinsicLowering::ReduceCall(Node* node) {
413 size_t const arity = CallRuntimeParametersOf(node->op()).arity();
414 NodeProperties::ChangeOp(node,
418 return Changed(node);
421 Reduction JSIntrinsicLowering::ReduceNewObject(Node* node) {
422 return Change(node, CodeFactory::FastNewObject(isolate()), 0);
425 Reduction JSIntrinsicLowering::ReduceGetSuperConstructor(Node* node) {
426 Node* active_function = NodeProperties::GetValueInput(node, 0);
427 Node* effect = NodeProperties::GetEffectInput(node);
428 Node* control = NodeProperties::GetControlInput(node);
429 Node* active_function_map = effect =
432 return Change(node, simplified()->LoadField(AccessBuilder::ForMapPrototype()),
436 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a,
437 Node* b) {
438 RelaxControls(node);
439 node->ReplaceInput(0, a);
440 node->ReplaceInput(1, b);
441 node->TrimInputCount(2);
442 NodeProperties::ChangeOp(node, op);
443 return Changed(node);
447 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a,
448 Node* b, Node* c) {
449 RelaxControls(node);
450 node->ReplaceInput(0, a);
451 node->ReplaceInput(1, b);
452 node->ReplaceInput(2, c);
453 node->TrimInputCount(3);
454 NodeProperties::ChangeOp(node, op);
455 return Changed(node);
459 Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a,
460 Node* b, Node* c, Node* d) {
461 RelaxControls(node);
462 node->ReplaceInput(0, a);
463 node->ReplaceInput(1, b);
464 node->ReplaceInput(2, c);
465 node->ReplaceInput(3, d);
466 node->TrimInputCount(4);
467 NodeProperties::ChangeOp(node, op);
468 return Changed(node);
472 Reduction JSIntrinsicLowering::Change(Node* node, Callable const& callable,
476 CallDescriptor::kNeedsFrameState, node->op()->properties());
477 node->InsertInput(graph()->zone(), 0,
479 NodeProperties::ChangeOp(node, common()->Call(desc));
480 return Changed(node);