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

Side by Side Diff: src/hydrogen.cc

Issue 23890030: Rollback trunk to 3.21.15. (Closed) Base URL: https://v8.googlecode.com/svn/trunk
Patch Set: Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « src/heap.cc ('k') | src/hydrogen-instructions.h » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1813 matching lines...) Expand 10 before | Expand all | Expand 10 after
1824 HValue* HGraphBuilder::BuildCreateAllocationMemento(HValue* previous_object, 1824 HValue* HGraphBuilder::BuildCreateAllocationMemento(HValue* previous_object,
1825 int previous_object_size, 1825 int previous_object_size,
1826 HValue* alloc_site) { 1826 HValue* alloc_site) {
1827 // TODO(mvstanton): ASSERT altered to CHECK to diagnose chromium bug 284577 1827 // TODO(mvstanton): ASSERT altered to CHECK to diagnose chromium bug 284577
1828 CHECK(alloc_site != NULL); 1828 CHECK(alloc_site != NULL);
1829 HInnerAllocatedObject* alloc_memento = Add<HInnerAllocatedObject>( 1829 HInnerAllocatedObject* alloc_memento = Add<HInnerAllocatedObject>(
1830 previous_object, previous_object_size); 1830 previous_object, previous_object_size);
1831 Handle<Map> alloc_memento_map( 1831 Handle<Map> alloc_memento_map(
1832 isolate()->heap()->allocation_memento_map()); 1832 isolate()->heap()->allocation_memento_map());
1833 AddStoreMapConstant(alloc_memento, alloc_memento_map); 1833 AddStoreMapConstant(alloc_memento, alloc_memento_map);
1834
1835 {
1836 // TODO(mvstanton): the code below is turned on to diagnose chromium bug
1837 // 284577.
1838 Handle<Map> alloc_site_map(isolate()->heap()->allocation_site_map());
1839 IfBuilder builder(this);
1840 builder.If<HCompareMap>(alloc_site, alloc_site_map);
1841 builder.Then();
1842 builder.Else();
1843 Add<HDebugBreak>();
1844 builder.End();
1845 }
1846
1847 HObjectAccess access = HObjectAccess::ForAllocationMementoSite(); 1834 HObjectAccess access = HObjectAccess::ForAllocationMementoSite();
1848 Add<HStoreNamedField>(alloc_memento, access, alloc_site); 1835 Add<HStoreNamedField>(alloc_memento, access, alloc_site);
1849 return alloc_memento; 1836 return alloc_memento;
1850 } 1837 }
1851 1838
1852 1839
1853 HInstruction* HGraphBuilder::BuildGetNativeContext() { 1840 HInstruction* HGraphBuilder::BuildGetNativeContext() {
1854 // Get the global context, then the native context 1841 // Get the global context, then the native context
1855 HInstruction* global_object = Add<HGlobalObject>(); 1842 HInstruction* global_object = Add<HGlobalObject>();
1856 HObjectAccess access = HObjectAccess::ForJSObjectOffset( 1843 HObjectAccess access = HObjectAccess::ForJSObjectOffset(
(...skipping 2321 matching lines...) Expand 10 before | Expand all | Expand 10 after
4178 HInstruction* literal; 4165 HInstruction* literal;
4179 4166
4180 // Check whether to use fast or slow deep-copying for boilerplate. 4167 // Check whether to use fast or slow deep-copying for boilerplate.
4181 int max_properties = kMaxFastLiteralProperties; 4168 int max_properties = kMaxFastLiteralProperties;
4182 Handle<Object> boilerplate(closure->literals()->get( 4169 Handle<Object> boilerplate(closure->literals()->get(
4183 expr->literal_index()), isolate()); 4170 expr->literal_index()), isolate());
4184 if (boilerplate->IsJSObject() && 4171 if (boilerplate->IsJSObject() &&
4185 IsFastLiteral(Handle<JSObject>::cast(boilerplate), 4172 IsFastLiteral(Handle<JSObject>::cast(boilerplate),
4186 kMaxFastLiteralDepth, 4173 kMaxFastLiteralDepth,
4187 &max_properties)) { 4174 &max_properties)) {
4188 Handle<JSObject> boilerplate_object = Handle<JSObject>::cast(boilerplate); 4175 Handle<JSObject> boilerplate_object =
4176 Handle<JSObject>::cast(boilerplate);
4189 4177
4190 literal = BuildFastLiteral(boilerplate_object, 4178 literal = BuildFastLiteral(boilerplate_object,
4191 Handle<Object>::null(), 4179 Handle<Object>::null(),
4192 DONT_TRACK_ALLOCATION_SITE); 4180 DONT_TRACK_ALLOCATION_SITE);
4193 } else { 4181 } else {
4194 NoObservableSideEffectsScope no_effects(this); 4182 NoObservableSideEffectsScope no_effects(this);
4195 Handle<FixedArray> closure_literals(closure->literals(), isolate()); 4183 Handle<FixedArray> closure_literals(closure->literals(), isolate());
4196 Handle<FixedArray> constant_properties = expr->constant_properties(); 4184 Handle<FixedArray> constant_properties = expr->constant_properties();
4197 int literal_index = expr->literal_index(); 4185 int literal_index = expr->literal_index();
4198 int flags = expr->fast_elements() 4186 int flags = expr->fast_elements()
(...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after
5141 5129
5142 case Variable::LOOKUP: 5130 case Variable::LOOKUP:
5143 return Bailout(kCompoundAssignmentToLookupSlot); 5131 return Bailout(kCompoundAssignmentToLookupSlot);
5144 } 5132 }
5145 return ast_context()->ReturnValue(Pop()); 5133 return ast_context()->ReturnValue(Pop());
5146 5134
5147 } else if (prop != NULL) { 5135 } else if (prop != NULL) {
5148 CHECK_ALIVE(VisitForValue(prop->obj())); 5136 CHECK_ALIVE(VisitForValue(prop->obj()));
5149 HValue* object = Top(); 5137 HValue* object = Top();
5150 HValue* key = NULL; 5138 HValue* key = NULL;
5151 if ((!prop->IsFunctionPrototype() && !prop->key()->IsPropertyName()) || 5139 if ((!prop->IsStringLength() &&
5140 !prop->IsFunctionPrototype() &&
5141 !prop->key()->IsPropertyName()) ||
5152 prop->IsStringAccess()) { 5142 prop->IsStringAccess()) {
5153 CHECK_ALIVE(VisitForValue(prop->key())); 5143 CHECK_ALIVE(VisitForValue(prop->key()));
5154 key = Top(); 5144 key = Top();
5155 } 5145 }
5156 5146
5157 CHECK_ALIVE(PushLoad(prop, object, key, expr->position())); 5147 CHECK_ALIVE(PushLoad(prop, object, key, expr->position()));
5158 5148
5159 CHECK_ALIVE(VisitForValue(expr->value())); 5149 CHECK_ALIVE(VisitForValue(expr->value()));
5160 HValue* right = Pop(); 5150 HValue* right = Pop();
5161 HValue* left = Pop(); 5151 HValue* left = Pop();
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after
5831 HValue* object, 5821 HValue* object,
5832 HValue* key, 5822 HValue* key,
5833 int position) { 5823 int position) {
5834 ValueContext for_value(this, ARGUMENTS_NOT_ALLOWED); 5824 ValueContext for_value(this, ARGUMENTS_NOT_ALLOWED);
5835 Push(object); 5825 Push(object);
5836 if (key != NULL) Push(key); 5826 if (key != NULL) Push(key);
5837 BuildLoad(expr, position, expr->LoadId()); 5827 BuildLoad(expr, position, expr->LoadId());
5838 } 5828 }
5839 5829
5840 5830
5841 static bool AreStringTypes(SmallMapList* types) {
5842 if (types == NULL || types->length() == 0) return false;
5843 for (int i = 0; i < types->length(); i++) {
5844 if (types->at(i)->instance_type() >= FIRST_NONSTRING_TYPE) return false;
5845 }
5846 return true;
5847 }
5848
5849
5850 void HOptimizedGraphBuilder::BuildLoad(Property* expr, 5831 void HOptimizedGraphBuilder::BuildLoad(Property* expr,
5851 int position, 5832 int position,
5852 BailoutId ast_id) { 5833 BailoutId ast_id) {
5853 HInstruction* instr = NULL; 5834 HInstruction* instr = NULL;
5854 if (expr->IsStringAccess()) { 5835 if (expr->IsStringLength()) {
5836 HValue* string = Pop();
5837 BuildCheckHeapObject(string);
5838 HInstruction* checkstring =
5839 AddInstruction(HCheckInstanceType::NewIsString(string, zone()));
5840 instr = BuildLoadStringLength(string, checkstring);
5841 } else if (expr->IsStringAccess()) {
5855 HValue* index = Pop(); 5842 HValue* index = Pop();
5856 HValue* string = Pop(); 5843 HValue* string = Pop();
5857 HValue* context = environment()->context(); 5844 HValue* context = environment()->context();
5858 HInstruction* char_code = 5845 HInstruction* char_code =
5859 BuildStringCharCodeAt(string, index); 5846 BuildStringCharCodeAt(string, index);
5860 AddInstruction(char_code); 5847 AddInstruction(char_code);
5861 instr = HStringCharFromCode::New(zone(), context, char_code); 5848 instr = HStringCharFromCode::New(zone(), context, char_code);
5862 5849
5863 } else if (expr->IsFunctionPrototype()) { 5850 } else if (expr->IsFunctionPrototype()) {
5864 HValue* function = Pop(); 5851 HValue* function = Pop();
(...skipping 15 matching lines...) Expand all
5880 AddCheckConstantFunction(holder, Top(), map); 5867 AddCheckConstantFunction(holder, Top(), map);
5881 if (FLAG_inline_accessors && 5868 if (FLAG_inline_accessors &&
5882 TryInlineGetter(getter, ast_id, expr->LoadId())) { 5869 TryInlineGetter(getter, ast_id, expr->LoadId())) {
5883 return; 5870 return;
5884 } 5871 }
5885 Add<HPushArgument>(Pop()); 5872 Add<HPushArgument>(Pop());
5886 instr = new(zone()) HCallConstantFunction(getter, 1); 5873 instr = new(zone()) HCallConstantFunction(getter, 1);
5887 } else { 5874 } else {
5888 instr = BuildLoadNamedMonomorphic(Pop(), name, map); 5875 instr = BuildLoadNamedMonomorphic(Pop(), name, map);
5889 } 5876 }
5890 } else if (AreStringTypes(types) &&
5891 name->Equals(isolate()->heap()->length_string())) {
5892 BuildCheckHeapObject(Pop());
5893 HValue* checked_object =
5894 AddInstruction(HCheckInstanceType::NewIsString(object, zone()));
5895 instr = BuildLoadStringLength(object, checked_object);
5896 } else if (types != NULL && types->length() > 1) { 5877 } else if (types != NULL && types->length() > 1) {
5897 return HandlePolymorphicLoadNamedField( 5878 return HandlePolymorphicLoadNamedField(
5898 position, ast_id, Pop(), types, name); 5879 position, ast_id, Pop(), types, name);
5899 } else { 5880 } else {
5900 instr = BuildLoadNamedGeneric(Pop(), name, expr); 5881 instr = BuildLoadNamedGeneric(Pop(), name, expr);
5901 } 5882 }
5902 5883
5903 } else { 5884 } else {
5904 HValue* key = Pop(); 5885 HValue* key = Pop();
5905 HValue* obj = Pop(); 5886 HValue* obj = Pop();
(...skipping 20 matching lines...) Expand all
5926 5907
5927 5908
5928 void HOptimizedGraphBuilder::VisitProperty(Property* expr) { 5909 void HOptimizedGraphBuilder::VisitProperty(Property* expr) {
5929 ASSERT(!HasStackOverflow()); 5910 ASSERT(!HasStackOverflow());
5930 ASSERT(current_block() != NULL); 5911 ASSERT(current_block() != NULL);
5931 ASSERT(current_block()->HasPredecessor()); 5912 ASSERT(current_block()->HasPredecessor());
5932 5913
5933 if (TryArgumentsAccess(expr)) return; 5914 if (TryArgumentsAccess(expr)) return;
5934 5915
5935 CHECK_ALIVE(VisitForValue(expr->obj())); 5916 CHECK_ALIVE(VisitForValue(expr->obj()));
5936 if ((!expr->IsFunctionPrototype() && !expr->key()->IsPropertyName()) || 5917 if ((!expr->IsStringLength() &&
5918 !expr->IsFunctionPrototype() &&
5919 !expr->key()->IsPropertyName()) ||
5937 expr->IsStringAccess()) { 5920 expr->IsStringAccess()) {
5938 CHECK_ALIVE(VisitForValue(expr->key())); 5921 CHECK_ALIVE(VisitForValue(expr->key()));
5939 } 5922 }
5940 5923
5941 BuildLoad(expr, expr->position(), expr->id()); 5924 BuildLoad(expr, expr->position(), expr->id());
5942 } 5925 }
5943 5926
5944 5927
5945 HInstruction* HGraphBuilder::BuildConstantMapCheck(Handle<JSObject> constant, 5928 HInstruction* HGraphBuilder::BuildConstantMapCheck(Handle<JSObject> constant,
5946 CompilationInfo* info) { 5929 CompilationInfo* info) {
(...skipping 1630 matching lines...) Expand 10 before | Expand all | Expand 10 after
7577 } 7560 }
7578 7561
7579 // Argument of the count operation is a property. 7562 // Argument of the count operation is a property.
7580 ASSERT(prop != NULL); 7563 ASSERT(prop != NULL);
7581 if (returns_original_input) Push(graph()->GetConstantUndefined()); 7564 if (returns_original_input) Push(graph()->GetConstantUndefined());
7582 7565
7583 CHECK_ALIVE(VisitForValue(prop->obj())); 7566 CHECK_ALIVE(VisitForValue(prop->obj()));
7584 HValue* object = Top(); 7567 HValue* object = Top();
7585 7568
7586 HValue* key = NULL; 7569 HValue* key = NULL;
7587 if ((!prop->IsFunctionPrototype() && !prop->key()->IsPropertyName()) || 7570 if ((!prop->IsStringLength() &&
7571 !prop->IsFunctionPrototype() &&
7572 !prop->key()->IsPropertyName()) ||
7588 prop->IsStringAccess()) { 7573 prop->IsStringAccess()) {
7589 CHECK_ALIVE(VisitForValue(prop->key())); 7574 CHECK_ALIVE(VisitForValue(prop->key()));
7590 key = Top(); 7575 key = Top();
7591 } 7576 }
7592 7577
7593 CHECK_ALIVE(PushLoad(prop, object, key, expr->position())); 7578 CHECK_ALIVE(PushLoad(prop, object, key, expr->position()));
7594 7579
7595 after = BuildIncrement(returns_original_input, expr); 7580 after = BuildIncrement(returns_original_input, expr);
7596 7581
7597 if (returns_original_input) { 7582 if (returns_original_input) {
(...skipping 2107 matching lines...) Expand 10 before | Expand all | Expand 10 after
9705 if (ShouldProduceTraceOutput()) { 9690 if (ShouldProduceTraceOutput()) {
9706 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 9691 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
9707 } 9692 }
9708 9693
9709 #ifdef DEBUG 9694 #ifdef DEBUG
9710 graph_->Verify(false); // No full verify. 9695 graph_->Verify(false); // No full verify.
9711 #endif 9696 #endif
9712 } 9697 }
9713 9698
9714 } } // namespace v8::internal 9699 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap.cc ('k') | src/hydrogen-instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698