Changeset 240991 in webkit
- Timestamp:
- Feb 5, 2019, 1:59:52 PM (6 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r240981 r240991 1 2019-02-05 Mark Lam <mark.lam@apple.com> 2 3 Move DFG nodes that clobberize() says will write(Heap) to the doesGC() list that returns true. 4 https://bugs.webkit.org/show_bug.cgi?id=194298 5 <rdar://problem/47827555> 6 7 Reviewed by Saam Barati. 8 9 We do this for 3 reasons: 10 1. It's clearer when reading doesGC()'s code that these nodes will return true. 11 2. If things change in the future where clobberize() no longer reports these nodes 12 as write(Heap), each node should be vetted first to make sure that it can never 13 GC before being moved back to the doesGC() list that returns false. 14 3. This reduces the list of nodes that we need to audit to make sure doesGC() is 15 correct in its claims about the nodes' GCing possibility. 16 17 The list of nodes moved are: 18 19 ArrayPush 20 ArrayPop 21 Call 22 CallEval 23 CallForwardVarargs 24 CallVarargs 25 Construct 26 ConstructForwardVarargs 27 ConstructVarargs 28 DefineDataProperty 29 DefineAccessorProperty 30 DeleteById 31 DeleteByVal 32 DirectCall 33 DirectConstruct 34 DirectTailCallInlinedCaller 35 GetById 36 GetByIdDirect 37 GetByIdDirectFlush 38 GetByIdFlush 39 GetByIdWithThis 40 GetByValWithThis 41 GetDirectPname 42 GetDynamicVar 43 HasGenericProperty 44 HasOwnProperty 45 HasStructureProperty 46 InById 47 InByVal 48 InstanceOf 49 InstanceOfCustom 50 LoadVarargs 51 NumberToStringWithRadix 52 PutById 53 PutByIdDirect 54 PutByIdFlush 55 PutByIdWithThis 56 PutByOffset 57 PutByValWithThis 58 PutDynamicVar 59 PutGetterById 60 PutGetterByVal 61 PutGetterSetterById 62 PutSetterById 63 PutSetterByVal 64 PutStack 65 PutToArguments 66 RegExpExec 67 RegExpTest 68 ResolveScope 69 ResolveScopeForHoistingFuncDeclInEval 70 TailCall 71 TailCallForwardVarargsInlinedCaller 72 TailCallInlinedCaller 73 TailCallVarargsInlinedCaller 74 ToNumber 75 ToPrimitive 76 ValueNegate 77 78 * dfg/DFGDoesGC.cpp: 79 (JSC::DFG::doesGC): 80 1 81 2019-02-05 Yusuke Suzuki <ysuzuki@apple.com> 2 82 -
trunk/Source/JavaScriptCore/dfg/DFGDoesGC.cpp
r240917 r240991 98 98 case ArithFRound: 99 99 case ArithUnary: 100 case ValueNegate:101 100 case TryGetById: 102 case GetById:103 case GetByIdFlush:104 case GetByIdWithThis:105 case GetByIdDirect:106 case GetByIdDirectFlush:107 case PutById:108 case PutByIdFlush:109 case PutByIdWithThis:110 case PutByValWithThis:111 case PutByIdDirect:112 case PutGetterById:113 case PutSetterById:114 case PutGetterSetterById:115 case PutGetterByVal:116 case PutSetterByVal:117 case DefineDataProperty:118 case DefineAccessorProperty:119 case DeleteById:120 case DeleteByVal:121 101 case CheckStructure: 122 102 case CheckStructureOrEmpty: … … 142 122 case AssertNotEmpty: 143 123 case CheckStringIdent: 144 case RegExpExec:145 124 case RegExpExecNonGlobalOrSticky: 146 case RegExpTest:147 125 case RegExpMatchFast: 148 126 case RegExpMatchFastGlobal: … … 156 134 case CompareStrictEq: 157 135 case CompareEqPtr: 158 case Call:159 case DirectCall:160 case TailCallInlinedCaller:161 case DirectTailCallInlinedCaller:162 case Construct:163 case DirectConstruct:164 case CallVarargs:165 case CallEval:166 case TailCallVarargsInlinedCaller:167 case ConstructVarargs:168 case LoadVarargs:169 case CallForwardVarargs:170 case ConstructForwardVarargs:171 136 case TailCallForwardVarargs: 172 case TailCallForwardVarargsInlinedCaller:173 137 case ProfileType: 174 138 case ProfileControlFlow: 175 139 case OverridesHasInstance: 176 case InstanceOf:177 case InstanceOfCustom:178 140 case IsEmpty: 179 141 case IsUndefined: … … 189 151 case TypeOf: 190 152 case LogicalNot: 191 case ToPrimitive:192 case ToNumber:193 case NumberToStringWithRadix:194 153 case NumberToStringWithValidRadixConstant: 195 case InByVal:196 case InById:197 case HasOwnProperty:198 154 case Jump: 199 155 case Branch: … … 201 157 case EntrySwitch: 202 158 case Return: 203 case TailCall:204 159 case DirectTailCall: 205 160 case TailCallVarargs: … … 246 201 case GetSetter: 247 202 case GetByVal: 248 case GetByValWithThis:249 203 case GetArrayLength: 250 204 case GetVectorLength: 251 case ArrayPush:252 case ArrayPop:253 205 case StringCharAt: 254 206 case StringCharCodeAt: … … 261 213 case GetByOffset: 262 214 case GetGetterSetterByOffset: 263 case PutByOffset:264 215 case GetEnumerableLength: 265 case HasGenericProperty:266 case HasStructureProperty:267 216 case HasIndexedProperty: 268 case GetDirectPname:269 217 case FiatInt52: 270 218 case BooleanToNumber: … … 288 236 case ForwardVarargs: 289 237 case PutHint: 290 case PutStack:291 238 case KillStack: 292 239 case GetStack: 293 240 case GetFromArguments: 294 case PutToArguments:295 241 case GetArgument: 296 242 case LogShadowChickenPrologue: 297 243 case LogShadowChickenTail: 298 case GetDynamicVar:299 case PutDynamicVar:300 case ResolveScopeForHoistingFuncDeclInEval:301 case ResolveScope:302 244 case NukeStructureAndSetButterfly: 303 245 case AtomicsAdd: … … 321 263 return false; 322 264 265 case ArrayPush: 266 case ArrayPop: 323 267 case PushWithScope: 324 268 case CreateActivation: … … 326 270 case CreateScopedArguments: 327 271 case CreateClonedArguments: 272 case Call: 273 case CallEval: 274 case CallForwardVarargs: 328 275 case CallObjectConstructor: 276 case CallVarargs: 277 case Construct: 278 case ConstructForwardVarargs: 279 case ConstructVarargs: 280 case DefineDataProperty: 281 case DefineAccessorProperty: 282 case DeleteById: 283 case DeleteByVal: 284 case DirectCall: 285 case DirectConstruct: 286 case DirectTailCallInlinedCaller: 287 case GetById: 288 case GetByIdDirect: 289 case GetByIdDirectFlush: 290 case GetByIdFlush: 291 case GetByIdWithThis: 292 case GetByValWithThis: 293 case GetDirectPname: 294 case GetDynamicVar: 295 case HasGenericProperty: 296 case HasOwnProperty: 297 case HasStructureProperty: 298 case InById: 299 case InByVal: 300 case InstanceOf: 301 case InstanceOfCustom: 302 case LoadVarargs: 303 case NumberToStringWithRadix: 304 case PutById: 305 case PutByIdDirect: 306 case PutByIdFlush: 307 case PutByIdWithThis: 308 case PutByOffset: 309 case PutByValWithThis: 310 case PutDynamicVar: 311 case PutGetterById: 312 case PutGetterByVal: 313 case PutGetterSetterById: 314 case PutSetterById: 315 case PutSetterByVal: 316 case PutStack: 317 case PutToArguments: 318 case RegExpExec: 319 case RegExpTest: 320 case ResolveScope: 321 case ResolveScopeForHoistingFuncDeclInEval: 322 case TailCall: 323 case TailCallForwardVarargsInlinedCaller: 324 case TailCallInlinedCaller: 325 case TailCallVarargsInlinedCaller: 326 case ToNumber: 329 327 case ToObject: 328 case ToPrimitive: 330 329 case ToThis: 331 330 case CreateThis: … … 380 379 case ValueMul: 381 380 case ValueDiv: 381 case ValueNegate: 382 382 return true; 383 383
Note:
See TracChangeset
for help on using the changeset viewer.