WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
144152
mayExit() is wrong about Branch nodes with ObjectOrOtherUse: they can exit.
https://bugs.webkit.org/show_bug.cgi?id=144152
Summary
mayExit() is wrong about Branch nodes with ObjectOrOtherUse: they can exit.
Mark Lam
Reported
2015-04-24 10:41:29 PDT
With a debug build, going to
https://msdn.microsoft.com/en-us/library/ie/2ked96yw(v=vs.94).aspx
will trigger an assertion failure because mayExit() lied about Branch nodes not being able to exit. The code for emitBranch() (and functions it calls) do speculation checks. So, obviously, it can exit.
Attachments
DFG dumps when compiling the problematic function (with inlining).
(3.15 MB, text/plain)
2015-04-24 11:07 PDT
,
Mark Lam
no flags
Details
The patch.
(4.81 KB, patch)
2015-04-25 02:51 PDT
,
Mark Lam
no flags
Details
Formatted Diff
Diff
patch 2: with style fix.
(4.81 KB, patch)
2015-04-25 02:56 PDT
,
Mark Lam
no flags
Details
Formatted Diff
Diff
Show Obsolete
(1)
View All
Add attachment
proposed patch, testcase, etc.
Mark Lam
Comment 1
2015-04-24 10:42:17 PDT
<
rdar://problem/20679004
>
Filip Pizlo
Comment 2
2015-04-24 10:55:14 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.
Mark Lam
Comment 3
2015-04-24 10:57:35 PDT
(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.
Filip Pizlo
Comment 4
2015-04-24 11:00:42 PDT
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.
Mark Lam
Comment 5
2015-04-24 11:07:29 PDT
Created
attachment 251560
[details]
DFG dumps when compiling the problematic function (with inlining). Dumps attached.
Filip Pizlo
Comment 6
2015-04-24 11:26:57 PDT
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.
Filip Pizlo
Comment 7
2015-04-24 11:28:07 PDT
(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.
Mark Lam
Comment 8
2015-04-25 02:51:19 PDT
Created
attachment 251627
[details]
The patch.
WebKit Commit Bot
Comment 9
2015-04-25 02:52:32 PDT
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.
Mark Lam
Comment 10
2015-04-25 02:54:51 PDT
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
Mark Lam
Comment 11
2015-04-25 02:56:28 PDT
Created
attachment 251628
[details]
patch 2: with style fix.
WebKit Commit Bot
Comment 12
2015-04-25 08:44:56 PDT
Comment on
attachment 251628
[details]
patch 2: with style fix. Clearing flags on attachment: 251628 Committed
r183310
: <
http://trac.webkit.org/changeset/183310
>
WebKit Commit Bot
Comment 13
2015-04-25 08:45:01 PDT
All reviewed patches have been landed. Closing bug.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug