summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGNodeFlags.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGNodeFlags.h')
-rw-r--r--Source/JavaScriptCore/dfg/DFGNodeFlags.h105
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);