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

Side by Side Diff: src/hydrogen.cc

Issue 10832157: Unify handling of bailout IDs for property loads. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased. Created 8 years, 4 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 5387 matching lines...) Expand 10 before | Expand all | Expand 10 after
5398 Handle<JSObject> holder; 5398 Handle<JSObject> holder;
5399 if (LookupAccessorPair(map, name, &accessors, &holder)) { 5399 if (LookupAccessorPair(map, name, &accessors, &holder)) {
5400 load = BuildCallGetter(object, map, accessors, holder); 5400 load = BuildCallGetter(object, map, accessors, holder);
5401 } else { 5401 } else {
5402 load = BuildLoadNamedMonomorphic(object, name, prop, map); 5402 load = BuildLoadNamedMonomorphic(object, name, prop, map);
5403 } 5403 }
5404 } else { 5404 } else {
5405 load = BuildLoadNamedGeneric(object, name, prop); 5405 load = BuildLoadNamedGeneric(object, name, prop);
5406 } 5406 }
5407 PushAndAdd(load); 5407 PushAndAdd(load);
5408 if (load->HasObservableSideEffects()) AddSimulate(expr->CompoundLoadId()); 5408 if (load->HasObservableSideEffects()) AddSimulate(prop->LoadId());
5409 5409
5410 CHECK_ALIVE(VisitForValue(expr->value())); 5410 CHECK_ALIVE(VisitForValue(expr->value()));
5411 HValue* right = Pop(); 5411 HValue* right = Pop();
5412 HValue* left = Pop(); 5412 HValue* left = Pop();
5413 5413
5414 HInstruction* instr = BuildBinaryOperation(operation, left, right); 5414 HInstruction* instr = BuildBinaryOperation(operation, left, right);
5415 PushAndAdd(instr); 5415 PushAndAdd(instr);
5416 if (instr->HasObservableSideEffects()) AddSimulate(operation->id()); 5416 if (instr->HasObservableSideEffects()) AddSimulate(operation->id());
5417 5417
5418 HInstruction* store; 5418 HInstruction* store;
(...skipping 23 matching lines...) Expand all
5442 5442
5443 } else { 5443 } else {
5444 // Keyed property. 5444 // Keyed property.
5445 CHECK_ALIVE(VisitForValue(prop->obj())); 5445 CHECK_ALIVE(VisitForValue(prop->obj()));
5446 CHECK_ALIVE(VisitForValue(prop->key())); 5446 CHECK_ALIVE(VisitForValue(prop->key()));
5447 HValue* obj = environment()->ExpressionStackAt(1); 5447 HValue* obj = environment()->ExpressionStackAt(1);
5448 HValue* key = environment()->ExpressionStackAt(0); 5448 HValue* key = environment()->ExpressionStackAt(0);
5449 5449
5450 bool has_side_effects = false; 5450 bool has_side_effects = false;
5451 HValue* load = HandleKeyedElementAccess( 5451 HValue* load = HandleKeyedElementAccess(
5452 obj, key, NULL, prop, expr->CompoundLoadId(), RelocInfo::kNoPosition, 5452 obj, key, NULL, prop, prop->LoadId(), RelocInfo::kNoPosition,
5453 false, // is_store 5453 false, // is_store
5454 &has_side_effects); 5454 &has_side_effects);
5455 Push(load); 5455 Push(load);
5456 if (has_side_effects) AddSimulate(expr->CompoundLoadId()); 5456 if (has_side_effects) AddSimulate(prop->LoadId());
5457 5457
5458 5458
5459 CHECK_ALIVE(VisitForValue(expr->value())); 5459 CHECK_ALIVE(VisitForValue(expr->value()));
5460 HValue* right = Pop(); 5460 HValue* right = Pop();
5461 HValue* left = Pop(); 5461 HValue* left = Pop();
5462 5462
5463 HInstruction* instr = BuildBinaryOperation(operation, left, right); 5463 HInstruction* instr = BuildBinaryOperation(operation, left, right);
5464 PushAndAdd(instr); 5464 PushAndAdd(instr);
5465 if (instr->HasObservableSideEffects()) AddSimulate(operation->id()); 5465 if (instr->HasObservableSideEffects()) AddSimulate(operation->id());
5466 5466
(...skipping 1460 matching lines...) Expand 10 before | Expand all | Expand 10 after
6927 } 6927 }
6928 6928
6929 6929
6930 bool HGraphBuilder::TryInlineGetter(Handle<JSFunction> getter, 6930 bool HGraphBuilder::TryInlineGetter(Handle<JSFunction> getter,
6931 Property* prop) { 6931 Property* prop) {
6932 return TryInline(CALL_AS_METHOD, 6932 return TryInline(CALL_AS_METHOD,
6933 getter, 6933 getter,
6934 0, 6934 0,
6935 NULL, 6935 NULL,
6936 prop->id(), 6936 prop->id(),
6937 prop->ReturnId(), 6937 prop->LoadId(),
6938 NORMAL_RETURN); 6938 NORMAL_RETURN);
6939 } 6939 }
6940 6940
6941 6941
6942 bool HGraphBuilder::TryInlineBuiltinFunctionCall(Call* expr, bool drop_extra) { 6942 bool HGraphBuilder::TryInlineBuiltinFunctionCall(Call* expr, bool drop_extra) {
6943 if (!expr->target()->shared()->HasBuiltinFunctionId()) return false; 6943 if (!expr->target()->shared()->HasBuiltinFunctionId()) return false;
6944 BuiltinFunctionId id = expr->target()->shared()->builtin_function_id(); 6944 BuiltinFunctionId id = expr->target()->shared()->builtin_function_id();
6945 switch (id) { 6945 switch (id) {
6946 case kMathRound: 6946 case kMathRound:
6947 case kMathAbs: 6947 case kMathAbs:
(...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after
7866 Handle<JSObject> holder; 7866 Handle<JSObject> holder;
7867 if (LookupAccessorPair(map, name, &accessors, &holder)) { 7867 if (LookupAccessorPair(map, name, &accessors, &holder)) {
7868 load = BuildCallGetter(object, map, accessors, holder); 7868 load = BuildCallGetter(object, map, accessors, holder);
7869 } else { 7869 } else {
7870 load = BuildLoadNamedMonomorphic(object, name, prop, map); 7870 load = BuildLoadNamedMonomorphic(object, name, prop, map);
7871 } 7871 }
7872 } else { 7872 } else {
7873 load = BuildLoadNamedGeneric(object, name, prop); 7873 load = BuildLoadNamedGeneric(object, name, prop);
7874 } 7874 }
7875 PushAndAdd(load); 7875 PushAndAdd(load);
7876 if (load->HasObservableSideEffects()) AddSimulate(expr->CountId()); 7876 if (load->HasObservableSideEffects()) AddSimulate(prop->LoadId());
7877 7877
7878 after = BuildIncrement(returns_original_input, expr); 7878 after = BuildIncrement(returns_original_input, expr);
7879 input = Pop(); 7879 input = Pop();
7880 7880
7881 HInstruction* store; 7881 HInstruction* store;
7882 if (map.is_null()) { 7882 if (map.is_null()) {
7883 // If we don't know the monomorphic type, do a generic store. 7883 // If we don't know the monomorphic type, do a generic store.
7884 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, after)); 7884 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, after));
7885 } else { 7885 } else {
7886 Handle<AccessorPair> accessors; 7886 Handle<AccessorPair> accessors;
(...skipping 22 matching lines...) Expand all
7909 // Keyed property. 7909 // Keyed property.
7910 if (returns_original_input) Push(graph_->GetConstantUndefined()); 7910 if (returns_original_input) Push(graph_->GetConstantUndefined());
7911 7911
7912 CHECK_ALIVE(VisitForValue(prop->obj())); 7912 CHECK_ALIVE(VisitForValue(prop->obj()));
7913 CHECK_ALIVE(VisitForValue(prop->key())); 7913 CHECK_ALIVE(VisitForValue(prop->key()));
7914 HValue* obj = environment()->ExpressionStackAt(1); 7914 HValue* obj = environment()->ExpressionStackAt(1);
7915 HValue* key = environment()->ExpressionStackAt(0); 7915 HValue* key = environment()->ExpressionStackAt(0);
7916 7916
7917 bool has_side_effects = false; 7917 bool has_side_effects = false;
7918 HValue* load = HandleKeyedElementAccess( 7918 HValue* load = HandleKeyedElementAccess(
7919 obj, key, NULL, prop, expr->CountId(), RelocInfo::kNoPosition, 7919 obj, key, NULL, prop, prop->LoadId(), RelocInfo::kNoPosition,
7920 false, // is_store 7920 false, // is_store
7921 &has_side_effects); 7921 &has_side_effects);
7922 Push(load); 7922 Push(load);
7923 if (has_side_effects) AddSimulate(expr->CountId()); 7923 if (has_side_effects) AddSimulate(prop->LoadId());
7924 7924
7925 after = BuildIncrement(returns_original_input, expr); 7925 after = BuildIncrement(returns_original_input, expr);
7926 input = Pop(); 7926 input = Pop();
7927 7927
7928 expr->RecordTypeFeedback(oracle(), zone()); 7928 expr->RecordTypeFeedback(oracle(), zone());
7929 HandleKeyedElementAccess(obj, key, after, expr, expr->AssignmentId(), 7929 HandleKeyedElementAccess(obj, key, after, expr, expr->AssignmentId(),
7930 RelocInfo::kNoPosition, 7930 RelocInfo::kNoPosition,
7931 true, // is_store 7931 true, // is_store
7932 &has_side_effects); 7932 &has_side_effects);
7933 7933
(...skipping 1730 matching lines...) Expand 10 before | Expand all | Expand 10 after
9664 } 9664 }
9665 } 9665 }
9666 9666
9667 #ifdef DEBUG 9667 #ifdef DEBUG
9668 if (graph_ != NULL) graph_->Verify(false); // No full verify. 9668 if (graph_ != NULL) graph_->Verify(false); // No full verify.
9669 if (allocator_ != NULL) allocator_->Verify(); 9669 if (allocator_ != NULL) allocator_->Verify();
9670 #endif 9670 #endif
9671 } 9671 }
9672 9672
9673 } } // namespace v8::internal 9673 } } // namespace v8::internal
OLDNEW
« src/ast.h ('K') | « src/ast.cc ('k') | src/ia32/full-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698