Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index e46fa966b24290a3d270091b99c69bae1b4cd167..23a91083721689006432df71c29d618d2544bde3 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -10258,32 +10258,24 @@ void HOptimizedGraphBuilder::GenerateSetValueOf(CallRuntime* call) { |
CHECK_ALIVE(VisitForValue(call->arguments()->at(1))); |
HValue* value = Pop(); |
HValue* object = Pop(); |
- // Check if object is a not a smi. |
- HBasicBlock* if_smi = graph()->CreateBasicBlock(); |
- HBasicBlock* if_heap_object = graph()->CreateBasicBlock(); |
- HBasicBlock* join = graph()->CreateBasicBlock(); |
- FinishCurrentBlock(New<HIsSmiAndBranch>(object, if_smi, if_heap_object)); |
- Goto(if_smi, join); |
// Check if object is a JSValue. |
- set_current_block(if_heap_object); |
- HHasInstanceTypeAndBranch* typecheck = |
- New<HHasInstanceTypeAndBranch>(object, JS_VALUE_TYPE); |
- HBasicBlock* if_js_value = graph()->CreateBasicBlock(); |
- HBasicBlock* not_js_value = graph()->CreateBasicBlock(); |
- typecheck->SetSuccessorAt(0, if_js_value); |
- typecheck->SetSuccessorAt(1, not_js_value); |
- FinishCurrentBlock(typecheck); |
- Goto(not_js_value, join); |
- |
- // Create in-object property store to kValueOffset. |
- set_current_block(if_js_value); |
- Add<HStoreNamedField>(object, |
- HObjectAccess::ForJSObjectOffset(JSValue::kValueOffset), value, |
- INITIALIZING_STORE); |
- Goto(if_js_value, join); |
- join->SetJoinId(call->id()); |
- set_current_block(join); |
+ IfBuilder if_objectisvalue(this); |
+ if_objectisvalue.If<HHasInstanceTypeAndBranch>(object, JS_VALUE_TYPE); |
+ if_objectisvalue.Then(); |
+ { |
+ // Create in-object property store to kValueOffset. |
+ Add<HStoreNamedField>( |
+ object, HObjectAccess::ForJSObjectOffset(JSValue::kValueOffset), |
+ value, INITIALIZING_STORE); |
+ Add<HSimulate>(call->id(), FIXED_SIMULATE); |
+ } |
+ if_objectisvalue.Else(); |
+ { |
+ // Nothing to do in this case. |
+ Add<HSimulate>(call->id(), FIXED_SIMULATE); |
+ } |
+ if_objectisvalue.End(); |
return ast_context()->ReturnValue(value); |
} |