OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "src/compiler/effect-control-linearizer.h" | 5 #include "src/compiler/effect-control-linearizer.h" |
6 | 6 |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 #include "src/compiler/access-builder.h" | 8 #include "src/compiler/access-builder.h" |
9 #include "src/compiler/js-graph.h" | 9 #include "src/compiler/js-graph.h" |
10 #include "src/compiler/linkage.h" | 10 #include "src/compiler/linkage.h" |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 // Schedule the call's IfSuccess node (if there is no exception use). | 335 // Schedule the call's IfSuccess node (if there is no exception use). |
336 TryScheduleCallIfSuccess(node, control); | 336 TryScheduleCallIfSuccess(node, control); |
337 } | 337 } |
338 } | 338 } |
339 } | 339 } |
340 | 340 |
341 bool EffectControlLinearizer::TryWireInStateEffect(Node* node, Node** effect, | 341 bool EffectControlLinearizer::TryWireInStateEffect(Node* node, Node** effect, |
342 Node** control) { | 342 Node** control) { |
343 ValueEffectControl state(nullptr, nullptr, nullptr); | 343 ValueEffectControl state(nullptr, nullptr, nullptr); |
344 switch (node->opcode()) { | 344 switch (node->opcode()) { |
| 345 case IrOpcode::kGuard: |
| 346 state = LowerGuard(node, *effect, *control); |
| 347 break; |
345 case IrOpcode::kChangeBitToTagged: | 348 case IrOpcode::kChangeBitToTagged: |
346 state = LowerChangeBitToTagged(node, *effect, *control); | 349 state = LowerChangeBitToTagged(node, *effect, *control); |
347 break; | 350 break; |
348 case IrOpcode::kChangeInt31ToTaggedSigned: | 351 case IrOpcode::kChangeInt31ToTaggedSigned: |
349 state = LowerChangeInt31ToTaggedSigned(node, *effect, *control); | 352 state = LowerChangeInt31ToTaggedSigned(node, *effect, *control); |
350 break; | 353 break; |
351 case IrOpcode::kChangeInt32ToTagged: | 354 case IrOpcode::kChangeInt32ToTagged: |
352 state = LowerChangeInt32ToTagged(node, *effect, *control); | 355 state = LowerChangeInt32ToTagged(node, *effect, *control); |
353 break; | 356 break; |
354 case IrOpcode::kChangeUint32ToTagged: | 357 case IrOpcode::kChangeUint32ToTagged: |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 break; | 398 break; |
396 default: | 399 default: |
397 return false; | 400 return false; |
398 } | 401 } |
399 NodeProperties::ReplaceUses(node, state.value); | 402 NodeProperties::ReplaceUses(node, state.value); |
400 *effect = state.effect; | 403 *effect = state.effect; |
401 *control = state.control; | 404 *control = state.control; |
402 return true; | 405 return true; |
403 } | 406 } |
404 | 407 |
| 408 EffectControlLinearizer::ValueEffectControl EffectControlLinearizer::LowerGuard( |
| 409 Node* node, Node* effect, Node* control) { |
| 410 Node* value = node->InputAt(0); |
| 411 return ValueEffectControl(value, effect, control); |
| 412 } |
| 413 |
405 EffectControlLinearizer::ValueEffectControl | 414 EffectControlLinearizer::ValueEffectControl |
406 EffectControlLinearizer::LowerChangeFloat64ToTagged(Node* node, Node* effect, | 415 EffectControlLinearizer::LowerChangeFloat64ToTagged(Node* node, Node* effect, |
407 Node* control) { | 416 Node* control) { |
408 Node* value = node->InputAt(0); | 417 Node* value = node->InputAt(0); |
409 | 418 |
410 Node* value32 = graph()->NewNode(machine()->RoundFloat64ToInt32(), value); | 419 Node* value32 = graph()->NewNode(machine()->RoundFloat64ToInt32(), value); |
411 Node* check_same = graph()->NewNode( | 420 Node* check_same = graph()->NewNode( |
412 machine()->Float64Equal(), value, | 421 machine()->Float64Equal(), value, |
413 graph()->NewNode(machine()->ChangeInt32ToFloat64(), value32)); | 422 graph()->NewNode(machine()->ChangeInt32ToFloat64(), value32)); |
414 Node* branch_same = graph()->NewNode(common()->Branch(), check_same, control); | 423 Node* branch_same = graph()->NewNode(common()->Branch(), check_same, control); |
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
955 return jsgraph()->Int32Constant(Smi::kMaxValue); | 964 return jsgraph()->Int32Constant(Smi::kMaxValue); |
956 } | 965 } |
957 | 966 |
958 Node* EffectControlLinearizer::SmiShiftBitsConstant() { | 967 Node* EffectControlLinearizer::SmiShiftBitsConstant() { |
959 return jsgraph()->IntPtrConstant(kSmiShiftSize + kSmiTagSize); | 968 return jsgraph()->IntPtrConstant(kSmiShiftSize + kSmiTagSize); |
960 } | 969 } |
961 | 970 |
962 } // namespace compiler | 971 } // namespace compiler |
963 } // namespace internal | 972 } // namespace internal |
964 } // namespace v8 | 973 } // namespace v8 |
OLD | NEW |