diff options
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGNodeFlags.h')
| -rw-r--r-- | Source/JavaScriptCore/dfg/DFGNodeFlags.h | 105 |
1 files changed, 30 insertions, 75 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGNodeFlags.h b/Source/JavaScriptCore/dfg/DFGNodeFlags.h index 4db2a43e7..d68f0587b 100644 --- a/Source/JavaScriptCore/dfg/DFGNodeFlags.h +++ b/Source/JavaScriptCore/dfg/DFGNodeFlags.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2015 Apple Inc. All rights reserved. + * Copyright (C) 2012, 2013 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -26,6 +26,8 @@ #ifndef DFGNodeFlags_h #define DFGNodeFlags_h +#include <wtf/Platform.h> + #if ENABLE(DFG_JIT) #include <wtf/PrintStream.h> @@ -38,38 +40,35 @@ namespace JSC { namespace DFG { #define NodeResultMask 0x0007 #define NodeResultJS 0x0001 #define NodeResultNumber 0x0002 -#define NodeResultDouble 0x0003 -#define NodeResultInt32 0x0004 -#define NodeResultInt52 0x0005 -#define NodeResultBoolean 0x0006 -#define NodeResultStorage 0x0007 +#define NodeResultInt32 0x0003 +#define NodeResultInt52 0x0004 +#define NodeResultBoolean 0x0005 +#define NodeResultStorage 0x0006 #define NodeMustGenerate 0x0008 // set on nodes that have side effects, and may not trivially be removed by DCE. #define NodeHasVarArgs 0x0010 -// 0x0020 and 0x0040 are free. +#define NodeClobbersWorld 0x0020 +#define NodeMightClobber 0x0040 -#define NodeBehaviorMask 0x0780 -#define NodeMayOverflowInBaseline 0x0080 -#define NodeMayOverflowInDFG 0x0100 -#define NodeMayNegZeroInBaseline 0x0200 -#define NodeMayNegZeroInDFG 0x0400 +#define NodeBehaviorMask 0x0180 +#define NodeMayOverflow 0x0080 +#define NodeMayNegZero 0x0100 -#define NodeBytecodeBackPropMask 0xf800 +#define NodeBytecodeBackPropMask 0x1E00 #define NodeBytecodeUseBottom 0x0000 -#define NodeBytecodeUsesAsNumber 0x0800 // The result of this computation may be used in a context that observes fractional, or bigger-than-int32, results. -#define NodeBytecodeNeedsNegZero 0x1000 // The result of this computation may be used in a context that observes -0. -#define NodeBytecodeUsesAsOther 0x2000 // The result of this computation may be used in a context that distinguishes between NaN and other things (like undefined). +#define NodeBytecodeUsesAsNumber 0x0200 // The result of this computation may be used in a context that observes fractional, or bigger-than-int32, results. +#define NodeBytecodeNeedsNegZero 0x0400 // The result of this computation may be used in a context that observes -0. +#define NodeBytecodeUsesAsOther 0x0800 // The result of this computation may be used in a context that distinguishes between NaN and other things (like undefined). #define NodeBytecodeUsesAsValue (NodeBytecodeUsesAsNumber | NodeBytecodeNeedsNegZero | NodeBytecodeUsesAsOther) -#define NodeBytecodeUsesAsInt 0x4000 // The result of this computation is known to be used in a context that prefers, but does not require, integer values. -#define NodeBytecodeUsesAsArrayIndex 0x8000 // The result of this computation is known to be used in a context that strongly prefers integer values, to the point that we should avoid using doubles if at all possible. +#define NodeBytecodeUsesAsInt 0x1000 // The result of this computation is known to be used in a context that prefers, but does not require, integer values. #define NodeArithFlagsMask (NodeBehaviorMask | NodeBytecodeBackPropMask) -#define NodeIsFlushed 0x10000 // Computed by CPSRethreadingPhase, will tell you which local nodes are backwards-reachable from a Flush. +#define NodeDoesNotExit 0x2000 // This flag is negated to make it natural for the default to be that a node does exit. + +#define NodeRelevantToOSR 0x4000 -#define NodeMiscFlag1 0x20000 -#define NodeMiscFlag2 0x40000 -#define NodeMiscFlag3 0x80000 +#define NodeIsStaticConstant 0x8000 // Used only by the parser, to determine if a constant arose statically and hence could be folded at parse-time. typedef uint32_t NodeFlags; @@ -88,79 +87,35 @@ static inline bool bytecodeCanIgnoreNegativeZero(NodeFlags flags) return !(flags & NodeBytecodeNeedsNegZero); } -enum RareCaseProfilingSource { - BaselineRareCase, // Comes from slow case counting in the baseline JIT. - DFGRareCase, // Comes from OSR exit profiles. - AllRareCases -}; - -static inline bool nodeMayOverflow(NodeFlags flags, RareCaseProfilingSource source) +static inline bool nodeMayOverflow(NodeFlags flags) { - NodeFlags mask = 0; - switch (source) { - case BaselineRareCase: - mask = NodeMayOverflowInBaseline; - break; - case DFGRareCase: - mask = NodeMayOverflowInDFG; - break; - case AllRareCases: - mask = NodeMayOverflowInBaseline | NodeMayOverflowInDFG; - break; - } - return !!(flags & mask); + return !!(flags & NodeMayOverflow); } -static inline bool nodeMayNegZero(NodeFlags flags, RareCaseProfilingSource source) +static inline bool nodeMayNegZero(NodeFlags flags) { - NodeFlags mask = 0; - switch (source) { - case BaselineRareCase: - mask = NodeMayNegZeroInBaseline; - break; - case DFGRareCase: - mask = NodeMayNegZeroInDFG; - break; - case AllRareCases: - mask = NodeMayNegZeroInBaseline | NodeMayNegZeroInDFG; - break; - } - return !!(flags & mask); + return !!(flags & NodeMayNegZero); } -static inline bool nodeCanSpeculateInt32(NodeFlags flags, RareCaseProfilingSource source) +static inline bool nodeCanSpeculateInt32(NodeFlags flags) { - if (nodeMayOverflow(flags, source)) + if (nodeMayOverflow(flags)) return !bytecodeUsesAsNumber(flags); - if (nodeMayNegZero(flags, source)) + if (nodeMayNegZero(flags)) return bytecodeCanIgnoreNegativeZero(flags); return true; } -static inline bool nodeCanSpeculateInt52(NodeFlags flags, RareCaseProfilingSource source) +static inline bool nodeCanSpeculateInt52(NodeFlags flags) { - if (nodeMayNegZero(flags, source)) + if (nodeMayNegZero(flags)) return bytecodeCanIgnoreNegativeZero(flags); return true; } -// FIXME: Get rid of this. -// https://bugs.webkit.org/show_bug.cgi?id=131689 -static inline NodeFlags canonicalResultRepresentation(NodeFlags flags) -{ - switch (flags) { - case NodeResultDouble: - case NodeResultInt52: - case NodeResultStorage: - return flags; - default: - return NodeResultJS; - } -} - void dumpNodeFlags(PrintStream&, NodeFlags); MAKE_PRINT_ADAPTOR(NodeFlagsDump, NodeFlags, dumpNodeFlags); |
