WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED INVALID
117046
fourthTier: Have the DFG forward exit on call result being zero
https://bugs.webkit.org/show_bug.cgi?id=117046
Summary
fourthTier: Have the DFG forward exit on call result being zero
Filip Pizlo
Reported
2013-05-30 14:51:39 PDT
If this is perf-neutral then this tells us that we should just convert all of JSC to do branch-after-call exception checking.
Attachments
work in progress
(5.00 KB, patch)
2013-06-01 20:04 PDT
,
Filip Pizlo
no flags
Details
Formatted Diff
Diff
View All
Add attachment
proposed patch, testcase, etc.
Filip Pizlo
Comment 1
2013-05-31 20:24:40 PDT
This is a 1% slow-down in V8. We should think carefully about what we want to do. Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1). VMs tested: "Old" at /Volumes/Data/pizlo/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (
r150814
) "TipOfTree" at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (
r151061
) "ExcCheck" at /Volumes/Data/fromMiniMe/fourthTier/primary/OpenSource/WebKitBuild/Release/jsc (
r151061
) Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. Old TipOfTree ExcCheck ExcCheck v. Old SunSpider: 3d-cube 6.7699+-0.1114 6.7254+-0.1094 ^ 6.3398+-0.1007 ^ definitely 1.0679x faster 3d-morph 8.4900+-0.0605 ? 8.5462+-0.0947 ? 8.5856+-0.1139 ? might be 1.0113x slower 3d-raytrace 8.4238+-0.1246 8.3974+-0.0970 ? 8.5197+-0.1583 ? might be 1.0114x slower access-binary-trees 1.8283+-0.0161 1.8197+-0.0120 ? 1.8764+-0.0721 ? might be 1.0264x slower access-fannkuch 7.5176+-0.0821 7.5066+-0.0672 ? 7.5172+-0.0768 access-nbody 4.0465+-0.0406 ^ 3.9847+-0.0165 ? 3.9851+-0.0126 ^ definitely 1.0154x faster access-nsieve 4.7101+-0.1106 ? 4.8341+-0.1569 4.7626+-0.1173 ? might be 1.0111x slower bitops-3bit-bits-in-byte 1.7812+-0.0223 1.7785+-0.0205 ? 1.7833+-0.0190 ? bitops-bits-in-byte 6.6626+-0.0539 ? 6.7215+-0.0987 ? 6.8200+-0.1022 ! definitely 1.0236x slower bitops-bitwise-and 2.8141+-0.0167 2.8090+-0.0315 2.7846+-0.0276 might be 1.0106x faster bitops-nsieve-bits 4.5375+-0.0572 4.5093+-0.0289 4.5091+-0.0358 controlflow-recursive 2.9889+-0.0202 ? 3.0166+-0.0340 3.0035+-0.0084 ? crypto-aes 5.1558+-0.0792 ? 5.1968+-0.0618 5.1968+-0.0583 ? crypto-md5 3.0491+-0.0279 3.0403+-0.0229 3.0355+-0.0300 crypto-sha1 2.8224+-0.0127 2.8115+-0.0206 ? 2.8124+-0.0184 date-format-tofte 14.7233+-0.2024 ? 14.9053+-0.2111 14.8184+-0.2205 ? date-format-xparb 8.4229+-0.1505 8.4008+-0.1862 ? 8.4441+-0.1545 ? math-cordic 3.9290+-0.0196 ? 3.9340+-0.0118 ? 3.9762+-0.0333 ? might be 1.0120x slower math-partial-sums 12.1361+-0.1150 ? 12.3424+-0.1983 12.3142+-0.2011 ? might be 1.0147x slower math-spectral-norm 2.7093+-0.0195 ? 2.7096+-0.0108 2.7076+-0.0112 regexp-dna 12.6841+-0.2103 12.6783+-0.1567 12.6067+-0.2135 string-base64 5.0546+-0.0495 ? 5.0673+-0.0569 ? 5.0919+-0.0442 ? string-fasta 10.7746+-0.1626 10.7677+-0.1650 ? 10.7803+-0.1524 ? string-tagcloud 14.2127+-0.1570 14.1541+-0.2107 ? 14.1825+-0.1818 string-unpack-code 27.8701+-0.0824 ? 27.9042+-0.1331 27.7024+-0.0780 ^ definitely 1.0061x faster string-validate-input 6.4868+-0.0742 6.4783+-0.1063 ? 6.5123+-0.1168 ? <arithmetic> * 7.3308+-0.0535 ? 7.3477+-0.0453 7.3334+-0.0552 ? might be 1.0004x slower <geometric> 5.8050+-0.0354 ? 5.8127+-0.0272 5.8099+-0.0415 ? might be 1.0008x slower <harmonic> 4.6885+-0.0215 ? 4.6892+-0.0161 ? 4.6963+-0.0307 ? might be 1.0017x slower Old TipOfTree ExcCheck ExcCheck v. Old V8Spider: crypto 79.6740+-0.1561 79.4727+-0.1427 ? 79.6083+-0.1792 deltablue 104.3897+-0.5193 103.9252+-0.8624 ! 105.3514+-0.5399 ? earley-boyer 69.1266+-0.3586 ? 69.4883+-0.1606 ! 70.3408+-0.2388 ! definitely 1.0176x slower raytrace 37.9461+-0.2380 ? 38.0431+-0.3628 ? 38.5130+-0.2357 ! definitely 1.0149x slower regexp 99.5935+-0.3479 ! 100.2727+-0.1803 ? 100.9891+-0.6425 ! definitely 1.0140x slower richards 112.5156+-0.9943 111.6875+-0.9613 ! 114.9874+-1.6955 ? might be 1.0220x slower splay 47.2261+-0.2917 ? 47.5774+-0.5622 46.9048+-0.2211 <arithmetic> 78.6388+-0.2242 78.6381+-0.2080 ! 79.5278+-0.3387 ! definitely 1.0113x slower <geometric> * 73.4593+-0.1973 ? 73.5372+-0.1845 ! 74.1902+-0.2749 ! definitely 1.0099x slower <harmonic> 67.9225+-0.2006 ? 68.0670+-0.2125 ? 68.5197+-0.2415 ! definitely 1.0088x slower Old TipOfTree ExcCheck ExcCheck v. Old Octane and V8v7: encrypt 0.46643+-0.00050 0.46630+-0.00042 ! 0.46869+-0.00054 ! definitely 1.0048x slower decrypt 8.61648+-0.01083 ? 8.64593+-0.02876 8.64227+-0.03047 ? deltablue x2 0.57239+-0.00584 0.56917+-0.00188 ! 0.58376+-0.00189 ! definitely 1.0199x slower earley 0.88131+-0.00293 ^ 0.86996+-0.00600 ? 0.87308+-0.00644 boyer 12.98142+-0.23116 12.97907+-0.06141 ? 13.06067+-0.06188 ? raytrace x2 4.45271+-0.04724 ! 4.57869+-0.02442 ? 4.63247+-0.05441 ! definitely 1.0404x slower regexp x2 32.40847+-0.11598 ? 32.51533+-0.37431 32.51215+-0.28783 ? richards x2 0.30158+-0.00238 ! 0.31123+-0.00424 ! 0.31973+-0.00269 ! definitely 1.0602x slower splay x2 0.66794+-0.04501 0.63892+-0.01413 0.63813+-0.01833 might be 1.0467x faster navier-stokes x2 10.77353+-0.00534 ? 10.77593+-0.00723 ? 10.78609+-0.00639 ! definitely 1.0012x slower closure 0.31886+-0.03439 0.31868+-0.03496 ? 0.32315+-0.03526 ? might be 1.0135x slower jquery 4.51583+-0.55910 ? 4.52278+-0.55384 ? 4.57628+-0.55849 ? might be 1.0134x slower gbemu x2 252.72132+-16.60370 ? 254.72276+-17.31471 251.64091+-16.05746 box2d x2 32.34858+-0.12831 32.01057+-0.26254 31.94732+-0.16533 ^ definitely 1.0126x faster V8v7: <arithmetic> 7.58118+-0.02308 ? 7.60874+-0.04699 ? 7.62434+-0.03299 ? might be 1.0057x slower <geometric> * 2.42853+-0.02150 ? 2.43205+-0.00919 ! 2.45360+-0.01153 ? might be 1.0103x slower <harmonic> 0.92415+-0.01064 ? 0.92776+-0.00575 ! 0.94277+-0.00559 ! definitely 1.0202x slower Octane including V8v7: <arithmetic> 31.64879+-1.51783 ? 31.82036+-1.57624 31.54842+-1.46994 might be 1.0032x faster <geometric> * 4.38918+-0.05213 ? 4.39345+-0.06625 ? 4.42132+-0.06179 ? might be 1.0073x slower <harmonic> 1.05670+-0.01568 ? 1.06028+-0.01855 ? 1.07695+-0.01830 ? might be 1.0192x slower Old TipOfTree ExcCheck ExcCheck v. Old Kraken: ai-astar 492.399+-0.871 ? 492.540+-0.422 492.509+-0.384 ? audio-beat-detection 242.431+-0.623 240.848+-1.354 239.385+-0.671 ^ definitely 1.0127x faster audio-dft 309.472+-0.745 308.176+-1.321 ? 309.185+-1.367 audio-fft 143.274+-0.152 143.266+-0.090 ? 144.101+-1.952 ? audio-oscillator 234.227+-1.147 232.584+-0.562 ! 235.408+-0.770 ? imaging-darkroom 291.227+-0.636 ? 294.345+-3.250 289.832+-1.337 imaging-desaturate 159.976+-0.114 ? 160.050+-0.165 159.916+-0.121 imaging-gaussian-blur 405.830+-5.084 402.120+-1.060 401.663+-0.149 might be 1.0104x faster json-parse-financial 80.981+-0.328 ^ 80.139+-0.412 ? 80.701+-0.311 json-stringify-tinderbox 101.335+-0.597 ? 102.042+-0.415 ^ 100.655+-0.382 stanford-crypto-aes 95.745+-2.423 93.448+-0.279 ! 94.566+-0.773 might be 1.0125x faster stanford-crypto-ccm 101.180+-2.397 100.965+-2.582 100.742+-2.523 stanford-crypto-pbkdf2 271.968+-3.492 ^ 267.819+-0.611 267.607+-0.786 ^ definitely 1.0163x faster stanford-crypto-sha256-iterative 115.164+-0.153 ? 115.662+-0.503 115.410+-0.155 ? <arithmetic> * 217.515+-0.617 216.715+-0.401 216.549+-0.363 might be 1.0045x faster <geometric> 185.764+-0.721 185.023+-0.500 184.991+-0.517 might be 1.0042x faster <harmonic> 159.608+-0.857 158.879+-0.616 ? 158.967+-0.631 might be 1.0040x faster Old TipOfTree ExcCheck ExcCheck v. Old JSRegress: adapt-to-double-divide 22.5125+-0.0550 22.4732+-0.0512 ? 22.5917+-0.0696 ? aliased-arguments-getbyval 0.8478+-0.0138 0.8350+-0.0069 0.8328+-0.0072 might be 1.0180x faster allocate-big-object 2.4773+-0.0300 2.4690+-0.0232 2.4633+-0.0283 arity-mismatch-inlining 0.7843+-0.0205 0.7694+-0.0196 ? 0.7817+-0.0176 array-access-polymorphic-structure 6.8340+-0.0968 6.8000+-0.1089 6.7869+-0.0994 array-nonarray-polymorhpic-access 208.7441+-4.4749 202.5068+-5.9443 ? 204.1625+-4.8563 might be 1.0224x faster array-with-double-add 5.8257+-0.0695 ? 5.8764+-0.0793 5.8321+-0.0779 ? array-with-double-increment 4.2121+-0.0893 4.1051+-0.0396 ? 4.1225+-0.0337 might be 1.0217x faster array-with-double-mul-add 7.1318+-0.0985 ^ 6.6857+-0.0942 ? 6.7361+-0.0637 ^ definitely 1.0587x faster array-with-double-sum 7.8947+-0.1025 ? 7.9102+-0.0834 7.8869+-0.0909 array-with-int32-add-sub 10.5363+-0.0871 ? 10.5655+-0.0874 ? 10.5670+-0.0984 ? array-with-int32-or-double-sum 7.9827+-0.0793 ? 8.0520+-0.1017 7.9977+-0.0789 ? big-int-mul 4.7705+-0.0646 ? 4.7717+-0.0656 ? 4.8198+-0.0408 ? might be 1.0103x slower boolean-test 4.4568+-0.0814 4.3902+-0.0723 ? 4.3987+-0.0639 might be 1.0132x faster branch-fold 16.8245+-0.0815 ^ 16.1593+-0.0801 ! 16.5644+-0.2826 might be 1.0157x faster cast-int-to-double 13.8244+-0.0873 ? 13.9731+-0.1835 13.9454+-0.2956 ? cell-argument 14.4642+-0.1203 ? 14.4646+-0.1125 14.3937+-0.0772 cfg-simplify 3.9663+-0.0624 3.9568+-0.0579 ? 3.9755+-0.0616 ? cmpeq-obj-to-obj-other 10.6918+-0.2201 ! 11.3579+-0.3509 ? 11.3868+-0.3607 ! definitely 1.0650x slower constant-test 8.6457+-0.0967 8.6135+-0.0839 8.5077+-0.1332 might be 1.0162x faster direct-arguments-getbyval 0.7317+-0.0111 ? 0.7321+-0.0126 ? 0.7327+-0.0118 ? double-pollution-getbyval 10.8464+-0.0764 10.8186+-0.0838 ? 10.9920+-0.1481 ? might be 1.0134x slower double-pollution-putbyoffset 5.0464+-0.0834 5.0393+-0.0743 5.0190+-0.1139 empty-string-plus-int 10.8117+-0.1831 ? 11.0870+-0.2920 10.9166+-0.1602 ? external-arguments-getbyval 2.0117+-0.0182 ^ 1.9167+-0.0107 ? 1.9458+-0.0217 ^ definitely 1.0339x faster external-arguments-putbyval 3.1754+-0.0870 3.1659+-0.0248 ? 3.3026+-0.1163 ? might be 1.0401x slower Float32Array-matrix-mult 13.9186+-0.3104 ? 14.1360+-0.2810 ^ 13.6797+-0.0821 might be 1.0175x faster fold-double-to-int 22.1552+-0.2193 21.9825+-0.1621 ! 23.3852+-0.1978 ! definitely 1.0555x slower function-dot-apply 3.1299+-0.0262 3.1069+-0.0116 ! 3.2669+-0.0165 ! definitely 1.0438x slower function-test 5.1696+-0.0642 ^ 4.9557+-0.1080 ? 5.0005+-0.1020 ^ definitely 1.0338x faster get-by-id-chain-from-try-block 6.5923+-0.0944 ? 6.7499+-0.1623 6.6680+-0.1881 ? might be 1.0115x slower HashMap-put-get-iterate-keys 90.7248+-1.4257 ? 91.9169+-1.2704 91.8881+-3.4669 ? might be 1.0128x slower HashMap-put-get-iterate 93.7226+-1.3381 ? 95.1308+-0.6062 93.7521+-0.8851 ? HashMap-string-put-get-iterate 72.5284+-2.2217 72.2549+-0.3975 71.7639+-0.5544 might be 1.0107x faster imul-double-only ERROR ERROR ERROR imul-int-only ERROR ERROR ERROR imul-mixed ERROR ERROR ERROR indexed-properties-in-objects 4.4275+-0.0145 4.3740+-0.0473 4.3591+-0.0576 might be 1.0157x faster inline-arguments-access 1.2491+-0.0127 ? 1.2516+-0.0121 ? 1.2520+-0.0115 ? inline-arguments-local-escape 25.3789+-0.6412 ^ 23.5458+-0.4273 23.0822+-0.1915 ^ definitely 1.0995x faster inline-get-scoped-var 6.6262+-0.1387 ? 6.6282+-0.0970 6.5863+-0.1024 inlined-put-by-id-transition 16.2858+-0.2901 ? 16.3706+-0.1242 16.3334+-0.2679 ? int-or-other-abs-then-get-by-val 8.7339+-0.1053 ! 8.9589+-0.1034 ? 8.9685+-0.1139 ! definitely 1.0269x slower int-or-other-abs-zero-then-get-by-val 36.9924+-0.1220 36.9184+-0.1012 ? 37.1192+-0.1532 ? int-or-other-add-then-get-by-val 10.1859+-0.0751 ? 10.2029+-0.0720 ? 10.3861+-0.1635 ? might be 1.0197x slower int-or-other-add 10.4749+-0.0677 ? 10.4814+-0.0645 ? 10.5407+-0.1191 ? int-or-other-div-then-get-by-val 6.3123+-0.0829 ? 6.4394+-0.0745 6.3086+-0.0734 int-or-other-max-then-get-by-val 7.3653+-0.0830 7.2906+-0.0850 ? 7.3117+-0.0903 int-or-other-min-then-get-by-val 7.3436+-0.0889 7.3002+-0.0818 7.2864+-0.0772 int-or-other-mod-then-get-by-val 6.1291+-0.0901 ? 6.1845+-0.0845 6.1270+-0.0837 int-or-other-mul-then-get-by-val 6.4786+-0.0789 6.4428+-0.0918 ? 6.5085+-0.1177 ? int-or-other-neg-then-get-by-val 8.0976+-0.0866 8.0755+-0.1108 ? 8.0801+-0.1065 int-or-other-neg-zero-then-get-by-val 37.2310+-0.3095 37.0290+-0.4082 ? 37.2360+-0.3507 ? int-or-other-sub-then-get-by-val 10.3009+-0.1624 10.2253+-0.0918 ? 10.2290+-0.1334 int-or-other-sub 8.1995+-0.1006 ? 8.2122+-0.0931 8.1765+-0.0878 int-overflow-local 11.6840+-0.0808 ? 11.7619+-0.1089 ? 11.8750+-0.1492 ? might be 1.0163x slower Int16Array-bubble-sort 49.1516+-0.1077 ? 49.1946+-0.1517 ! 49.6835+-0.0745 ! definitely 1.0108x slower Int16Array-load-int-mul 1.9205+-0.0117 1.9187+-0.0102 ? 1.9209+-0.0145 ? Int8Array-load 4.8175+-0.0555 4.8172+-0.0578 4.8013+-0.0629 integer-divide 15.2602+-0.1281 15.2449+-0.1036 15.2113+-0.1288 integer-modulo 1.9853+-0.0211 1.9730+-0.0171 ? 1.9780+-0.0120 make-indexed-storage 3.7529+-0.0473 3.7212+-0.0576 ? 3.7869+-0.0441 ? method-on-number 26.1491+-0.6090 ^ 25.1895+-0.2804 ? 25.2145+-0.6299 might be 1.0371x faster negative-zero-divide 0.3315+-0.0174 0.3298+-0.0178 ? 0.3300+-0.0166 negative-zero-modulo 0.3419+-0.0296 0.3222+-0.0212 ? 0.3248+-0.0213 might be 1.0526x faster negative-zero-negate 0.3097+-0.0222 0.3097+-0.0218 ? 0.3107+-0.0224 ? nested-function-parsing-random 383.2400+-13.0458 ! 409.8920+-12.8997 388.5887+-12.7613 ? might be 1.0140x slower nested-function-parsing 47.8582+-0.9793 ? 47.9202+-1.0114 ? 48.0087+-1.0638 ? new-array-buffer-dead 3.6726+-0.0393 3.6558+-0.0142 ? 3.6700+-0.0299 new-array-buffer-push 10.2118+-0.2051 10.2017+-0.1986 ? 10.2380+-0.1030 ? new-array-dead 28.3627+-0.1045 28.3340+-0.0814 ? 28.7300+-0.4882 ? might be 1.0130x slower new-array-push 7.1222+-0.2683 6.8309+-0.1026 6.8210+-0.0732 might be 1.0442x faster number-test 4.3280+-0.0650 ? 4.3742+-0.0613 4.3320+-0.0575 ? object-closure-call 11.8983+-2.0564 11.2866+-2.0490 ? 13.5982+-1.6023 ? might be 1.1429x slower object-test 4.8343+-0.0739 ! 4.9921+-0.0673 4.9591+-0.0531 ? might be 1.0258x slower poly-stricteq 92.8363+-1.0921 92.2200+-0.5972 ? 92.4510+-0.6966 polymorphic-structure 20.9108+-0.1892 ? 21.1539+-0.3487 20.8679+-0.2015 polyvariant-monomorphic-get-by-id 12.5982+-0.1264 12.5022+-0.0704 ? 12.5280+-0.0733 rare-osr-exit-on-local 20.1514+-0.2860 ? 20.3955+-0.3427 20.1216+-0.1250 register-pressure-from-osr 31.6137+-0.4227 31.3083+-0.1082 ! 31.6614+-0.1015 ? simple-activation-demo 34.2591+-0.1061 ? 34.3190+-0.1401 34.2734+-0.1207 ? slow-array-profile-convergence 3.8527+-0.0552 ? 3.8606+-0.0178 3.8497+-0.0440 slow-convergence 3.4245+-0.0110 3.4175+-0.0149 ! 3.4535+-0.0155 ! definitely 1.0085x slower sparse-conditional 1.3212+-0.0259 ? 1.3223+-0.0228 1.3179+-0.0177 splice-to-remove 50.1231+-0.7759 ? 50.5586+-1.0269 ? 51.4415+-0.4869 ! definitely 1.0263x slower string-concat-object 2.7022+-0.0209 2.7012+-0.0189 ? 2.7133+-0.0219 ? string-concat-pair-object 2.6937+-0.0716 2.6239+-0.0166 ? 2.6655+-0.0633 might be 1.0106x faster string-concat-pair-simple 17.1083+-0.3377 17.0095+-0.2973 17.0063+-0.2527 string-concat-simple 17.2902+-0.4492 17.1071+-0.2531 ? 17.1353+-0.3342 string-cons-repeat 10.1584+-0.0268 ? 10.4298+-0.3399 10.1643+-0.0229 ? string-cons-tower 10.8892+-0.0697 10.8514+-0.0451 10.8465+-0.0319 string-equality 108.3457+-1.6232 106.1997+-3.2230 104.8456+-0.7004 ^ definitely 1.0334x faster string-hash 2.5548+-0.0130 2.5505+-0.0103 2.5497+-0.0091 string-repeat-arith 44.5344+-0.2932 44.4526+-0.1795 ? 45.3228+-1.0834 ? might be 1.0177x slower string-sub 89.1360+-1.5228 ? 89.4738+-0.9872 88.7199+-0.7574 string-test 4.2365+-0.0464 ? 4.2657+-0.0481 4.2365+-0.0337 structure-hoist-over-transitions 3.2041+-0.0405 3.1677+-0.0235 ? 3.1772+-0.0267 tear-off-arguments-simple 1.7572+-0.0087 1.7549+-0.0082 ? 1.7570+-0.0073 tear-off-arguments 3.2962+-0.1545 3.1949+-0.0198 3.1921+-0.0182 might be 1.0326x faster temporal-structure 21.0567+-0.1893 20.9513+-0.0762 ? 21.0121+-0.0764 to-int32-boolean 23.1818+-0.0884 ? 23.2797+-0.1967 23.2248+-0.1410 ? undefined-test 4.4935+-0.0469 4.4715+-0.0406 4.4626+-0.0494 <arithmetic> ERROR ERROR ERROR <geometric> * ERROR ERROR ERROR <harmonic> ERROR ERROR ERROR Old TipOfTree ExcCheck ExcCheck v. Old All benchmarks: <arithmetic> ERROR ERROR ERROR <geometric> ERROR ERROR ERROR <harmonic> ERROR ERROR ERROR Old TipOfTree ExcCheck ExcCheck v. Old Geomean of preferred means: <scaled-result> ERROR ERROR ERROR
Filip Pizlo
Comment 2
2013-06-01 20:04:12 PDT
Created
attachment 203498
[details]
work in progress
Filip Pizlo
Comment 3
2013-12-12 13:01:47 PST
No. This is too much of a slow-down.
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