| Index: src/hydrogen.h
|
| diff --git a/src/hydrogen.h b/src/hydrogen.h
|
| index 818569b0919b0441bcb7a8f68b139c346e0d590c..9260b58cd38a2cfa6a89cb0be39bee81f0e45d88 100644
|
| --- a/src/hydrogen.h
|
| +++ b/src/hydrogen.h
|
| @@ -1309,6 +1309,16 @@ class HGraphBuilder {
|
| HBasicBlock* CreateBasicBlock(HEnvironment* env);
|
| HBasicBlock* CreateLoopHeaderBlock();
|
|
|
| + template <class BitFieldClass>
|
| + HValue* BuildDecodeField(HValue* encoded_field) {
|
| + HValue* shifted_field = AddUncasted<HShr>(encoded_field,
|
| + Add<HConstant>(static_cast<int>(BitFieldClass::kShift)));
|
| + HValue* mask_value = Add<HConstant>(static_cast<int>(BitFieldClass::kMask));
|
| + return AddUncasted<HBitwise>(Token::BIT_AND, shifted_field, mask_value);
|
| + }
|
| +
|
| + HValue* BuildGetElementsKind(HValue* object);
|
| +
|
| HValue* BuildCheckHeapObject(HValue* object);
|
| HValue* BuildCheckString(HValue* string);
|
| HValue* BuildWrapReceiver(HValue* object, HValue* function);
|
| @@ -1335,8 +1345,32 @@ class HGraphBuilder {
|
|
|
| HValue* BuildNumberToString(HValue* object, Type* type);
|
|
|
| + void BuildJSObjectCheck(HValue* receiver,
|
| + int bit_field_mask);
|
| +
|
| + // Checks a key value that's being used for a keyed element access context. If
|
| + // the key is a index, i.e. a smi or a number in a unique string with a cached
|
| + // numeric value, the "true" of the continuation is joined. Otherwise,
|
| + // if the key is a name or a unique string, the "false" of the continuation is
|
| + // joined. Otherwise, a deoptimization is triggered. In both paths of the
|
| + // continuation, the key is pushed on the top of the environment.
|
| + void BuildKeyedIndexCheck(HValue* key,
|
| + HIfContinuation* join_continuation);
|
| +
|
| + // Checks the properties of an object if they are in dictionary case, in which
|
| + // case "true" of continuation is taken, otherwise the "false"
|
| + void BuildTestForDictionaryProperties(HValue* object,
|
| + HIfContinuation* continuation);
|
| +
|
| + void BuildNonGlobalObjectCheck(HValue* receiver);
|
| +
|
| + HValue* BuildKeyedLookupCacheHash(HValue* object,
|
| + HValue* key);
|
| +
|
| HValue* BuildUncheckedDictionaryElementLoad(HValue* receiver,
|
| - HValue* key);
|
| + HValue* elements,
|
| + HValue* key,
|
| + HValue* hash);
|
|
|
| HValue* BuildRegExpConstructResult(HValue* length,
|
| HValue* index,
|
| @@ -1674,6 +1708,27 @@ class HGraphBuilder {
|
| bool finished_;
|
| };
|
|
|
| + template <class A, class P1>
|
| + void DeoptimizeIf(P1 p1, char* const reason) {
|
| + IfBuilder builder(this);
|
| + builder.If<A>(p1);
|
| + builder.ThenDeopt(reason);
|
| + }
|
| +
|
| + template <class A, class P1, class P2>
|
| + void DeoptimizeIf(P1 p1, P2 p2, const char* reason) {
|
| + IfBuilder builder(this);
|
| + builder.If<A>(p1, p2);
|
| + builder.ThenDeopt(reason);
|
| + }
|
| +
|
| + template <class A, class P1, class P2, class P3>
|
| + void DeoptimizeIf(P1 p1, P2 p2, P3 p3, const char* reason) {
|
| + IfBuilder builder(this);
|
| + builder.If<A>(p1, p2, p3);
|
| + builder.ThenDeopt(reason);
|
| + }
|
| +
|
| HValue* BuildNewElementsCapacity(HValue* old_capacity);
|
|
|
| class JSArrayBuilder V8_FINAL {
|
|
|