From: verwaest@chromium.org Date: Mon, 10 Feb 2014 10:23:59 +0000 (+0000) Subject: Unify BuildLoad/StoreNamedGeneric X-Git-Tag: upstream/4.7.83~10808 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f19aeae06bf69f66ead2bbbbd747e60ff28f31b8;p=platform%2Fupstream%2Fv8.git Unify BuildLoad/StoreNamedGeneric R=dcarney@chromium.org Review URL: https://codereview.chromium.org/155513008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19219 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/hydrogen.cc b/src/hydrogen.cc index 46e1b18..f538c21 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -5071,7 +5071,8 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) { HInstruction* store; if (map.is_null()) { // If we don't know the monomorphic type, do a generic store. - CHECK_ALIVE(store = BuildStoreNamedGeneric(literal, name, value)); + CHECK_ALIVE(store = BuildNamedGeneric( + STORE, literal, name, value)); } else { PropertyAccessInfo info(this, STORE, ToType(map), name); if (info.CanAccessMonomorphic()) { @@ -5081,8 +5082,8 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) { &info, literal, checked_literal, value, BailoutId::None(), BailoutId::None()); } else { - CHECK_ALIVE( - store = BuildStoreNamedGeneric(literal, name, value)); + CHECK_ALIVE(store = BuildNamedGeneric( + STORE, literal, name, value)); } } AddInstruction(store); @@ -5314,24 +5315,6 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField( } -HInstruction* HOptimizedGraphBuilder::BuildStoreNamedGeneric( - HValue* object, - Handle name, - HValue* value, - bool is_uninitialized) { - if (is_uninitialized) { - Add("Insufficient type feedback for property assignment", - Deoptimizer::SOFT); - } - - return New( - object, - name, - value, - function_strict_mode_flag()); -} - - bool HOptimizedGraphBuilder::PropertyAccessInfo::IsCompatible( PropertyAccessInfo* info) { if (!CanInlinePropertyAccess(type_)) return false; @@ -5709,28 +5692,11 @@ void HOptimizedGraphBuilder::HandlePolymorphicNamedFieldAccess( // that the environment stack matches the depth on deopt that it otherwise // would have had after a successful load. if (!ast_context()->IsEffect()) Push(graph()->GetConstant0()); - const char* message = ""; - switch (access_type) { - case LOAD: - message = "Unknown map in polymorphic load"; - break; - case STORE: - message = "Unknown map in polymorphic store"; - break; - } - FinishExitWithHardDeoptimization(message, join); + FinishExitWithHardDeoptimization("Uknown map in polymorphic access", join); } else { - HValue* result = NULL; - switch (access_type) { - case LOAD: - result = Add(object, name); - break; - case STORE: - AddInstruction(BuildStoreNamedGeneric(object, name, value)); - result = value; - break; - } - if (!ast_context()->IsEffect()) Push(result); + HInstruction* instr = BuildNamedGeneric(access_type, object, name, value); + AddInstruction(instr); + if (!ast_context()->IsEffect()) Push(access_type == LOAD ? instr : value); if (join != NULL) { Goto(join); @@ -6182,15 +6148,22 @@ HInstruction* HGraphBuilder::AddLoadStringLength(HValue* string) { } -HInstruction* HOptimizedGraphBuilder::BuildLoadNamedGeneric( +HInstruction* HOptimizedGraphBuilder::BuildNamedGeneric( + PropertyAccessType access_type, HValue* object, Handle name, + HValue* value, bool is_uninitialized) { if (is_uninitialized) { - Add("Insufficient type feedback for generic named load", + Add("Insufficient type feedback for generic named access", Deoptimizer::SOFT); } - return New(object, name); + if (access_type == LOAD) { + return New(object, name); + } else { + return New( + object, name, value, function_strict_mode_flag()); + } } @@ -6636,11 +6609,7 @@ HInstruction* HOptimizedGraphBuilder::BuildNamedAccess( &info, object, checked_object, value, ast_id, return_id); } - if (access == LOAD) { - return BuildLoadNamedGeneric(object, name, is_uninitialized); - } else { - return BuildStoreNamedGeneric(object, name, value, is_uninitialized); - } + return BuildNamedGeneric(access, object, name, value, is_uninitialized); } @@ -6992,8 +6961,8 @@ void HOptimizedGraphBuilder::HandlePolymorphicCallNamed( FinishExitWithHardDeoptimization("Unknown map in polymorphic call", join); } else { Property* prop = expr->expression()->AsProperty(); - HInstruction* function = BuildLoadNamedGeneric( - receiver, name, prop->IsUninitialized()); + HInstruction* function = BuildNamedGeneric( + LOAD, receiver, name, NULL, prop->IsUninitialized()); AddInstruction(function); Push(function); AddSimulate(prop->LoadId(), REMOVABLE_SIMULATE); diff --git a/src/hydrogen.h b/src/hydrogen.h index 7eb95e2..b201949 100644 --- a/src/hydrogen.h +++ b/src/hydrogen.h @@ -2474,9 +2474,11 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor { bool is_store, bool* has_side_effects); - HInstruction* BuildLoadNamedGeneric(HValue* object, - Handle name, - bool is_uninitialized = false); + HInstruction* BuildNamedGeneric(PropertyAccessType access, + HValue* object, + Handle name, + HValue* value, + bool is_uninitialized = false); HCheckMaps* AddCheckMap(HValue* object, Handle map); @@ -2503,10 +2505,6 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor { HInstruction* BuildStoreNamedField(PropertyAccessInfo* info, HValue* checked_object, HValue* value); - HInstruction* BuildStoreNamedGeneric(HValue* object, - Handle name, - HValue* value, - bool is_uninitialized = false); HInstruction* BuildStoreKeyedGeneric(HValue* object, HValue* key, HValue* value);