Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index 49d379aa0b018a977da1d520d4d91c9b3823acfb..9ce00677e22cb88e0fd09cc31241d5dac44fd960 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -11684,6 +11684,26 @@ void HOptimizedGraphBuilder::GenerateIsJSProxy(CallRuntime* call) { |
} |
+void HOptimizedGraphBuilder::GenerateHasFastPackedElements(CallRuntime* call) { |
+ DCHECK(call->arguments()->length() == 1); |
+ CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
+ HValue* object = Pop(); |
+ HIfContinuation continuation; |
+ IfBuilder if_fast_packed(this); |
+ HValue* elements_kind = BuildGetElementsKind(object); |
+ if_fast_packed.If<HCompareNumericAndBranch>( |
+ elements_kind, Add<HConstant>(FAST_SMI_ELEMENTS), Token::EQ); |
+ if_fast_packed.Or(); |
+ if_fast_packed.If<HCompareNumericAndBranch>( |
+ elements_kind, Add<HConstant>(FAST_ELEMENTS), Token::EQ); |
+ if_fast_packed.Or(); |
+ if_fast_packed.If<HCompareNumericAndBranch>( |
+ elements_kind, Add<HConstant>(FAST_DOUBLE_ELEMENTS), Token::EQ); |
+ if_fast_packed.CaptureContinuation(&continuation); |
+ return ast_context()->ReturnContinuation(&continuation, call->id()); |
+} |
+ |
+ |
void HOptimizedGraphBuilder::GenerateIsNonNegativeSmi(CallRuntime* call) { |
return Bailout(kInlinedRuntimeFunctionIsNonNegativeSmi); |
} |