| Summary: | mayExit() is wrong about Branch nodes with ObjectOrOtherUse: they can exit. | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | WebKit | Reporter: | Mark Lam <mark.lam> | ||||||||
| Component: | JavaScriptCore | Assignee: | Mark Lam <mark.lam> | ||||||||
| Status: | RESOLVED FIXED | ||||||||||
| Severity: | Normal | CC: | basile_clement, benjamin, commit-queue, fpizlo, ggaren, mmirman, msaboff, saam, webkit-bug-importer | ||||||||
| Priority: | P2 | Keywords: | InRadar | ||||||||
| Version: | 528+ (Nightly build) | ||||||||||
| Hardware: | Unspecified | ||||||||||
| OS: | Unspecified | ||||||||||
| Attachments: |
|
||||||||||
|
Description
Mark Lam
2015-04-24 10:41:29 PDT
I think you are misdiagnosing this bug. Please reread the code in mayExit. It does not claim that Branches don't exit. Quite on the contrary. It claims that they exit if there are type checks to be done. Please post the IR that causes the crash. Please do not make Branch an unconditional mayExit as that would be incorrect and would break the DFG peephole branch optimizations. (In reply to comment #2) > I think you are misdiagnosing this bug. Please reread the code in mayExit. > It does not claim that Branches don't exit. Quite on the contrary. It claims > that they exit if there are type checks to be done. > > Please post the IR that causes the crash. Please do not make Branch an > unconditional mayExit as that would be incorrect and would break the DFG > peephole branch optimizations. You are right. I will look further. Please post the IR and the --verboseCompilation=true dump. My guess is that we have already exited prior to the Branch and so the assertion is just wrong. That assertion is pure evil IMO - it has never caught a real bug but it often forces us to perform mental gymnastics to spoon feed it to not fire incorrectly. Having more eyes on the IR would help us decide if the assertion should be removed. Created attachment 251560 [details]
DFG dumps when compiling the problematic function (with inlining).
Dumps attached.
OMG the assertion caught its first ever bug!
Branch with an ObjectOrOther child does speculate stronger than just the type check. We have several options here:
1) Audit the various kinds of Branch use kinds. There should only be a handful and you can see them all in SpeculativeJIT::emitBranch(). For those that can exit for reasons other than a type check, make mayExit return true. This means literally doing something like:
case Branch:
if (node->child1().useKind() == ObjectOrOtherUse)
return true;
break;
2) Make the EdgeMayExit functor assume that all ObjectOrOtherUse's may exit. I think that ObjectUse, StringObjectUse, and StringOrStringObjectUse are similarly shady.
2.1) Do the same thing but ObjectOrOtherUse/ObjectUse only claim to exit if !masqueradesAsUndefinedWatchpointIsStillValid().
3) Change our handling of masquerades-as-undefined to not exit. This would be ideal, but feels longer-term.
To me, (2) feels best. We really only need to prove that Branches don't exit in the case where the child is BooleanUse or something else simple (like Int32Use). More generally, proving that a node doesn't exit is really only useful if the node emits little code. Any node that has a ObjectUse/ObjectOrOtherUse with !masqueradesAsUndefinedWatchpointIsStillValid() will already be emitting a lot of code. Ditto for StringObjectUse and StringOrStringObjectUse.
(In reply to comment #6) > OMG the assertion caught its first ever bug! > > Branch with an ObjectOrOther child does speculate stronger than just the > type check. We have several options here: > > 1) Audit the various kinds of Branch use kinds. There should only be a > handful and you can see them all in SpeculativeJIT::emitBranch(). For those > that can exit for reasons other than a type check, make mayExit return true. > This means literally doing something like: > > case Branch: > if (node->child1().useKind() == ObjectOrOtherUse) > return true; > break; > > 2) Make the EdgeMayExit functor assume that all ObjectOrOtherUse's may exit. > I think that ObjectUse, StringObjectUse, and StringOrStringObjectUse are > similarly shady. > > 2.1) Do the same thing but ObjectOrOtherUse/ObjectUse only claim to exit if > !masqueradesAsUndefinedWatchpointIsStillValid(). > > 3) Change our handling of masquerades-as-undefined to not exit. This would > be ideal, but feels longer-term. > > To me, (2) feels best. We really only need to prove that Branches don't exit > in the case where the child is BooleanUse or something else simple (like > Int32Use). More generally, proving that a node doesn't exit is really only > useful if the node emits little code. Any node that has a > ObjectUse/ObjectOrOtherUse with > !masqueradesAsUndefinedWatchpointIsStillValid() will already be emitting a > lot of code. Ditto for StringObjectUse and StringOrStringObjectUse. I'm actually torn between (2) and (2.1). (2) feels more conservative and I don't think there will be a perf penalty. We can just do that and skip the masqueradesAsUndefinedWatchpointIsStillValid() check. Created attachment 251627 [details]
The patch.
Attachment 251627 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/dfg/DFGMayExit.cpp:53: Missing space before ( in switch( [whitespace/parens] [5]
Total errors found: 1 in 3 files
If any of these errors are false positives, please file a bug against check-webkit-style.
This patch is perf neutral. The perf run results says:
base new
SunSpider:
3d-cube 5.5744+-0.0938 ? 5.5799+-0.2517 ?
3d-morph 6.5057+-0.2961 ? 6.6702+-0.6524 ? might be 1.0253x slower
3d-raytrace 7.1182+-0.3422 7.0635+-0.1795
access-binary-trees 2.6935+-0.2784 2.6257+-0.0604 might be 1.0258x faster
access-fannkuch 6.9232+-0.3806 ? 7.1273+-1.2611 ? might be 1.0295x slower
access-nbody 3.2115+-0.1071 ? 3.5020+-0.6780 ? might be 1.0904x slower
access-nsieve 3.4487+-0.1947 ? 3.5392+-0.1777 ? might be 1.0263x slower
bitops-3bit-bits-in-byte 2.0422+-0.0355 ? 2.0886+-0.1684 ? might be 1.0227x slower
bitops-bits-in-byte 3.7002+-0.0530 ? 3.8979+-0.4750 ? might be 1.0534x slower
bitops-bitwise-and 2.5031+-0.1170 ? 2.5270+-0.1097 ?
bitops-nsieve-bits 4.0560+-0.1870 ? 4.1191+-0.4165 ? might be 1.0156x slower
controlflow-recursive 2.6352+-0.0929 2.5900+-0.0129 might be 1.0175x faster
crypto-aes 4.9140+-0.1871 ? 5.3190+-2.3430 ? might be 1.0824x slower
crypto-md5 2.7933+-0.0445 ? 2.8002+-0.0805 ?
crypto-sha1 3.4106+-0.3270 2.9371+-0.2416 might be 1.1612x faster
date-format-tofte 10.8882+-0.4240 10.5993+-0.2800 might be 1.0273x faster
date-format-xparb 7.1276+-1.2001 6.8905+-1.1975 might be 1.0344x faster
math-cordic 3.5905+-0.0265 ? 3.6268+-0.1243 ? might be 1.0101x slower
math-partial-sums 6.2017+-0.3202 ? 6.2298+-0.4599 ?
math-spectral-norm 2.4942+-0.0258 ? 2.5179+-0.1042 ?
regexp-dna 8.2469+-0.2962 ? 9.3937+-4.7090 ? might be 1.1390x slower
string-base64 5.5818+-1.3511 5.2335+-0.0952 might be 1.0665x faster
string-fasta 7.5832+-0.1146 ? 7.8657+-1.1027 ? might be 1.0372x slower
string-tagcloud 10.9545+-0.2337 ? 12.4018+-2.3075 ? might be 1.1321x slower
string-unpack-code 22.9037+-1.0580 22.6922+-0.6402
string-validate-input 5.3069+-0.1141 ? 5.6090+-0.2465 ? might be 1.0569x slower
<arithmetic> 5.8619+-0.1243 ? 5.9787+-0.3113 ? might be 1.0199x slower
base new
LongSpider:
3d-cube 971.0438+-17.7571 ? 975.9065+-6.4847 ?
3d-morph 1663.1142+-12.6061 ? 1664.9946+-18.7981 ?
3d-raytrace 861.9977+-28.1014 851.3156+-15.0090 might be 1.0125x faster
access-binary-trees 1170.0165+-24.5854 ? 1174.5482+-22.4636 ?
access-fannkuch 362.6915+-5.8621 359.8892+-12.6492
access-nbody 698.5020+-8.0206 698.1550+-12.8504
access-nsieve 941.8970+-10.2948 ? 942.5272+-14.3738 ?
bitops-3bit-bits-in-byte 55.5789+-2.3915 ? 56.2487+-4.7931 ? might be 1.0121x slower
bitops-bits-in-byte 102.7449+-4.2441 100.9889+-4.2265 might be 1.0174x faster
bitops-nsieve-bits 808.2358+-14.0805 ? 814.8433+-4.3613 ?
controlflow-recursive 546.5628+-5.2303 ? 547.0485+-4.1435 ?
crypto-aes 781.1022+-18.2853 ? 788.7668+-13.3777 ?
crypto-md5 666.2792+-13.2764 653.1055+-10.4396 might be 1.0202x faster
crypto-sha1 777.9984+-61.1024 756.2739+-3.3884 might be 1.0287x faster
date-format-tofte 860.1874+-17.5421 857.6820+-31.6140
date-format-xparb 877.9813+-40.9474 ? 900.4543+-11.2052 ? might be 1.0256x slower
math-cordic 686.8618+-8.0941 685.7507+-5.6285
math-partial-sums 611.2769+-9.5644 607.5903+-9.4929
math-spectral-norm 941.8383+-8.9130 ? 943.9383+-13.4638 ?
string-base64 445.9282+-16.0044 429.2496+-16.0416 might be 1.0389x faster
string-fasta 500.7594+-14.7213 488.3538+-5.7583 might be 1.0254x faster
string-tagcloud 252.0788+-14.1826 248.0712+-4.6016 might be 1.0162x faster
<geometric> 581.6810+-5.1047 578.8757+-4.5152 might be 1.0048x faster
base new
V8Spider:
crypto 71.6376+-8.4623 67.5612+-2.5843 might be 1.0603x faster
deltablue 118.8192+-6.8454 113.1227+-6.6359 might be 1.0504x faster
earley-boyer 53.5320+-3.2764 52.1106+-5.7698 might be 1.0273x faster
raytrace 49.0752+-8.9162 48.0114+-6.4923 might be 1.0222x faster
regexp 97.0585+-8.5454 96.9154+-12.2905
richards 96.5822+-4.7923 95.1752+-7.1797 might be 1.0148x faster
splay 46.7027+-4.0966 45.4249+-1.3525 might be 1.0281x faster
<geometric> 71.6781+-4.0696 69.6499+-2.0030 might be 1.0291x faster
base new
Octane:
encrypt 0.26881+-0.00212 ? 0.27116+-0.00622 ?
decrypt 4.64231+-0.09254 ? 4.65493+-0.11568 ?
deltablue x2 0.23349+-0.00874 0.23002+-0.00383 might be 1.0151x faster
earley 0.60247+-0.00603 ? 0.60758+-0.01426 ?
boyer 7.79092+-0.07514 ? 7.88958+-0.12683 ? might be 1.0127x slower
navier-stokes x2 5.62716+-0.04486 ? 5.63644+-0.04662 ?
raytrace x2 1.52283+-0.05740 ? 1.52405+-0.06478 ?
richards x2 0.12640+-0.00416 0.12461+-0.00041 might be 1.0144x faster
splay x2 0.45640+-0.01388 0.45351+-0.00461
regexp x2 36.69367+-0.56604 ? 36.80426+-0.49835 ?
pdfjs x2 50.59906+-0.94141 50.52350+-0.64664
mandreel x2 63.70522+-0.50415 ? 63.78259+-0.79146 ?
gbemu x2 51.82317+-4.68045 ? 55.60900+-5.72758 ? might be 1.0731x slower
closure 0.62366+-0.00568 0.61673+-0.00468 might be 1.0112x faster
jquery 7.93029+-0.07163 7.90925+-0.06237
box2d x2 14.45610+-0.19929 14.30350+-0.31181 might be 1.0107x faster
zlib x2 450.41317+-8.88983 447.19714+-2.30432
typescript x2 935.26251+-14.64051 ? 937.91345+-10.47528 ?
<geometric> 7.77965+-0.05082 ? 7.79750+-0.06009 ? might be 1.0023x slower
base new
Kraken:
ai-astar 303.146+-3.540 293.426+-6.870 might be 1.0331x faster
audio-beat-detection 121.667+-2.477 ? 122.361+-2.539 ?
audio-dft 196.296+-15.214 191.906+-2.928 might be 1.0229x faster
audio-fft 98.054+-3.797 95.606+-6.141 might be 1.0256x faster
audio-oscillator 227.638+-8.124 ? 229.116+-11.310 ?
imaging-darkroom 116.693+-3.219 116.693+-4.138
imaging-desaturate 76.280+-0.775 ? 76.492+-1.409 ?
imaging-gaussian-blur 126.757+-6.290 ? 128.085+-4.582 ? might be 1.0105x slower
json-parse-financial 53.009+-4.621 52.471+-4.632 might be 1.0103x faster
json-stringify-tinderbox 62.667+-0.478 ? 64.405+-3.720 ? might be 1.0277x slower
stanford-crypto-aes 73.469+-1.706 ? 73.775+-2.207 ?
stanford-crypto-ccm 65.743+-9.618 64.026+-8.703 might be 1.0268x faster
stanford-crypto-pbkdf2 188.585+-7.484 ? 191.315+-5.965 ? might be 1.0145x slower
stanford-crypto-sha256-iterative 62.165+-4.521 ? 62.335+-4.304 ?
<arithmetic> 126.584+-2.205 125.858+-1.017 might be 1.0058x faster
base new
JSRegress:
abs-boolean 3.3495+-0.1212 ? 3.3638+-0.1032 ?
adapt-to-double-divide 18.5046+-1.7732 17.7758+-0.3186 might be 1.0410x faster
aliased-arguments-getbyval 1.4459+-0.0838 1.3906+-0.0287 might be 1.0398x faster
allocate-big-object 3.5703+-1.0774 3.2059+-0.3684 might be 1.1137x faster
arguments-named-and-reflective 13.9228+-0.4114 ? 15.5793+-3.4853 ? might be 1.1190x slower
arguments-out-of-bounds 16.7498+-0.7581 ? 17.0828+-2.2018 ? might be 1.0199x slower
arguments-strict-mode 12.1715+-0.7225 11.7308+-0.4869 might be 1.0376x faster
arguments 11.3845+-1.6005 10.7834+-0.3398 might be 1.0557x faster
arity-mismatch-inlining 1.0561+-0.1074 1.0042+-0.0402 might be 1.0517x faster
array-access-polymorphic-structure 7.6504+-0.3794 7.3070+-0.3399 might be 1.0470x faster
array-nonarray-polymorhpic-access 45.7257+-5.6128 ? 47.0675+-3.4574 ? might be 1.0293x slower
array-prototype-every 100.9581+-5.7357 ? 103.5298+-7.9702 ? might be 1.0255x slower
array-prototype-forEach 100.5665+-3.3922 ? 101.1807+-8.9240 ?
array-prototype-map 109.9150+-8.0850 108.3725+-4.0641 might be 1.0142x faster
array-prototype-some 102.4027+-6.0425 ? 103.5153+-4.4138 ? might be 1.0109x slower
array-splice-contiguous 45.9628+-0.8004 ? 46.7455+-4.3461 ? might be 1.0170x slower
array-with-double-add 4.5463+-0.1744 ? 4.5948+-0.1311 ? might be 1.0107x slower
array-with-double-increment 4.0178+-0.0829 3.9598+-0.1460 might be 1.0146x faster
array-with-double-mul-add 5.5212+-0.3386 5.4395+-0.1404 might be 1.0150x faster
array-with-double-sum 3.6960+-0.1729 3.6430+-0.1491 might be 1.0146x faster
array-with-int32-add-sub 7.8813+-0.0484 ? 8.0610+-0.1602 ? might be 1.0228x slower
array-with-int32-or-double-sum 3.6832+-0.1133 ? 3.7768+-0.1947 ? might be 1.0254x slower
ArrayBuffer-DataView-alloc-large-long-lived
41.8669+-5.5850 ? 44.2925+-4.9541 ? might be 1.0579x slower
ArrayBuffer-DataView-alloc-long-lived 19.1470+-6.2876 15.9680+-0.2714 might be 1.1991x faster
ArrayBuffer-Int32Array-byteOffset 4.7105+-0.1364 ? 4.8826+-0.2875 ? might be 1.0365x slower
ArrayBuffer-Int8Array-alloc-large-long-lived
42.8318+-4.3577 ? 43.0060+-10.3531 ?
ArrayBuffer-Int8Array-alloc-long-lived-buffer
31.3275+-14.4176 26.6835+-5.1324 might be 1.1740x faster
ArrayBuffer-Int8Array-alloc-long-lived 16.8715+-4.1890 16.6125+-4.6521 might be 1.0156x faster
ArrayBuffer-Int8Array-alloc 14.0165+-4.5737 ? 14.2581+-4.4361 ? might be 1.0172x slower
asmjs_bool_bug 8.6384+-1.4090 8.5137+-1.0644 might be 1.0147x faster
assign-custom-setter-polymorphic 3.3917+-0.1705 ? 3.5350+-0.1548 ? might be 1.0423x slower
assign-custom-setter 5.2039+-1.3108 4.7607+-0.2248 might be 1.0931x faster
basic-set 10.3416+-0.6428 10.0400+-0.2188 might be 1.0300x faster
big-int-mul 4.7112+-0.0987 4.7048+-0.0796
boolean-test 3.5606+-0.1001 ? 3.6159+-0.1834 ? might be 1.0155x slower
branch-fold 4.5087+-0.2300 ? 4.8217+-1.0703 ? might be 1.0694x slower
by-val-generic 8.6940+-0.2919 ? 8.8036+-0.1182 ? might be 1.0126x slower
call-spread-apply 34.4985+-3.6064 32.4900+-1.4697 might be 1.0618x faster
call-spread-call 27.9999+-4.3327 27.9131+-4.3388
captured-assignments 0.6017+-0.2569 0.5159+-0.0602 might be 1.1662x faster
cast-int-to-double 5.9158+-0.1780 5.8392+-0.0614 might be 1.0131x faster
cell-argument 9.7680+-2.1805 9.3375+-0.5411 might be 1.0461x faster
cfg-simplify 3.3945+-0.1981 3.3539+-0.0928 might be 1.0121x faster
chain-getter-access 11.3349+-0.4434 ? 11.4915+-0.4774 ? might be 1.0138x slower
cmpeq-obj-to-obj-other 12.8413+-1.7038 ? 13.7186+-1.2374 ? might be 1.0683x slower
constant-test 5.4886+-0.0864 ? 5.5255+-0.0902 ?
DataView-custom-properties 46.7460+-7.7712 ? 46.8822+-3.2496 ?
delay-tear-off-arguments-strictmode 14.9829+-0.2448 ? 15.1779+-0.3217 ? might be 1.0130x slower
deltablue-varargs 226.7807+-5.9585 ? 226.8129+-3.9104 ?
destructuring-arguments 19.9772+-4.0960 ? 20.0242+-3.4809 ?
destructuring-swap 5.7095+-0.0530 5.6942+-0.1331
direct-arguments-getbyval 1.4800+-0.1019 1.3868+-0.0573 might be 1.0672x faster
div-boolean-double 5.7261+-0.0232 5.7238+-0.0375
div-boolean 8.4479+-0.1662 ? 9.1962+-2.1460 ? might be 1.0886x slower
double-get-by-val-out-of-bounds 5.2172+-0.4250 5.0623+-0.0663 might be 1.0306x faster
double-pollution-getbyval 9.5650+-0.2617 9.5537+-0.3385
double-pollution-putbyoffset 5.0538+-0.1290 ? 5.6697+-1.9907 ? might be 1.1219x slower
double-to-int32-typed-array-no-inline 2.5687+-0.0525 ? 2.6163+-0.1932 ? might be 1.0185x slower
double-to-int32-typed-array 2.2666+-0.0197 2.2647+-0.0504
double-to-uint32-typed-array-no-inline 2.7302+-0.2209 ? 2.8376+-0.6799 ? might be 1.0393x slower
double-to-uint32-typed-array 2.6046+-0.8432 2.4600+-0.1607 might be 1.0588x faster
elidable-new-object-dag 53.4572+-1.4206 51.1650+-2.9291 might be 1.0448x faster
elidable-new-object-roflcopter 54.8994+-5.6758 51.3207+-2.9789 might be 1.0697x faster
elidable-new-object-then-call 45.5085+-3.4328 ? 47.6672+-4.8181 ? might be 1.0474x slower
elidable-new-object-tree 52.8203+-2.9507 52.5881+-1.8541
empty-string-plus-int 7.1165+-1.6014 ? 8.0035+-3.9720 ? might be 1.1246x slower
emscripten-cube2hash 47.1104+-5.6470 45.7471+-5.1022 might be 1.0298x faster
exit-length-on-plain-object 16.2368+-3.6358 15.6689+-1.3711 might be 1.0362x faster
external-arguments-getbyval 1.5347+-0.1008 ? 1.7554+-0.6242 ? might be 1.1439x slower
external-arguments-putbyval 2.7225+-0.0892 ? 2.9777+-0.9112 ? might be 1.0938x slower
fixed-typed-array-storage-var-index 1.5070+-0.1500 1.4627+-0.0227 might be 1.0303x faster
fixed-typed-array-storage 1.1943+-0.4671 1.1910+-0.3308
Float32Array-matrix-mult 6.3909+-2.4733 4.8860+-0.1732 might be 1.3080x faster
Float32Array-to-Float64Array-set 62.4678+-5.7222 59.9715+-2.3561 might be 1.0416x faster
Float64Array-alloc-long-lived 81.3341+-4.3452 81.1977+-3.1402
Float64Array-to-Int16Array-set 75.3633+-3.5009 74.2695+-4.3010 might be 1.0147x faster
fold-double-to-int 18.3569+-2.5640 17.3353+-1.7020 might be 1.0589x faster
fold-get-by-id-to-multi-get-by-offset-rare-int
11.3891+-2.2435 ? 13.5881+-1.6980 ? might be 1.1931x slower
fold-get-by-id-to-multi-get-by-offset 11.0608+-1.1143 ? 11.1874+-0.2518 ? might be 1.0115x slower
fold-multi-get-by-offset-to-get-by-offset
10.6075+-2.1367 9.8671+-1.1333 might be 1.0750x faster
fold-multi-get-by-offset-to-poly-get-by-offset
10.4624+-4.0918 10.4515+-3.7803
fold-multi-put-by-offset-to-poly-put-by-offset
9.5578+-1.6144 ? 9.9772+-2.2098 ? might be 1.0439x slower
fold-multi-put-by-offset-to-put-by-offset
6.9205+-1.8307 ? 7.5939+-1.4031 ? might be 1.0973x slower
fold-multi-put-by-offset-to-replace-or-transition-put-by-offset
10.3445+-0.8835 10.3316+-0.6978
fold-put-by-id-to-multi-put-by-offset 10.2908+-0.6833 ? 10.5958+-0.6209 ? might be 1.0296x slower
fold-put-structure 6.2587+-1.5094 6.1311+-1.2977 might be 1.0208x faster
for-of-iterate-array-entries 5.4938+-0.3549 5.3744+-0.4705 might be 1.0222x faster
for-of-iterate-array-keys 4.3080+-0.1777 ? 4.3272+-0.3400 ?
for-of-iterate-array-values 4.2610+-0.1260 ? 4.2657+-0.0735 ?
fround 21.4086+-2.2162 ? 21.5772+-1.9072 ?
ftl-library-inlining-dataview 91.0552+-10.6165 88.9220+-7.9812 might be 1.0240x faster
ftl-library-inlining 119.9620+-6.5216 116.9207+-1.0092 might be 1.0260x faster
function-dot-apply 3.0538+-1.0785 2.5964+-0.1090 might be 1.1762x faster
function-test 3.8354+-0.3766 3.7343+-0.1384 might be 1.0271x faster
function-with-eval 120.8630+-11.1621 115.3810+-4.6636 might be 1.0475x faster
gcse-poly-get-less-obvious 22.3264+-4.7959 19.7748+-0.7155 might be 1.1290x faster
gcse-poly-get 24.9763+-3.6901 23.3394+-3.9625 might be 1.0701x faster
gcse 5.1766+-0.1831 5.1190+-0.0267 might be 1.0112x faster
get-by-id-bimorphic-check-structure-elimination-simple
3.0497+-0.1435 ? 3.1007+-0.0656 ? might be 1.0167x slower
get-by-id-bimorphic-check-structure-elimination
7.2515+-0.0237 ? 7.4920+-0.3529 ? might be 1.0332x slower
get-by-id-chain-from-try-block 9.9276+-4.7132 8.5895+-4.3900 might be 1.1558x faster
get-by-id-check-structure-elimination 5.8749+-0.1966 ? 5.9370+-0.1408 ? might be 1.0106x slower
get-by-id-proto-or-self 19.1318+-0.8115 18.8389+-0.3415 might be 1.0155x faster
get-by-id-quadmorphic-check-structure-elimination-simple
3.4508+-0.4076 3.3878+-0.1194 might be 1.0186x faster
get-by-id-self-or-proto 19.6078+-1.9682 19.1702+-0.5592 might be 1.0228x faster
get-by-val-out-of-bounds 5.3259+-1.0870 4.9758+-0.3157 might be 1.0704x faster
get_callee_monomorphic 3.1841+-0.0647 ? 3.1880+-0.0885 ?
get_callee_polymorphic 4.9995+-1.7478 4.7605+-1.5342 might be 1.0502x faster
getter-no-activation 5.8760+-0.4866 ? 6.1040+-0.6527 ? might be 1.0388x slower
getter-richards 143.3148+-11.4646 140.9787+-13.2188 might be 1.0166x faster
getter 6.2323+-0.3755 ? 6.5430+-0.6719 ? might be 1.0499x slower
global-var-const-infer-fire-from-opt 1.1073+-0.2182 1.0259+-0.1548 might be 1.0793x faster
global-var-const-infer 0.8629+-0.1324 ? 0.9596+-0.2327 ? might be 1.1121x slower
HashMap-put-get-iterate-keys 30.4113+-0.2109 ? 31.2351+-1.6099 ? might be 1.0271x slower
HashMap-put-get-iterate 31.2881+-2.7729 ? 31.6324+-4.7909 ? might be 1.0110x slower
HashMap-string-put-get-iterate 31.2709+-1.6492 30.9868+-1.4887
hoist-make-rope 12.8431+-2.8856 ? 14.1974+-1.2655 ? might be 1.1055x slower
hoist-poly-check-structure-effectful-loop
6.1779+-0.2740 6.0422+-0.1474 might be 1.0225x faster
hoist-poly-check-structure 4.1469+-0.1063 4.1277+-0.1519
imul-double-only 9.1133+-0.2190 ? 9.1992+-0.3510 ?
imul-int-only 11.8768+-0.8389 11.8323+-0.6986
imul-mixed 8.7748+-0.3177 8.4963+-0.3356 might be 1.0328x faster
in-four-cases 22.3262+-0.6947 ? 22.8437+-0.4655 ? might be 1.0232x slower
in-one-case-false 11.7299+-0.3557 ? 11.8887+-0.6920 ? might be 1.0135x slower
in-one-case-true 11.6354+-0.0956 ? 11.6945+-0.3026 ?
in-two-cases 11.9034+-0.0974 ? 12.2146+-0.8608 ? might be 1.0261x slower
indexed-properties-in-objects 3.3652+-0.3155 ? 3.7103+-1.2743 ? might be 1.1025x slower
infer-closure-const-then-mov-no-inline 4.8565+-0.6212 4.8050+-0.4642 might be 1.0107x faster
infer-closure-const-then-mov 22.5591+-1.7538 21.9780+-0.4551 might be 1.0264x faster
infer-closure-const-then-put-to-scope-no-inline
15.0995+-0.3525 14.8437+-0.4797 might be 1.0172x faster
infer-closure-const-then-put-to-scope 25.2330+-0.7454 24.8722+-0.5417 might be 1.0145x faster
infer-closure-const-then-reenter-no-inline
72.3951+-4.8118 ? 73.5869+-13.6678 ? might be 1.0165x slower
infer-closure-const-then-reenter 25.6877+-1.9906 ? 26.7811+-2.9478 ? might be 1.0426x slower
infer-constant-global-property 34.1172+-4.0825 32.4689+-0.0994 might be 1.0508x faster
infer-constant-property 3.2595+-0.2679 ? 3.2924+-0.5387 ? might be 1.0101x slower
infer-one-time-closure-ten-vars 13.2575+-0.3497 ? 13.7787+-0.7665 ? might be 1.0393x slower
infer-one-time-closure-two-vars 14.6227+-4.3244 13.3996+-0.7255 might be 1.0913x faster
infer-one-time-closure 13.5162+-1.9795 ? 14.1323+-4.4189 ? might be 1.0456x slower
infer-one-time-deep-closure 23.6788+-3.4881 23.0211+-1.3233 might be 1.0286x faster
inline-arguments-access 4.9923+-0.1648 4.9871+-0.1498
inline-arguments-aliased-access 4.9995+-0.2667 ? 5.0696+-0.2672 ? might be 1.0140x slower
inline-arguments-local-escape 5.1116+-0.3773 5.0638+-0.2946
inline-get-scoped-var 5.5007+-0.0894 ? 5.5807+-0.1914 ? might be 1.0145x slower
inlined-put-by-id-transition 12.8026+-0.4323 ? 13.6588+-1.9190 ? might be 1.0669x slower
int-or-other-abs-then-get-by-val 5.7339+-0.1596 ? 5.7413+-0.1217 ?
int-or-other-abs-zero-then-get-by-val 20.3388+-0.6333 20.2909+-0.3237
int-or-other-add-then-get-by-val 6.1177+-0.0889 ? 6.2474+-0.3296 ? might be 1.0212x slower
int-or-other-add 5.9003+-0.0238 ? 5.9234+-0.0331 ?
int-or-other-div-then-get-by-val 5.0118+-0.1780 4.9431+-0.0315 might be 1.0139x faster
int-or-other-max-then-get-by-val 5.0602+-0.0644 ? 5.0773+-0.0195 ?
int-or-other-min-then-get-by-val 5.1218+-0.1257 ? 5.2264+-0.1452 ? might be 1.0204x slower
int-or-other-mod-then-get-by-val 4.6023+-0.1118 ? 4.6981+-0.4804 ? might be 1.0208x slower
int-or-other-mul-then-get-by-val 4.5869+-0.0983 4.5630+-0.0693
int-or-other-neg-then-get-by-val 5.3287+-0.1641 ? 5.4020+-0.2213 ? might be 1.0137x slower
int-or-other-neg-zero-then-get-by-val 21.6185+-2.3656 ? 21.7750+-2.7900 ?
int-or-other-sub-then-get-by-val 6.1179+-0.0567 6.1149+-0.0369
int-or-other-sub 4.3410+-0.1350 4.3052+-0.0476
int-overflow-local 6.4857+-3.3048 5.4675+-0.1066 might be 1.1862x faster
Int16Array-alloc-long-lived 63.2897+-4.4786 ? 63.6017+-5.6967 ?
Int16Array-bubble-sort-with-byteLength 24.5015+-1.8119 ? 24.5467+-1.7857 ?
Int16Array-bubble-sort 24.3032+-0.6936 ? 24.7411+-0.8525 ? might be 1.0180x slower
Int16Array-load-int-mul 2.2336+-0.8094 1.8538+-0.0849 might be 1.2049x faster
Int16Array-to-Int32Array-set 58.3881+-2.3950 ? 62.0777+-7.4069 ? might be 1.0632x slower
Int32Array-alloc-large 25.1340+-1.0102 24.6895+-1.6242 might be 1.0180x faster
Int32Array-alloc-long-lived 66.3721+-3.4630 ? 66.4320+-3.7880 ?
Int32Array-alloc 3.8952+-0.1308 ? 3.9327+-0.0662 ?
Int32Array-Int8Array-view-alloc 9.7680+-3.9395 ? 9.9150+-2.9328 ? might be 1.0151x slower
int52-spill 7.2799+-0.2004 ? 7.5668+-0.4863 ? might be 1.0394x slower
Int8Array-alloc-long-lived 59.0584+-3.0011 53.8123+-2.5617 might be 1.0975x faster
Int8Array-load-with-byteLength 4.1168+-0.1109 ? 4.1537+-0.1375 ?
Int8Array-load 4.0966+-0.1335 ? 4.2084+-0.2129 ? might be 1.0273x slower
integer-divide 12.6866+-0.2527 12.5814+-0.1578
integer-modulo 2.3652+-0.1149 ? 2.6626+-1.0545 ? might be 1.1257x slower
large-int-captured 5.1250+-0.0405 ? 5.3151+-0.4370 ? might be 1.0371x slower
large-int-neg 21.0125+-4.9805 19.3167+-2.0608 might be 1.0878x faster
large-int 16.5065+-0.1139 ? 17.6221+-2.3772 ? might be 1.0676x slower
logical-not 5.1554+-0.0512 ? 5.2585+-0.3499 ? might be 1.0200x slower
lots-of-fields 15.1877+-1.3238 ? 15.5803+-3.8601 ? might be 1.0258x slower
make-indexed-storage 3.6744+-0.4964 ? 3.7665+-0.6590 ? might be 1.0251x slower
make-rope-cse 5.3613+-1.4383 ? 5.9384+-1.3954 ? might be 1.1076x slower
marsaglia-larger-ints 53.9083+-9.2579 50.3105+-4.4346 might be 1.0715x faster
marsaglia-osr-entry 26.6439+-1.3408 26.3022+-1.2910 might be 1.0130x faster
max-boolean 3.1157+-0.0340 ? 3.3742+-0.5610 ? might be 1.0830x slower
method-on-number 19.6786+-1.5135 19.5500+-0.4535
min-boolean 3.2153+-0.3213 3.1874+-0.1274
minus-boolean-double 3.5715+-0.1884 3.4512+-0.1148 might be 1.0349x faster
minus-boolean 3.0530+-0.1193 ? 3.1282+-0.4953 ? might be 1.0246x slower
misc-strict-eq 44.8213+-5.8751 44.1564+-4.2046 might be 1.0151x faster
mod-boolean-double 12.6105+-1.3687 12.3915+-1.6544 might be 1.0177x faster
mod-boolean 8.5632+-0.1848 ? 8.6208+-0.1127 ?
mul-boolean-double 4.3758+-0.7462 4.0585+-0.2026 might be 1.0782x faster
mul-boolean 3.2607+-0.1367 3.2255+-0.2842 might be 1.0109x faster
neg-boolean 3.4796+-0.0783 ? 3.7365+-0.4560 ? might be 1.0738x slower
negative-zero-divide 0.4915+-0.2880 0.3766+-0.0292 might be 1.3048x faster
negative-zero-modulo 0.4140+-0.0609 0.4100+-0.0825
negative-zero-negate 0.4819+-0.2733 0.3880+-0.0416 might be 1.2421x faster
nested-function-parsing 46.6644+-4.4883 46.4218+-4.2515
new-array-buffer-dead 126.3491+-2.7903 ? 127.1940+-2.8138 ?
new-array-buffer-push 8.7108+-3.3299 7.4695+-0.7278 might be 1.1662x faster
new-array-dead 20.8766+-3.8730 ? 21.2707+-3.8358 ? might be 1.0189x slower
new-array-push 4.7336+-0.1035 ? 4.8060+-0.3185 ? might be 1.0153x slower
number-test 3.5052+-0.1030 ? 3.6277+-0.3227 ? might be 1.0349x slower
object-closure-call 7.6021+-0.0471 ? 7.6995+-0.2880 ? might be 1.0128x slower
object-test 3.7562+-0.2438 ? 3.7783+-0.5821 ?
obvious-sink-pathology-taken 156.2908+-7.8848 151.9878+-5.5702 might be 1.0283x faster
obvious-sink-pathology 148.5320+-4.1411 ? 149.8520+-9.8523 ?
obviously-elidable-new-object 42.2385+-7.6543 ? 42.3633+-3.4488 ?
plus-boolean-arith 3.0662+-0.1072 ? 3.1320+-0.0690 ? might be 1.0215x slower
plus-boolean-double 3.4421+-0.0832 ? 3.5538+-0.1133 ? might be 1.0324x slower
plus-boolean 3.2444+-0.0657 3.2255+-0.1456
poly-chain-access-different-prototypes-simple
3.6384+-0.1363 3.5882+-0.1334 might be 1.0140x faster
poly-chain-access-different-prototypes 3.1343+-0.0967 3.0807+-0.0756 might be 1.0174x faster
poly-chain-access-simpler 3.6863+-0.2855 3.5027+-0.0848 might be 1.0524x faster
poly-chain-access 3.2339+-0.3669 3.0527+-0.1076 might be 1.0593x faster
poly-stricteq 69.8455+-4.7935 ? 70.3874+-5.7850 ?
polymorphic-array-call 1.4412+-0.0443 ? 1.5511+-0.2279 ? might be 1.0763x slower
polymorphic-get-by-id 3.5663+-0.2187 ? 3.7795+-0.3365 ? might be 1.0598x slower
polymorphic-put-by-id 32.6957+-1.4909 ? 35.1066+-4.4243 ? might be 1.0737x slower
polymorphic-structure 23.5688+-3.7648 ? 24.4536+-4.7466 ? might be 1.0375x slower
polyvariant-monomorphic-get-by-id 9.8478+-0.2383 9.8447+-0.1873
proto-getter-access 12.3377+-2.9120 11.3419+-0.0619 might be 1.0878x faster
put-by-id-replace-and-transition 9.9541+-0.3462 ? 10.0915+-1.2458 ? might be 1.0138x slower
put-by-id-slightly-polymorphic 3.2698+-0.1104 3.1915+-0.0910 might be 1.0245x faster
put-by-id 14.5277+-1.0203 14.3358+-0.4982 might be 1.0134x faster
put-by-val-direct 0.6375+-0.3523 0.5090+-0.0177 might be 1.2525x faster
put-by-val-large-index-blank-indexing-type
6.5759+-0.5202 ? 6.6915+-0.1042 ? might be 1.0176x slower
put-by-val-machine-int 3.2458+-0.1422 3.1996+-0.0719 might be 1.0144x faster
rare-osr-exit-on-local 16.8737+-0.2227 ? 17.2325+-0.3481 ? might be 1.0213x slower
register-pressure-from-osr 23.3458+-0.7200 ? 23.8484+-1.2247 ? might be 1.0215x slower
setter 6.6678+-0.8085 6.5620+-0.9779 might be 1.0161x faster
simple-activation-demo 28.0462+-1.9510 ? 28.7716+-4.4528 ? might be 1.0259x slower
simple-getter-access 15.9877+-1.8565 15.6129+-0.4312 might be 1.0240x faster
simple-poly-call-nested 9.6057+-2.3642 8.9109+-0.2407 might be 1.0780x faster
simple-poly-call 1.7372+-0.6619 1.7245+-0.5580
sin-boolean 22.3777+-2.6564 22.2284+-2.4438
sinkable-new-object-dag 87.1842+-9.1758 81.4132+-4.9755 might be 1.0709x faster
sinkable-new-object-taken 59.9521+-3.5198 ? 61.3218+-6.5737 ? might be 1.0228x slower
sinkable-new-object 42.0020+-4.0361 ? 43.3428+-2.9898 ? might be 1.0319x slower
slow-array-profile-convergence 3.3549+-0.3014 ? 3.3763+-0.4048 ?
slow-convergence 3.1710+-0.1011 ? 3.3259+-0.7548 ? might be 1.0489x slower
sparse-conditional 1.4625+-0.0196 ? 1.5740+-0.3085 ? might be 1.0763x slower
splice-to-remove 20.5540+-4.7915 ? 20.8563+-4.9026 ? might be 1.0147x slower
string-char-code-at 19.5923+-4.2228 18.8672+-1.2852 might be 1.0384x faster
string-concat-object 3.0488+-0.2330 ? 3.2557+-0.9262 ? might be 1.0679x slower
string-concat-pair-object 2.8763+-0.0598 ? 2.9139+-0.1750 ? might be 1.0131x slower
string-concat-pair-simple 14.0569+-0.5798 ? 15.1465+-2.5639 ? might be 1.0775x slower
string-concat-simple 15.6578+-2.7023 14.8712+-1.2945 might be 1.0529x faster
string-cons-repeat 10.7576+-3.8932 9.9838+-4.1888 might be 1.0775x faster
string-cons-tower 8.8752+-0.5106 ? 8.9453+-0.4366 ?
string-equality 21.2340+-3.5435 20.6533+-1.5372 might be 1.0281x faster
string-get-by-val-big-char 8.9865+-0.4685 8.9743+-0.3851
string-get-by-val-out-of-bounds-insane 4.3365+-0.1249 4.2340+-0.2165 might be 1.0242x faster
string-get-by-val-out-of-bounds 5.9105+-0.3233 ? 5.9627+-0.0367 ?
string-get-by-val 3.9852+-0.1788 ? 4.2128+-0.8990 ? might be 1.0571x slower
string-hash 2.5110+-0.1155 ? 2.6478+-0.6462 ? might be 1.0544x slower
string-long-ident-equality 16.6230+-0.1542 16.6093+-0.3814
string-out-of-bounds 16.8525+-1.2129 ? 17.9782+-4.6142 ? might be 1.0668x slower
string-repeat-arith 40.5115+-3.3693 ? 40.9246+-9.4538 ? might be 1.0102x slower
string-sub 77.4760+-12.3535 ? 78.6650+-9.5590 ? might be 1.0153x slower
string-test 3.3023+-0.0730 ? 3.3572+-0.1670 ? might be 1.0166x slower
string-var-equality 33.4115+-0.5007 ? 36.5110+-4.0010 ? might be 1.0928x slower
structure-hoist-over-transitions 2.9827+-0.0868 ? 3.0732+-0.1697 ? might be 1.0303x slower
substring-concat-weird 47.9657+-2.2728 47.5587+-0.8783
substring-concat 46.9202+-0.5638 ? 48.7529+-5.4351 ? might be 1.0391x slower
substring 54.6127+-0.3687 54.1798+-1.3936
switch-char-constant 3.3402+-0.3471 ? 3.4199+-1.0504 ? might be 1.0239x slower
switch-char 7.3132+-1.1419 ? 7.6108+-1.5775 ? might be 1.0407x slower
switch-constant 9.1597+-0.2344 ? 9.3593+-0.6790 ? might be 1.0218x slower
switch-string-basic-big-var 18.0117+-3.2903 16.9031+-0.3854 might be 1.0656x faster
switch-string-basic-big 17.1273+-4.7081 15.5710+-0.3109 might be 1.0999x faster
switch-string-basic-var 17.6429+-3.8729 17.4940+-3.3069
switch-string-basic 14.6715+-0.2484 14.6667+-0.5851
switch-string-big-length-tower-var 22.9965+-4.4324 ? 24.0623+-3.8479 ? might be 1.0463x slower
switch-string-length-tower-var 19.1923+-4.3658 ? 20.1998+-4.3319 ? might be 1.0525x slower
switch-string-length-tower 16.6136+-4.5269 16.0920+-3.5924 might be 1.0324x faster
switch-string-short 15.7552+-4.2709 15.4700+-3.8427 might be 1.0184x faster
switch 13.7795+-0.2123 ? 14.2625+-1.4088 ? might be 1.0351x slower
tear-off-arguments-simple 3.9670+-0.1829 3.9655+-0.0509
tear-off-arguments 5.4175+-0.1147 ? 5.4568+-0.1065 ?
temporal-structure 15.7355+-0.5203 15.5870+-0.8476
to-int32-boolean 18.3736+-3.3626 17.6895+-0.7744 might be 1.0387x faster
try-catch-get-by-val-cloned-arguments 16.9085+-3.1072 ? 17.4177+-4.6808 ? might be 1.0301x slower
try-catch-get-by-val-direct-arguments 7.3779+-0.3232 ? 8.7189+-4.1672 ? might be 1.1818x slower
try-catch-get-by-val-scoped-arguments 11.2095+-5.1036 9.9065+-4.0695 might be 1.1315x faster
undefined-property-access 394.5329+-5.8232 ? 396.5740+-1.5287 ?
undefined-test 3.4669+-0.1539 ? 3.6820+-0.5477 ? might be 1.0621x slower
unprofiled-licm 24.9677+-1.5281 ? 25.2397+-2.3415 ? might be 1.0109x slower
varargs-call 17.1080+-1.8151 16.7273+-1.1550 might be 1.0228x faster
varargs-construct-inline 25.2744+-0.8813 ? 26.6021+-3.9048 ? might be 1.0525x slower
varargs-construct 36.6443+-4.9711 35.7497+-1.4508 might be 1.0250x faster
varargs-inline 11.2405+-0.0947 ? 11.3662+-0.4531 ? might be 1.0112x slower
varargs-strict-mode 13.2947+-3.1830 12.6572+-0.3514 might be 1.0504x faster
varargs 12.6517+-0.4031 12.4249+-0.2567 might be 1.0183x faster
weird-inlining-const-prop 2.7357+-0.6077 2.5831+-0.2481 might be 1.0590x faster
<geometric> 10.1501+-0.0412 10.1158+-0.0761 might be 1.0034x faster
base new
AsmBench:
bigfib.cpp 557.6599+-4.3550 556.7204+-3.9944
cray.c 519.4601+-20.1429 510.5105+-7.2712 might be 1.0175x faster
dry.c 554.0463+-4.4651 ? 555.2708+-9.1940 ?
FloatMM.c 811.1918+-4.3645 ? 817.7350+-14.6635 ?
gcc-loops.cpp 4952.6612+-41.3289 ? 4959.1724+-34.7468 ?
n-body.c 1201.4105+-12.6404 1192.7120+-6.7562
Quicksort.c 477.0793+-5.2611 474.5699+-8.4332
stepanov_container.cpp 4199.6682+-50.9310 4181.6177+-68.0839
Towers.c 290.1387+-1.5626 ? 292.3356+-5.0598 ?
<geometric> 915.1498+-6.9979 913.4388+-1.3096 might be 1.0019x faster
base new
CompressionBench:
huffman 393.9900+-5.1946 ? 396.6052+-6.0727 ?
arithmetic-simple 442.6438+-6.5669 ? 445.1555+-12.6039 ?
arithmetic-precise 344.1400+-2.9929 334.1083+-7.3842 might be 1.0300x faster
arithmetic-complex-precise 339.5819+-8.3524 333.4582+-10.7559 might be 1.0184x faster
arithmetic-precise-order-0 469.9812+-9.5442 467.2036+-10.2764
arithmetic-precise-order-1 367.3081+-10.7988 ? 373.0805+-9.6269 ? might be 1.0157x slower
arithmetic-precise-order-2 414.2776+-9.4086 406.9910+-8.6291 might be 1.0179x faster
arithmetic-simple-order-1 462.5213+-7.2471 ? 469.6103+-28.2364 ? might be 1.0153x slower
arithmetic-simple-order-2 525.1949+-17.7513 517.2803+-8.2218 might be 1.0153x faster
lz-string 386.9739+-5.5848 ? 387.0160+-12.8600 ?
<geometric> 410.8163+-1.4730 409.0262+-7.4381 might be 1.0044x faster
base new
base new
Geomean of preferred means:
<scaled-result> 74.1922+-0.9200 73.9422+-0.4581 might be 1.0034x faster
Created attachment 251628 [details]
patch 2: with style fix.
Comment on attachment 251628 [details] patch 2: with style fix. Clearing flags on attachment: 251628 Committed r183310: <http://trac.webkit.org/changeset/183310> All reviewed patches have been landed. Closing bug. |