OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/access-builder.h" | 5 #include "src/compiler/access-builder.h" |
6 #include "src/compiler/graph-inl.h" | 6 #include "src/compiler/graph-inl.h" |
7 #include "src/compiler/js-builtin-reducer.h" | 7 #include "src/compiler/js-builtin-reducer.h" |
8 #include "src/compiler/js-typed-lowering.h" | 8 #include "src/compiler/js-typed-lowering.h" |
9 #include "src/compiler/node-aux-data-inl.h" | 9 #include "src/compiler/node-aux-data-inl.h" |
10 #include "src/compiler/node-properties-inl.h" | 10 #include "src/compiler/node-properties-inl.h" |
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
552 elements, NodeProperties::GetEffectInput(node)); | 552 elements, NodeProperties::GetEffectInput(node)); |
553 element_access = AccessBuilder::ForTypedArrayElement(type, true); | 553 element_access = AccessBuilder::ForTypedArrayElement(type, true); |
554 } else { | 554 } else { |
555 DCHECK(IsFixedTypedArrayElementsKind(elements_kind)); | 555 DCHECK(IsFixedTypedArrayElementsKind(elements_kind)); |
556 element_access = AccessBuilder::ForTypedArrayElement(type, false); | 556 element_access = AccessBuilder::ForTypedArrayElement(type, false); |
557 } | 557 } |
558 Node* value = | 558 Node* value = |
559 graph()->NewNode(simplified()->LoadElement(element_access), elements, | 559 graph()->NewNode(simplified()->LoadElement(element_access), elements, |
560 key, jsgraph()->Uint32Constant(length), | 560 key, jsgraph()->Uint32Constant(length), |
561 NodeProperties::GetEffectInput(node)); | 561 NodeProperties::GetEffectInput(node)); |
562 // TODO(titzer): Remove this hack once float32 is properly supported in | |
563 // simplified lowering. | |
564 if (element_access.machine_type == kRepFloat32) { | |
565 Node* change = | |
566 graph()->NewNode(machine()->ChangeFloat32ToFloat64(), value); | |
567 NodeProperties::ReplaceWithValue(node, change, value); | |
568 return Changed(value); | |
569 } | |
570 return ReplaceEagerly(node, value); | 562 return ReplaceEagerly(node, value); |
571 } | 563 } |
572 return NoChange(); | 564 return NoChange(); |
573 } | 565 } |
574 | 566 |
575 | 567 |
576 Reduction JSTypedLowering::ReduceJSStoreProperty(Node* node) { | 568 Reduction JSTypedLowering::ReduceJSStoreProperty(Node* node) { |
577 Node* key = NodeProperties::GetValueInput(node, 1); | 569 Node* key = NodeProperties::GetValueInput(node, 1); |
578 Node* base = NodeProperties::GetValueInput(node, 0); | 570 Node* base = NodeProperties::GetValueInput(node, 0); |
579 Node* value = NodeProperties::GetValueInput(node, 2); | 571 Node* value = NodeProperties::GetValueInput(node, 2); |
(...skipping 23 matching lines...) Expand all Loading... |
603 DCHECK(IsFixedTypedArrayElementsKind(elements_kind)); | 595 DCHECK(IsFixedTypedArrayElementsKind(elements_kind)); |
604 element_access = AccessBuilder::ForTypedArrayElement(type, false); | 596 element_access = AccessBuilder::ForTypedArrayElement(type, false); |
605 } | 597 } |
606 | 598 |
607 Node* check = graph()->NewNode(machine()->Uint32LessThan(), key, | 599 Node* check = graph()->NewNode(machine()->Uint32LessThan(), key, |
608 jsgraph()->Uint32Constant(length)); | 600 jsgraph()->Uint32Constant(length)); |
609 Node* branch = graph()->NewNode(common()->Branch(), check, | 601 Node* branch = graph()->NewNode(common()->Branch(), check, |
610 NodeProperties::GetControlInput(node)); | 602 NodeProperties::GetControlInput(node)); |
611 | 603 |
612 Node* if_true = graph()->NewNode(common()->IfTrue(), branch); | 604 Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
613 // TODO(titzer): Remove this hack once float32 is properly supported in | 605 |
614 // simplified lowering. | |
615 if (element_access.machine_type == kRepFloat32) { | |
616 value = graph()->NewNode(machine()->TruncateFloat64ToFloat32(), value); | |
617 } | |
618 Node* store = | 606 Node* store = |
619 graph()->NewNode(simplified()->StoreElement(element_access), elements, | 607 graph()->NewNode(simplified()->StoreElement(element_access), elements, |
620 key, jsgraph()->Uint32Constant(length), value, | 608 key, jsgraph()->Uint32Constant(length), value, |
621 NodeProperties::GetEffectInput(node), if_true); | 609 NodeProperties::GetEffectInput(node), if_true); |
622 | 610 |
623 Node* if_false = graph()->NewNode(common()->IfFalse(), branch); | 611 Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
624 | 612 |
625 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); | 613 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |
626 Node* phi = graph()->NewNode(common()->EffectPhi(2), store, | 614 Node* phi = graph()->NewNode(common()->EffectPhi(2), store, |
627 NodeProperties::GetEffectInput(node), merge); | 615 NodeProperties::GetEffectInput(node), merge); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 return JSBuiltinReducer(jsgraph()).Reduce(node); | 702 return JSBuiltinReducer(jsgraph()).Reduce(node); |
715 default: | 703 default: |
716 break; | 704 break; |
717 } | 705 } |
718 return NoChange(); | 706 return NoChange(); |
719 } | 707 } |
720 | 708 |
721 } // namespace compiler | 709 } // namespace compiler |
722 } // namespace internal | 710 } // namespace internal |
723 } // namespace v8 | 711 } // namespace v8 |
OLD | NEW |