Summary: | REGRESSION(r144131): It made fast/js/regress/string-repeat-arith.html assert on 32 bit | ||||||
---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Csaba Osztrogonác <ossy> | ||||
Component: | JavaScriptCore | Assignee: | Mark Hahnenberg <mhahnenberg> | ||||
Status: | RESOLVED FIXED | ||||||
Severity: | Normal | CC: | fpizlo, kadam, mhahnenberg, oliver, ossy, zarvai | ||||
Priority: | P1 | Keywords: | Qt, QtTriaged | ||||
Version: | 528+ (Nightly build) | ||||||
Hardware: | All | ||||||
OS: | All | ||||||
Bug Depends on: | |||||||
Bug Blocks: | 79668, 110433 | ||||||
Attachments: |
|
Description
Csaba Osztrogonác
2013-03-11 23:27:56 PDT
ping? ping? I can repro this running 32-bit DumpRenderTree on Mac. Looks like we're trying to compile a ValueToInt32 node, the node thinks it's a constant (isConstant() == true), but the internal JSValue says that it's a cell. Given the revision that caused the regression, looks like we're unboxing incorrectly somewhere. I think this has to do with alwaysUnboxSimplePrimitives introduced in this change and the fact that we always assume in our fixup of ValueToInt32 that if it's not speculated as Integer, Number, or Boolean, then we speculate NotCell, which seems wrong. Nevermind all that. The issue is that we get an empty type for the value during CFA, which guarantees that we're going to exit before we get to this later node (ValueToInt32). Because of this, ValueToInt32 is calling terminateSpeculativeExecution because it doesn't know what to do, when instead it should just abandon compilation of the current basic block. Created attachment 195144 [details]
Patch
Comment on attachment 195144 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=195144&action=review > Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:2107 > - terminateSpeculativeExecution(Uncountable, JSValueRegs(), 0); > + m_compileOkay = false; I think this is wrong. What if this is the first node to type check the child? Then with your change, we'll tell the compiler that we stopped compiling even though the code is totally reachable. Committed r146945: <http://trac.webkit.org/changeset/146945> |