CompareEq(a, null) does strictly less speculation than CompareEq(a, b). Hence if we do one run of CFA and eliminate checks based on seeing CompareEq(a, b) - which can happen because CompareEq(a, b) "proves" that we had done a check which we may later eliminate - and then later prove that b is null, then we will end up emitting zero checks. And then weirdness ensues.
Created attachment 187510 [details] the patch Not marking r? yet because I want to run more benchmarks...
Created attachment 187514 [details] the patch
Landed in http://trac.webkit.org/changeset/142491
(In reply to comment #3) > Landed in http://trac.webkit.org/changeset/142491 This caused build breakage: DFGSpeculativeJIT32_64.cpp:2113:13: error: enumeration values 'CompareEqConstant' and 'CompareStrictEqConstant' not handled in switch [-Werror,-Wswitch] switch (op) { ^
Re-opened since this is blocked by bug 109470
Rollout is happening in https://bugs.webkit.org/show_bug.cgi?id=109470
Landed in http://trac.webkit.org/changeset/142515