summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGArrayMode.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGArrayMode.h')
-rw-r--r--Source/JavaScriptCore/dfg/DFGArrayMode.h107
1 files changed, 19 insertions, 88 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGArrayMode.h b/Source/JavaScriptCore/dfg/DFGArrayMode.h
index a666bb83f..d4be9c0eb 100644
--- a/Source/JavaScriptCore/dfg/DFGArrayMode.h
+++ b/Source/JavaScriptCore/dfg/DFGArrayMode.h
@@ -54,15 +54,6 @@ enum Mode {
String,
// Modes of conventional indexed storage where the check is non side-effecting.
- Contiguous,
- ContiguousToTail,
- ContiguousOutOfBounds,
- ArrayWithContiguous,
- ArrayWithContiguousToTail,
- ArrayWithContiguousOutOfBounds,
- PossiblyArrayWithContiguous,
- PossiblyArrayWithContiguousToTail,
- PossiblyArrayWithContiguousOutOfBounds,
ArrayStorage,
ArrayStorageToHole,
SlowPutArrayStorage,
@@ -77,11 +68,8 @@ enum Mode {
PossiblyArrayWithArrayStorageOutOfBounds,
// Modes of conventional indexed storage where the check is side-effecting.
- ToContiguous,
- ToArrayStorage,
- ArrayToArrayStorage,
- PossiblyArrayToArrayStorage,
- ToSlowPutArrayStorage,
+ BlankToArrayStorage,
+ BlankToSlowPutArrayStorage,
Arguments,
Int8Array,
@@ -101,32 +89,6 @@ enum Mode {
// have the word "ArrayStorage" in them.
// First: helpers for non-side-effecting checks.
-#define NON_ARRAY_CONTIGUOUS_MODES \
- Array::Contiguous: \
- case Array::ContiguousToTail: \
- case Array::ContiguousOutOfBounds: \
- case Array::PossiblyArrayWithContiguous: \
- case Array::PossiblyArrayWithContiguousToTail: \
- case Array::PossiblyArrayWithContiguousOutOfBounds
-#define ARRAY_WITH_CONTIGUOUS_MODES \
- Array::ArrayWithContiguous: \
- case Array::ArrayWithContiguousToTail: \
- case Array::ArrayWithContiguousOutOfBounds
-#define ALL_CONTIGUOUS_MODES \
- NON_ARRAY_CONTIGUOUS_MODES: \
- case ARRAY_WITH_CONTIGUOUS_MODES
-#define IN_BOUNDS_CONTIGUOUS_MODES \
- Array::Contiguous: \
- case Array::ArrayWithContiguous: \
- case Array::PossiblyArrayWithContiguous
-#define CONTIGUOUS_TO_TAIL_MODES \
- Array::ContiguousToTail: \
- case Array::ArrayWithContiguousToTail: \
- case Array::PossiblyArrayWithContiguousToTail
-#define OUT_OF_BOUNDS_CONTIGUOUS_MODES \
- Array::ContiguousOutOfBounds: \
- case Array::ArrayWithContiguousOutOfBounds: \
- case Array::PossiblyArrayWithContiguousOutOfBounds
#define NON_ARRAY_ARRAY_STORAGE_MODES \
Array::ArrayStorage: \
case Array::ArrayStorageToHole: \
@@ -144,43 +106,33 @@ enum Mode {
#define ALL_ARRAY_STORAGE_MODES \
NON_ARRAY_ARRAY_STORAGE_MODES: \
case ARRAY_WITH_ARRAY_STORAGE_MODES
-#define IN_BOUNDS_ARRAY_STORAGE_MODES \
- Array::ArrayStorage: \
- case Array::ArrayWithArrayStorage: \
- case Array::PossiblyArrayWithArrayStorage
#define ARRAY_STORAGE_TO_HOLE_MODES \
Array::ArrayStorageToHole: \
case Array::ArrayWithArrayStorageToHole: \
case Array::PossiblyArrayWithArrayStorageToHole
+#define IN_BOUNDS_ARRAY_STORAGE_MODES \
+ ARRAY_STORAGE_TO_HOLE_MODES: \
+ case Array::ArrayStorage: \
+ case Array::ArrayWithArrayStorage: \
+ case Array::PossiblyArrayWithArrayStorage
#define SLOW_PUT_ARRAY_STORAGE_MODES \
Array::SlowPutArrayStorage: \
case Array::ArrayWithSlowPutArrayStorage: \
case Array::PossiblyArrayWithSlowPutArrayStorage
#define OUT_OF_BOUNDS_ARRAY_STORAGE_MODES \
- Array::ArrayStorageOutOfBounds: \
+ SLOW_PUT_ARRAY_STORAGE_MODES: \
+ case Array::ArrayStorageOutOfBounds: \
case Array::ArrayWithArrayStorageOutOfBounds: \
case Array::PossiblyArrayWithArrayStorageOutOfBounds
// Next: helpers for side-effecting checks.
-#define NON_ARRAY_EFFECTFUL_MODES \
- Array::ToContiguous: \
- case Array::ToArrayStorage: \
- case Array::ToSlowPutArrayStorage: \
- case Array::PossiblyArrayToArrayStorage
-#define ARRAY_EFFECTFUL_MODES \
- Array::ArrayToArrayStorage
-#define ALL_EFFECTFUL_CONTIGUOUS_MODES \
- Array::ToContiguous
-#define ALL_EFFECTFUL_ARRAY_STORAGE_MODES \
- Array::ToArrayStorage: \
- case Array::ToSlowPutArrayStorage: \
- case Array::ArrayToArrayStorage: \
- case Array::PossiblyArrayToArrayStorage
-#define SLOW_PUT_EFFECTFUL_ARRAY_STORAGE_MODES \
- Array::ToSlowPutArrayStorage
-#define ALL_EFFECTFUL_MODES \
- ALL_EFFECTFUL_CONTIGUOUS_MODES: \
- case ALL_EFFECTFUL_ARRAY_STORAGE_MODES
+#define EFFECTFUL_NON_ARRAY_ARRAY_STORAGE_MODES \
+ Array::BlankToArrayStorage: \
+ case Array::BlankToSlowPutArrayStorage
+#define ALL_EFFECTFUL_ARRAY_STORAGE_MODES \
+ EFFECTFUL_NON_ARRAY_ARRAY_STORAGE_MODES
+#define SLOW_PUT_EFFECTFUL_ARRAY_STORAGE_MODES \
+ Array::BlankToSlowPutArrayStorage
Array::Mode fromObserved(ArrayProfile*, Array::Action, bool makeSafe);
@@ -193,9 +145,8 @@ const char* modeToString(Array::Mode);
inline bool modeUsesButterfly(Array::Mode arrayMode)
{
switch (arrayMode) {
- case ALL_CONTIGUOUS_MODES:
case ALL_ARRAY_STORAGE_MODES:
- case ALL_EFFECTFUL_MODES:
+ case ALL_EFFECTFUL_ARRAY_STORAGE_MODES:
return true;
default:
return false;
@@ -205,9 +156,7 @@ inline bool modeUsesButterfly(Array::Mode arrayMode)
inline bool modeIsJSArray(Array::Mode arrayMode)
{
switch (arrayMode) {
- case ARRAY_WITH_CONTIGUOUS_MODES:
case ARRAY_WITH_ARRAY_STORAGE_MODES:
- case ARRAY_EFFECTFUL_MODES:
return true;
default:
return false;
@@ -217,9 +166,6 @@ inline bool modeIsJSArray(Array::Mode arrayMode)
inline bool isInBoundsAccess(Array::Mode arrayMode)
{
switch (arrayMode) {
- case IN_BOUNDS_CONTIGUOUS_MODES:
- case CONTIGUOUS_TO_TAIL_MODES:
- case ARRAY_STORAGE_TO_HOLE_MODES:
case IN_BOUNDS_ARRAY_STORAGE_MODES:
return true;
default:
@@ -238,24 +184,11 @@ inline bool isSlowPutAccess(Array::Mode arrayMode)
}
}
-inline bool mayStoreToTail(Array::Mode arrayMode)
-{
- switch (arrayMode) {
- case CONTIGUOUS_TO_TAIL_MODES:
- case OUT_OF_BOUNDS_CONTIGUOUS_MODES:
- case ALL_EFFECTFUL_CONTIGUOUS_MODES:
- return true;
- default:
- return false;
- }
-}
-
inline bool mayStoreToHole(Array::Mode arrayMode)
{
switch (arrayMode) {
case ARRAY_STORAGE_TO_HOLE_MODES:
case OUT_OF_BOUNDS_ARRAY_STORAGE_MODES:
- case SLOW_PUT_ARRAY_STORAGE_MODES:
case ALL_EFFECTFUL_ARRAY_STORAGE_MODES:
return true;
default:
@@ -316,9 +249,7 @@ inline bool modeSupportsLength(Array::Mode mode)
case Array::Unprofiled:
case Array::ForceExit:
case Array::Generic:
- case NON_ARRAY_CONTIGUOUS_MODES:
case NON_ARRAY_ARRAY_STORAGE_MODES:
- case NON_ARRAY_EFFECTFUL_MODES:
return false;
default:
return true;
@@ -328,7 +259,7 @@ inline bool modeSupportsLength(Array::Mode mode)
inline bool benefitsFromStructureCheck(Array::Mode mode)
{
switch (mode) {
- case ALL_EFFECTFUL_MODES:
+ case ALL_EFFECTFUL_ARRAY_STORAGE_MODES:
case Array::Undecided:
case Array::Unprofiled:
case Array::ForceExit:
@@ -342,7 +273,7 @@ inline bool benefitsFromStructureCheck(Array::Mode mode)
inline bool isEffectful(Array::Mode mode)
{
switch (mode) {
- case ALL_EFFECTFUL_MODES:
+ case ALL_EFFECTFUL_ARRAY_STORAGE_MODES:
return true;
default:
return false;