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

Side by Side Diff: src/compiler/js-native-context-specialization.cc

Issue 1709093002: [turbofan] Connect ObjectIsNumber to effect and control chains. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@move-change-low
Patch Set: Created 4 years, 10 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
« no previous file with comments | « src/compiler/graph-reducer.cc ('k') | src/compiler/pipeline.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/js-native-context-specialization.h" 5 #include "src/compiler/js-native-context-specialization.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/compilation-dependencies.h" 9 #include "src/compilation-dependencies.h"
10 #include "src/compiler/access-builder.h" 10 #include "src/compiler/access-builder.h"
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 field_access.name = MaybeHandle<Name>(); 283 field_access.name = MaybeHandle<Name>();
284 } 284 }
285 field_access.machine_type = MachineType::Float64(); 285 field_access.machine_type = MachineType::Float64();
286 } 286 }
287 this_value = this_effect = 287 this_value = this_effect =
288 graph()->NewNode(simplified()->LoadField(field_access), 288 graph()->NewNode(simplified()->LoadField(field_access),
289 this_storage, this_effect, this_control); 289 this_storage, this_effect, this_control);
290 } else { 290 } else {
291 DCHECK_EQ(AccessMode::kStore, access_mode); 291 DCHECK_EQ(AccessMode::kStore, access_mode);
292 if (field_type->Is(Type::UntaggedFloat64())) { 292 if (field_type->Is(Type::UntaggedFloat64())) {
293 Node* check = 293 Node* check = this_control = this_effect =
294 graph()->NewNode(simplified()->ObjectIsNumber(), this_value); 294 graph()->NewNode(simplified()->ObjectIsNumber(), this_value,
295 this_effect, this_control);
295 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), 296 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue),
296 check, this_control); 297 check, this_control);
297 exit_controls.push_back( 298 exit_controls.push_back(
298 graph()->NewNode(common()->IfFalse(), branch)); 299 graph()->NewNode(common()->IfFalse(), branch));
299 this_control = graph()->NewNode(common()->IfTrue(), branch); 300 this_control = graph()->NewNode(common()->IfTrue(), branch);
300 this_value = graph()->NewNode(common()->Guard(Type::Number()), 301 this_value = graph()->NewNode(common()->Guard(Type::Number()),
301 this_value, this_control); 302 this_value, this_control);
302 303
303 if (!field_index.is_inobject() || field_index.is_hidden_field() || 304 if (!field_index.is_inobject() || field_index.is_hidden_field() ||
304 !FLAG_unbox_double_fields) { 305 !FLAG_unbox_double_fields) {
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 // Certain stores need a prototype chain check because shape changes 646 // Certain stores need a prototype chain check because shape changes
646 // could allow callbacks on elements in the prototype chain that are 647 // could allow callbacks on elements in the prototype chain that are
647 // not compatible with (monomorphic) keyed stores. 648 // not compatible with (monomorphic) keyed stores.
648 Handle<JSObject> holder; 649 Handle<JSObject> holder;
649 if (access_info.holder().ToHandle(&holder)) { 650 if (access_info.holder().ToHandle(&holder)) {
650 AssumePrototypesStable(receiver_type, native_context, holder); 651 AssumePrototypesStable(receiver_type, native_context, holder);
651 } 652 }
652 653
653 // Check that the {index} is actually a Number. 654 // Check that the {index} is actually a Number.
654 if (!NumberMatcher(this_index).HasValue()) { 655 if (!NumberMatcher(this_index).HasValue()) {
655 Node* check = 656 Node* check = this_control = this_effect =
656 graph()->NewNode(simplified()->ObjectIsNumber(), this_index); 657 graph()->NewNode(simplified()->ObjectIsNumber(), this_index,
658 this_effect, this_control);
657 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), 659 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue),
658 check, this_control); 660 check, this_control);
659 exit_controls.push_back(graph()->NewNode(common()->IfFalse(), branch)); 661 exit_controls.push_back(graph()->NewNode(common()->IfFalse(), branch));
660 this_control = graph()->NewNode(common()->IfTrue(), branch); 662 this_control = graph()->NewNode(common()->IfTrue(), branch);
661 this_index = graph()->NewNode(common()->Guard(Type::Number()), this_index, 663 this_index = graph()->NewNode(common()->Guard(Type::Number()), this_index,
662 this_control); 664 this_control);
663 } 665 }
664 666
665 // Convert the {index} to an unsigned32 value and check if the result is 667 // Convert the {index} to an unsigned32 value and check if the result is
666 // equal to the original {index}. 668 // equal to the original {index}.
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 DCHECK_EQ(AccessMode::kStore, access_mode); 820 DCHECK_EQ(AccessMode::kStore, access_mode);
819 if (IsFastSmiElementsKind(elements_kind)) { 821 if (IsFastSmiElementsKind(elements_kind)) {
820 Node* check = graph()->NewNode(simplified()->ObjectIsSmi(), this_value); 822 Node* check = graph()->NewNode(simplified()->ObjectIsSmi(), this_value);
821 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), 823 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue),
822 check, this_control); 824 check, this_control);
823 exit_controls.push_back(graph()->NewNode(common()->IfFalse(), branch)); 825 exit_controls.push_back(graph()->NewNode(common()->IfFalse(), branch));
824 this_control = graph()->NewNode(common()->IfTrue(), branch); 826 this_control = graph()->NewNode(common()->IfTrue(), branch);
825 this_value = graph()->NewNode(common()->Guard(type_cache_.kSmi), 827 this_value = graph()->NewNode(common()->Guard(type_cache_.kSmi),
826 this_value, this_control); 828 this_value, this_control);
827 } else if (IsFastDoubleElementsKind(elements_kind)) { 829 } else if (IsFastDoubleElementsKind(elements_kind)) {
828 Node* check = 830 Node* check = this_control = this_effect =
829 graph()->NewNode(simplified()->ObjectIsNumber(), this_value); 831 graph()->NewNode(simplified()->ObjectIsNumber(), this_value,
832 this_effect, this_control);
830 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), 833 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue),
831 check, this_control); 834 check, this_control);
832 exit_controls.push_back(graph()->NewNode(common()->IfFalse(), branch)); 835 exit_controls.push_back(graph()->NewNode(common()->IfFalse(), branch));
833 this_control = graph()->NewNode(common()->IfTrue(), branch); 836 this_control = graph()->NewNode(common()->IfTrue(), branch);
834 this_value = graph()->NewNode(common()->Guard(Type::Number()), 837 this_value = graph()->NewNode(common()->Guard(Type::Number()),
835 this_value, this_control); 838 this_value, this_control);
836 } 839 }
837 this_effect = graph()->NewNode(simplified()->StoreElement(element_access), 840 this_effect = graph()->NewNode(simplified()->StoreElement(element_access),
838 this_elements, this_index, this_value, 841 this_elements, this_index, this_value,
839 this_effect, this_control); 842 this_effect, this_control);
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 } 1046 }
1044 1047
1045 1048
1046 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { 1049 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const {
1047 return jsgraph()->simplified(); 1050 return jsgraph()->simplified();
1048 } 1051 }
1049 1052
1050 } // namespace compiler 1053 } // namespace compiler
1051 } // namespace internal 1054 } // namespace internal
1052 } // namespace v8 1055 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/graph-reducer.cc ('k') | src/compiler/pipeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698