| 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/code-factory.h" | 5 #include "src/code-factory.h" |
| 6 #include "src/code-stubs.h" | 6 #include "src/code-stubs.h" |
| 7 #include "src/compiler/common-operator.h" | 7 #include "src/compiler/common-operator.h" |
| 8 #include "src/compiler/js-generic-lowering.h" | 8 #include "src/compiler/js-generic-lowering.h" |
| 9 #include "src/compiler/js-graph.h" | 9 #include "src/compiler/js-graph.h" |
| 10 #include "src/compiler/machine-operator.h" | 10 #include "src/compiler/machine-operator.h" |
| (...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 714 cache_type_true0 = cache_type; | 714 cache_type_true0 = cache_type; |
| 715 } | 715 } |
| 716 | 716 |
| 717 Node* if_false0 = graph()->NewNode(common()->IfFalse(), branch0); | 717 Node* if_false0 = graph()->NewNode(common()->IfFalse(), branch0); |
| 718 Node* cache_array_false0; | 718 Node* cache_array_false0; |
| 719 Node* cache_length_false0; | 719 Node* cache_length_false0; |
| 720 Node* cache_type_false0; | 720 Node* cache_type_false0; |
| 721 Node* efalse0; | 721 Node* efalse0; |
| 722 { | 722 { |
| 723 // FixedArray case. | 723 // FixedArray case. |
| 724 Node* object_instance_type = efalse0 = graph()->NewNode( | 724 cache_type_false0 = jsgraph()->OneConstant(); // Smi means slow check |
| 725 machine()->Load(MachineType::Uint8()), object_map, | |
| 726 jsgraph()->IntPtrConstant(Map::kInstanceTypeOffset - kHeapObjectTag), | |
| 727 effect, if_false0); | |
| 728 | |
| 729 Node* check1 = | |
| 730 graph()->NewNode(machine()->Word32Equal(), object_instance_type, | |
| 731 jsgraph()->Uint32Constant(JS_PROXY_TYPE)); | |
| 732 Node* branch1 = graph()->NewNode(common()->Branch(BranchHint::kFalse), | |
| 733 check1, if_false0); | |
| 734 | |
| 735 Node* if_true1 = graph()->NewNode(common()->IfTrue(), branch1); | |
| 736 Node* cache_type_true1 = jsgraph()->ZeroConstant(); // Zero indicates proxy | |
| 737 | |
| 738 Node* if_false1 = graph()->NewNode(common()->IfFalse(), branch1); | |
| 739 Node* cache_type_false1 = jsgraph()->OneConstant(); // One means slow check | |
| 740 | |
| 741 if_false0 = graph()->NewNode(common()->Merge(2), if_true1, if_false1); | |
| 742 cache_type_false0 = | |
| 743 graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), | |
| 744 cache_type_true1, cache_type_false1, if_false0); | |
| 745 | |
| 746 cache_array_false0 = cache_type; | 725 cache_array_false0 = cache_type; |
| 747 cache_length_false0 = efalse0 = graph()->NewNode( | 726 cache_length_false0 = efalse0 = graph()->NewNode( |
| 748 machine()->Load(MachineType::AnyTagged()), cache_array_false0, | 727 machine()->Load(MachineType::AnyTagged()), cache_array_false0, |
| 749 jsgraph()->IntPtrConstant(FixedArray::kLengthOffset - kHeapObjectTag), | 728 jsgraph()->IntPtrConstant(FixedArray::kLengthOffset - kHeapObjectTag), |
| 750 efalse0, if_false0); | 729 effect, if_false0); |
| 751 } | 730 } |
| 752 | 731 |
| 753 control = graph()->NewNode(common()->Merge(2), if_true0, if_false0); | 732 control = graph()->NewNode(common()->Merge(2), if_true0, if_false0); |
| 754 effect = graph()->NewNode(common()->EffectPhi(2), etrue0, efalse0, control); | 733 effect = graph()->NewNode(common()->EffectPhi(2), etrue0, efalse0, control); |
| 755 Node* cache_array = | 734 Node* cache_array = |
| 756 graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), | 735 graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), |
| 757 cache_array_true0, cache_array_false0, control); | 736 cache_array_true0, cache_array_false0, control); |
| 758 Node* cache_length = | 737 Node* cache_length = |
| 759 graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), | 738 graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), |
| 760 cache_length_true0, cache_length_false0, control); | 739 cache_length_true0, cache_length_false0, control); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 } | 864 } |
| 886 | 865 |
| 887 | 866 |
| 888 MachineOperatorBuilder* JSGenericLowering::machine() const { | 867 MachineOperatorBuilder* JSGenericLowering::machine() const { |
| 889 return jsgraph()->machine(); | 868 return jsgraph()->machine(); |
| 890 } | 869 } |
| 891 | 870 |
| 892 } // namespace compiler | 871 } // namespace compiler |
| 893 } // namespace internal | 872 } // namespace internal |
| 894 } // namespace v8 | 873 } // namespace v8 |
| OLD | NEW |