Changeset 239951 in webkit for trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp
- Timestamp:
- Jan 14, 2019, 2:31:06 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp
r234184 r239951 48 48 Array::Conversion converts; 49 49 50 RELEASE_ASSERT((observed & (asArrayModes (toIndexingShape(type)) | asArrayModes(toIndexingShape(type) | ArrayClass) | asArrayModes(toIndexingShape(type) | ArrayClass | CopyOnWrite))) == observed);51 52 if (observed & asArrayModes (toIndexingShape(type))) {53 if ((observed & asArrayModes (toIndexingShape(type))) == observed)50 RELEASE_ASSERT((observed & (asArrayModesIgnoringTypedArrays(toIndexingShape(type)) | asArrayModesIgnoringTypedArrays(toIndexingShape(type) | ArrayClass) | asArrayModesIgnoringTypedArrays(toIndexingShape(type) | ArrayClass | CopyOnWrite))) == observed); 51 52 if (observed & asArrayModesIgnoringTypedArrays(toIndexingShape(type))) { 53 if ((observed & asArrayModesIgnoringTypedArrays(toIndexingShape(type))) == observed) 54 54 isArray = nonArray; 55 55 else … … 58 58 isArray = Array::Array; 59 59 60 if (action == Array::Write && (observed & asArrayModes (toIndexingShape(type) | ArrayClass | CopyOnWrite)))60 if (action == Array::Write && (observed & asArrayModesIgnoringTypedArrays(toIndexingShape(type) | ArrayClass | CopyOnWrite))) 61 61 converts = Array::Convert; 62 62 else … … 70 70 case 0: 71 71 return ArrayMode(Array::Unprofiled); 72 case asArrayModes (NonArray):72 case asArrayModesIgnoringTypedArrays(NonArray): 73 73 if (action == Array::Write && !profile->mayInterceptIndexedAccesses(locker)) 74 74 return ArrayMode(Array::SelectUsingArguments, nonArray, Array::OutOfBounds, Array::Convert, action); 75 75 return ArrayMode(Array::SelectUsingPredictions, nonArray, action).withSpeculationFromProfile(locker, profile, makeSafe); 76 76 77 case asArrayModes (ArrayWithUndecided):77 case asArrayModesIgnoringTypedArrays(ArrayWithUndecided): 78 78 if (action == Array::Write) 79 79 return ArrayMode(Array::SelectUsingArguments, Array::Array, Array::OutOfBounds, Array::Convert, action); 80 80 return ArrayMode(Array::Undecided, Array::Array, Array::OutOfBounds, Array::AsIs, action).withProfile(locker, profile, makeSafe); 81 81 82 case asArrayModes (NonArray) | asArrayModes(ArrayWithUndecided):82 case asArrayModesIgnoringTypedArrays(NonArray) | asArrayModesIgnoringTypedArrays(ArrayWithUndecided): 83 83 if (action == Array::Write && !profile->mayInterceptIndexedAccesses(locker)) 84 84 return ArrayMode(Array::SelectUsingArguments, Array::PossiblyArray, Array::OutOfBounds, Array::Convert, action); 85 85 return ArrayMode(Array::SelectUsingPredictions, action).withSpeculationFromProfile(locker, profile, makeSafe); 86 86 87 case asArrayModes (NonArrayWithInt32):88 case asArrayModes (ArrayWithInt32):89 case asArrayModes (CopyOnWriteArrayWithInt32):90 case asArrayModes (NonArrayWithInt32) | asArrayModes(ArrayWithInt32):91 case asArrayModes (NonArrayWithInt32) | asArrayModes(CopyOnWriteArrayWithInt32):92 case asArrayModes (ArrayWithInt32) | asArrayModes(CopyOnWriteArrayWithInt32):93 case asArrayModes (NonArrayWithInt32) | asArrayModes(ArrayWithInt32) | asArrayModes(CopyOnWriteArrayWithInt32):87 case asArrayModesIgnoringTypedArrays(NonArrayWithInt32): 88 case asArrayModesIgnoringTypedArrays(ArrayWithInt32): 89 case asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithInt32): 90 case asArrayModesIgnoringTypedArrays(NonArrayWithInt32) | asArrayModesIgnoringTypedArrays(ArrayWithInt32): 91 case asArrayModesIgnoringTypedArrays(NonArrayWithInt32) | asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithInt32): 92 case asArrayModesIgnoringTypedArrays(ArrayWithInt32) | asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithInt32): 93 case asArrayModesIgnoringTypedArrays(NonArrayWithInt32) | asArrayModesIgnoringTypedArrays(ArrayWithInt32) | asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithInt32): 94 94 return handleContiguousModes(Array::Int32, observed); 95 95 96 case asArrayModes (NonArrayWithDouble):97 case asArrayModes (ArrayWithDouble):98 case asArrayModes (CopyOnWriteArrayWithDouble):99 case asArrayModes (NonArrayWithDouble) | asArrayModes(ArrayWithDouble):100 case asArrayModes (NonArrayWithDouble) | asArrayModes(CopyOnWriteArrayWithDouble):101 case asArrayModes (ArrayWithDouble) | asArrayModes(CopyOnWriteArrayWithDouble):102 case asArrayModes (NonArrayWithDouble) | asArrayModes(ArrayWithDouble) | asArrayModes(CopyOnWriteArrayWithDouble):96 case asArrayModesIgnoringTypedArrays(NonArrayWithDouble): 97 case asArrayModesIgnoringTypedArrays(ArrayWithDouble): 98 case asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithDouble): 99 case asArrayModesIgnoringTypedArrays(NonArrayWithDouble) | asArrayModesIgnoringTypedArrays(ArrayWithDouble): 100 case asArrayModesIgnoringTypedArrays(NonArrayWithDouble) | asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithDouble): 101 case asArrayModesIgnoringTypedArrays(ArrayWithDouble) | asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithDouble): 102 case asArrayModesIgnoringTypedArrays(NonArrayWithDouble) | asArrayModesIgnoringTypedArrays(ArrayWithDouble) | asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithDouble): 103 103 return handleContiguousModes(Array::Double, observed); 104 104 105 case asArrayModes (NonArrayWithContiguous):106 case asArrayModes (ArrayWithContiguous):107 case asArrayModes (CopyOnWriteArrayWithContiguous):108 case asArrayModes (NonArrayWithContiguous) | asArrayModes(ArrayWithContiguous):109 case asArrayModes (NonArrayWithContiguous) | asArrayModes(CopyOnWriteArrayWithContiguous):110 case asArrayModes (ArrayWithContiguous) | asArrayModes(CopyOnWriteArrayWithContiguous):111 case asArrayModes (NonArrayWithContiguous) | asArrayModes(ArrayWithContiguous) | asArrayModes(CopyOnWriteArrayWithContiguous):105 case asArrayModesIgnoringTypedArrays(NonArrayWithContiguous): 106 case asArrayModesIgnoringTypedArrays(ArrayWithContiguous): 107 case asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithContiguous): 108 case asArrayModesIgnoringTypedArrays(NonArrayWithContiguous) | asArrayModesIgnoringTypedArrays(ArrayWithContiguous): 109 case asArrayModesIgnoringTypedArrays(NonArrayWithContiguous) | asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithContiguous): 110 case asArrayModesIgnoringTypedArrays(ArrayWithContiguous) | asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithContiguous): 111 case asArrayModesIgnoringTypedArrays(NonArrayWithContiguous) | asArrayModesIgnoringTypedArrays(ArrayWithContiguous) | asArrayModesIgnoringTypedArrays(CopyOnWriteArrayWithContiguous): 112 112 return handleContiguousModes(Array::Contiguous, observed); 113 113 114 case asArrayModes (NonArrayWithArrayStorage):114 case asArrayModesIgnoringTypedArrays(NonArrayWithArrayStorage): 115 115 return ArrayMode(Array::ArrayStorage, nonArray, Array::AsIs, action).withProfile(locker, profile, makeSafe); 116 case asArrayModes (NonArrayWithSlowPutArrayStorage):117 case asArrayModes (NonArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage):116 case asArrayModesIgnoringTypedArrays(NonArrayWithSlowPutArrayStorage): 117 case asArrayModesIgnoringTypedArrays(NonArrayWithArrayStorage) | asArrayModesIgnoringTypedArrays(NonArrayWithSlowPutArrayStorage): 118 118 return ArrayMode(Array::SlowPutArrayStorage, nonArray, Array::AsIs, action).withProfile(locker, profile, makeSafe); 119 case asArrayModes (ArrayWithArrayStorage):119 case asArrayModesIgnoringTypedArrays(ArrayWithArrayStorage): 120 120 return ArrayMode(Array::ArrayStorage, Array::Array, Array::AsIs, action).withProfile(locker, profile, makeSafe); 121 case asArrayModes (ArrayWithSlowPutArrayStorage):122 case asArrayModes (ArrayWithArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage):121 case asArrayModesIgnoringTypedArrays(ArrayWithSlowPutArrayStorage): 122 case asArrayModesIgnoringTypedArrays(ArrayWithArrayStorage) | asArrayModesIgnoringTypedArrays(ArrayWithSlowPutArrayStorage): 123 123 return ArrayMode(Array::SlowPutArrayStorage, Array::Array, Array::AsIs, action).withProfile(locker, profile, makeSafe); 124 case asArrayModes (NonArrayWithArrayStorage) | asArrayModes(ArrayWithArrayStorage):124 case asArrayModesIgnoringTypedArrays(NonArrayWithArrayStorage) | asArrayModesIgnoringTypedArrays(ArrayWithArrayStorage): 125 125 return ArrayMode(Array::ArrayStorage, Array::PossiblyArray, Array::AsIs, action).withProfile(locker, profile, makeSafe); 126 case asArrayModes (NonArrayWithSlowPutArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage):127 case asArrayModes (NonArrayWithArrayStorage) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage):126 case asArrayModesIgnoringTypedArrays(NonArrayWithSlowPutArrayStorage) | asArrayModesIgnoringTypedArrays(ArrayWithSlowPutArrayStorage): 127 case asArrayModesIgnoringTypedArrays(NonArrayWithArrayStorage) | asArrayModesIgnoringTypedArrays(ArrayWithArrayStorage) | asArrayModesIgnoringTypedArrays(NonArrayWithSlowPutArrayStorage) | asArrayModesIgnoringTypedArrays(ArrayWithSlowPutArrayStorage): 128 128 return ArrayMode(Array::SlowPutArrayStorage, Array::PossiblyArray, Array::AsIs, action).withProfile(locker, profile, makeSafe); 129 129 case Int8ArrayMode: … … 151 151 return ArrayMode(Array::Generic, nonArray, Array::AsIs, action).withProfile(locker, profile, makeSafe); 152 152 153 if ((observed & asArrayModes (NonArray)) && profile->mayInterceptIndexedAccesses(locker))153 if ((observed & asArrayModesIgnoringTypedArrays(NonArray)) && profile->mayInterceptIndexedAccesses(locker)) 154 154 return ArrayMode(Array::SelectUsingPredictions).withSpeculationFromProfile(locker, profile, makeSafe); 155 155 … … 439 439 440 440 case Array::Array: { 441 if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModes (shape | IsArray)))441 if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModesIgnoringTypedArrays(shape | IsArray))) 442 442 return true; 443 443 if (value.m_structure.isTop()) … … 456 456 457 457 default: { 458 if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModes (shape) | asArrayModes(shape | IsArray)))458 if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModesIgnoringTypedArrays(shape) | asArrayModesIgnoringTypedArrays(shape | IsArray))) 459 459 return true; 460 460 if (value.m_structure.isTop()) … … 506 506 507 507 case Array::Array: { 508 if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModes (ArrayWithArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)))508 if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModesIgnoringTypedArrays(ArrayWithArrayStorage) | asArrayModesIgnoringTypedArrays(ArrayWithSlowPutArrayStorage))) 509 509 return true; 510 510 if (value.m_structure.isTop()) … … 521 521 522 522 default: { 523 if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModes (NonArrayWithArrayStorage) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)))523 if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModesIgnoringTypedArrays(NonArrayWithArrayStorage) | asArrayModesIgnoringTypedArrays(ArrayWithArrayStorage) | asArrayModesIgnoringTypedArrays(NonArrayWithSlowPutArrayStorage) | asArrayModesIgnoringTypedArrays(ArrayWithSlowPutArrayStorage))) 524 524 return true; 525 525 if (value.m_structure.isTop())
Note:
See TracChangeset
for help on using the changeset viewer.