This opcode is super annoying and already introduces a lot of cruft, and would introduce even more cruft if we wanted to have calls forward exit on the return result.
Created attachment 203404 [details] work in progress
Created attachment 203407 [details] the patch Ummm, I think it actually works. Will mark r? once I run more tests.
Perf results. Note the ERROR's are due to the fact that I'm running benchmarks that include imul tests and we don't yet have imul on the branch. 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 (r151005) "NoPutResult" at /Volumes/Data/fromMiniMe/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r151005) 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 NoPutResult NoPutResult v. Old SunSpider: 3d-cube 6.6535+-0.1080 ? 6.6956+-0.1006 ? 6.7724+-0.0967 ? might be 1.0179x slower 3d-morph 8.6314+-0.1150 8.5481+-0.1144 ? 8.5554+-0.0970 3d-raytrace 8.3986+-0.1182 8.3730+-0.1248 ? 8.4754+-0.1052 ? access-binary-trees 1.8148+-0.0091 ? 1.8230+-0.0098 ? 1.8395+-0.0302 ? might be 1.0136x slower access-fannkuch 7.5747+-0.0767 7.5201+-0.0754 ? 7.5504+-0.0767 access-nbody 3.9975+-0.0143 3.9974+-0.0159 3.9945+-0.0173 access-nsieve 4.7958+-0.0668 ? 4.8517+-0.0385 4.8301+-0.0815 ? bitops-3bit-bits-in-byte 1.7782+-0.0185 ? 1.7808+-0.0183 ? 1.7838+-0.0193 ? bitops-bits-in-byte 6.6733+-0.0652 6.6390+-0.1184 ? 6.6586+-0.0688 bitops-bitwise-and 2.7999+-0.0100 2.7882+-0.0394 ? 2.7974+-0.0530 bitops-nsieve-bits 4.5089+-0.0179 4.4886+-0.0249 ? 4.5027+-0.0209 controlflow-recursive 2.9735+-0.0240 ? 2.9777+-0.0278 ? 2.9785+-0.0190 ? crypto-aes 5.1963+-0.0545 ? 5.3462+-0.1701 5.2084+-0.0574 ? crypto-md5 3.0288+-0.0216 ? 3.0455+-0.0278 ! 3.1139+-0.0209 ! definitely 1.0281x slower crypto-sha1 2.8191+-0.0205 ? 2.8445+-0.0245 2.8319+-0.0167 ? date-format-tofte 15.1209+-0.3383 ^ 14.5888+-0.1936 ? 14.6945+-0.2206 might be 1.0290x faster date-format-xparb 8.4504+-0.1433 8.3948+-0.1525 ? 8.5188+-0.2789 ? math-cordic 3.9364+-0.0350 3.9317+-0.0149 ? 3.9414+-0.0103 ? math-partial-sums 12.5103+-0.5892 12.2258+-0.1096 ? 12.2782+-0.1317 might be 1.0189x faster math-spectral-norm 2.7130+-0.0113 2.7115+-0.0142 ? 2.7152+-0.0117 ? regexp-dna 12.6400+-0.1980 ? 12.6776+-0.2321 ? 12.6894+-0.2061 ? string-base64 5.1097+-0.0523 5.0605+-0.0463 5.0448+-0.0535 might be 1.0129x faster string-fasta 10.7894+-0.1804 ? 10.8082+-0.1854 ? 10.8321+-0.0750 ? string-tagcloud 14.1859+-0.1894 ? 14.4240+-0.1877 14.1942+-0.2279 ? string-unpack-code 28.0377+-0.1223 ? 28.5989+-0.7402 27.8756+-0.0768 string-validate-input 6.4255+-0.1258 ? 6.4572+-0.1224 ? 6.5315+-0.1174 ? might be 1.0165x slower <arithmetic> * 7.3678+-0.0456 ? 7.3692+-0.0581 7.3542+-0.0434 might be 1.0019x faster <geometric> 5.8162+-0.0281 ? 5.8171+-0.0328 ? 5.8251+-0.0273 ? might be 1.0015x slower <harmonic> 4.6851+-0.0172 ? 4.6911+-0.0187 ? 4.7036+-0.0180 ? might be 1.0039x slower Old TipOfTree NoPutResult NoPutResult v. Old V8Spider: crypto 79.5999+-0.1131 ? 80.1268+-0.6305 79.6533+-0.2467 ? deltablue 104.4109+-0.4449 ? 104.4992+-0.3730 104.2262+-0.6542 earley-boyer 68.7674+-0.2412 ? 69.1753+-0.1873 ? 69.5945+-0.3177 ! definitely 1.0120x slower raytrace 38.0493+-0.5400 38.0490+-0.2001 ? 38.3333+-0.3513 ? regexp 100.2842+-0.7579 100.1899+-0.7430 ? 100.3337+-0.3103 ? richards 113.4608+-2.3814 112.0722+-1.0841 111.6164+-0.6316 might be 1.0165x faster splay 46.9532+-0.3133 ? 47.0801+-0.2987 46.9297+-0.2747 <arithmetic> 78.7894+-0.5301 78.7418+-0.2662 78.6696+-0.1686 might be 1.0015x faster <geometric> * 73.5214+-0.4755 ? 73.5537+-0.2354 73.5447+-0.1648 ? might be 1.0003x slower <harmonic> 67.9210+-0.4657 ? 68.0019+-0.2268 ? 68.0626+-0.1977 ? might be 1.0021x slower Old TipOfTree NoPutResult NoPutResult v. Old Octane and V8v7: encrypt 0.46622+-0.00044 0.46614+-0.00052 ? 0.46628+-0.00026 ? decrypt 8.62112+-0.00980 8.61611+-0.00909 ? 8.63680+-0.01811 ? deltablue x2 0.56435+-0.00276 ! 0.57258+-0.00265 0.56820+-0.00253 ? earley 0.88733+-0.00351 ? 0.89108+-0.00355 ^ 0.87417+-0.00575 ^ definitely 1.0151x faster boyer 12.67169+-0.02730 ! 12.76018+-0.04080 ! 12.90848+-0.03943 ! definitely 1.0187x slower raytrace x2 4.57569+-0.05269 4.51537+-0.03864 4.49072+-0.03367 might be 1.0189x faster regexp x2 32.40796+-0.14123 ? 32.78847+-0.26496 32.31919+-0.50411 richards x2 0.30530+-0.00054 ? 0.30761+-0.00219 ? 0.30962+-0.00386 ? might be 1.0142x slower splay x2 0.65602+-0.03425 0.64842+-0.02002 0.63645+-0.02031 might be 1.0308x faster navier-stokes x2 10.77567+-0.00561 ? 10.77803+-0.00884 10.77514+-0.00548 closure 0.31782+-0.03429 0.31726+-0.03412 ? 0.31864+-0.03455 ? jquery 4.51685+-0.55684 ? 4.57163+-0.56993 4.52117+-0.55117 ? gbemu x2 254.33748+-16.67935 ? 258.51785+-15.65073 251.77810+-15.04515 might be 1.0102x faster box2d x2 32.26507+-0.17146 32.16145+-0.47057 ? 32.43132+-0.29840 ? V8v7: <arithmetic> 7.57602+-0.01653 ? 7.62216+-0.03561 7.56777+-0.06304 might be 1.0011x faster <geometric> * 2.42874+-0.01570 ? 2.43357+-0.01052 2.42061+-0.01216 might be 1.0034x faster <harmonic> 0.92432+-0.00831 ? 0.92825+-0.00541 0.92461+-0.00547 ? might be 1.0003x slower Octane including V8v7: <arithmetic> 31.78437+-1.53555 ? 32.19100+-1.45140 31.56105+-1.36434 might be 1.0071x faster <geometric> * 4.39056+-0.05316 ? 4.40468+-0.06139 4.37920+-0.05896 might be 1.0026x faster <harmonic> 1.05632+-0.01400 ? 1.06015+-0.01643 1.05729+-0.01697 ? might be 1.0009x slower Old TipOfTree NoPutResult NoPutResult v. Old Kraken: ai-astar 492.433+-0.691 491.737+-0.386 ! 493.012+-0.191 ? audio-beat-detection 242.574+-0.631 242.082+-0.551 ? 242.831+-1.251 ? audio-dft 313.189+-5.606 309.304+-0.573 ^ 307.554+-0.557 might be 1.0183x faster audio-fft 143.351+-0.116 143.186+-0.166 143.159+-0.113 audio-oscillator 231.699+-0.615 ? 232.551+-0.635 232.209+-0.546 ? imaging-darkroom 290.363+-0.721 ? 290.799+-0.772 290.334+-1.034 imaging-desaturate 159.977+-0.140 159.957+-0.112 ? 159.969+-0.127 imaging-gaussian-blur 403.014+-0.129 ^ 401.810+-0.636 401.808+-0.275 ^ definitely 1.0030x faster json-parse-financial 82.098+-1.231 ^ 80.220+-0.366 80.090+-0.269 ^ definitely 1.0251x faster json-stringify-tinderbox 101.032+-0.178 100.618+-0.360 100.455+-0.235 ^ definitely 1.0058x faster stanford-crypto-aes 93.736+-0.546 ? 94.227+-0.889 ^ 93.003+-0.311 stanford-crypto-ccm 100.708+-2.583 ? 101.063+-2.574 99.964+-2.500 stanford-crypto-pbkdf2 270.784+-1.579 ? 271.848+-5.235 267.766+-0.801 ^ definitely 1.0113x faster stanford-crypto-sha256-iterative 116.401+-0.653 115.583+-0.575 ? 115.728+-0.514 <arithmetic> * 217.240+-0.545 216.785+-0.409 216.277+-0.349 ^ definitely 1.0045x faster <geometric> 185.549+-0.594 185.065+-0.499 184.486+-0.476 might be 1.0058x faster <harmonic> 159.461+-0.700 158.872+-0.625 158.265+-0.586 might be 1.0076x faster Old TipOfTree NoPutResult NoPutResult v. Old JSRegress: adapt-to-double-divide 22.5762+-0.0774 ? 22.6472+-0.1011 22.6213+-0.1338 ? aliased-arguments-getbyval 0.8336+-0.0074 ? 0.8360+-0.0075 ? 0.8383+-0.0084 ? allocate-big-object 2.4713+-0.0230 ? 2.4815+-0.0237 2.4644+-0.0249 arity-mismatch-inlining 0.7853+-0.0213 0.7835+-0.0202 0.7782+-0.0238 array-access-polymorphic-structure 6.7576+-0.0836 ? 6.7612+-0.0903 ? 6.8380+-0.0975 ? might be 1.0119x slower array-nonarray-polymorhpic-access 207.8595+-6.5279 202.3718+-2.3091 ? 204.0461+-2.9246 might be 1.0187x faster array-with-double-add 5.8959+-0.0738 5.8250+-0.0669 ? 5.8837+-0.0723 array-with-double-increment 4.1215+-0.0544 ? 4.1567+-0.0540 ? 4.1584+-0.0673 ? array-with-double-mul-add 7.1401+-0.0700 7.1257+-0.0779 ^ 6.6711+-0.0761 ^ definitely 1.0703x faster array-with-double-sum 7.9967+-0.0830 7.8883+-0.0835 ? 7.9378+-0.0895 array-with-int32-add-sub 10.5138+-0.0746 10.4969+-0.0690 ? 10.5676+-0.0996 ? array-with-int32-or-double-sum 7.9902+-0.0906 ? 8.0118+-0.0967 ? 8.1422+-0.1262 ? might be 1.0190x slower big-int-mul 4.8199+-0.0368 ? 4.8457+-0.0206 4.8333+-0.0642 ? boolean-test 4.3804+-0.0785 ? 4.4156+-0.0613 4.4090+-0.0646 ? branch-fold 17.0757+-0.3718 ^ 16.1490+-0.0804 ? 16.3992+-0.4156 might be 1.0413x faster cast-int-to-double 13.9414+-0.1029 13.9163+-0.1190 ? 14.1077+-0.2389 ? might be 1.0119x slower cell-argument 14.4546+-0.1141 ? 14.4594+-0.1388 14.3951+-0.0702 cfg-simplify 4.0211+-0.0368 3.9941+-0.0492 3.9787+-0.0570 might be 1.0106x faster cmpeq-obj-to-obj-other 10.8782+-0.1801 ! 11.8703+-0.5147 11.2366+-0.3491 ? might be 1.0329x slower constant-test 8.5379+-0.1472 ? 8.6023+-0.0727 8.5584+-0.0711 ? direct-arguments-getbyval 0.7318+-0.0088 0.7303+-0.0125 ? 0.7447+-0.0213 ? might be 1.0176x slower double-pollution-getbyval 10.8326+-0.0895 ? 10.9629+-0.1685 10.8042+-0.0661 double-pollution-putbyoffset 5.0109+-0.0943 ? 5.1184+-0.0614 ^ 4.9870+-0.0689 empty-string-plus-int 10.7581+-0.1706 ? 10.9524+-0.1720 10.9178+-0.1782 ? might be 1.0148x slower external-arguments-getbyval 1.9948+-0.0162 ^ 1.9356+-0.0153 1.9216+-0.0101 ^ definitely 1.0381x faster external-arguments-putbyval 3.1478+-0.0185 ? 3.1742+-0.0445 3.1564+-0.0251 ? Float32Array-matrix-mult 13.7436+-0.1504 ? 13.8056+-0.1448 ^ 13.5224+-0.0878 might be 1.0164x faster fold-double-to-int 22.1622+-0.2652 21.8627+-0.2053 ! 22.5390+-0.4039 ? might be 1.0170x slower function-dot-apply 3.1126+-0.0102 3.1097+-0.0130 ? 3.1292+-0.0382 ? function-test 5.1201+-0.0649 ? 5.1589+-0.0485 ^ 4.9417+-0.1420 might be 1.0361x faster get-by-id-chain-from-try-block 6.7039+-0.1597 ? 6.8023+-0.1716 6.7830+-0.2125 ? might be 1.0118x slower HashMap-put-get-iterate-keys 90.5277+-0.9546 89.4717+-0.5557 ? 90.2414+-0.6297 HashMap-put-get-iterate 93.5986+-0.7505 ^ 91.8632+-0.2226 ! 93.0493+-0.6508 HashMap-string-put-get-iterate 71.6259+-1.4979 ? 72.1890+-0.3875 ? 73.2416+-0.7631 ? might be 1.0226x slower imul-double-only ERROR ERROR ERROR imul-int-only ERROR ERROR ERROR imul-mixed ERROR ERROR ERROR indexed-properties-in-objects 4.3950+-0.0464 ? 4.4272+-0.0239 4.3589+-0.0651 inline-arguments-access 1.2525+-0.0135 1.2506+-0.0136 ? 1.2511+-0.0123 inline-arguments-local-escape 24.9936+-0.5217 ^ 23.5702+-0.2825 23.4357+-0.2754 ^ definitely 1.0665x faster inline-get-scoped-var 6.5059+-0.0683 ? 6.6443+-0.1054 ? 6.6559+-0.2375 ? might be 1.0230x slower inlined-put-by-id-transition 16.3898+-0.1814 16.2233+-0.2554 16.1655+-0.2775 might be 1.0139x faster int-or-other-abs-then-get-by-val 8.9088+-0.1471 ? 8.9847+-0.1066 ? 9.0108+-0.1208 ? might be 1.0115x slower int-or-other-abs-zero-then-get-by-val 37.8294+-0.6763 37.4967+-0.4252 37.0609+-0.1049 might be 1.0207x faster int-or-other-add-then-get-by-val 10.2244+-0.0997 10.2060+-0.1083 10.1682+-0.0797 int-or-other-add 10.5201+-0.1252 ? 10.5730+-0.1053 10.5035+-0.0597 int-or-other-div-then-get-by-val 6.3850+-0.0931 ? 6.3931+-0.0932 ? 6.6487+-0.4866 ? might be 1.0413x slower int-or-other-max-then-get-by-val 7.2618+-0.0956 ? 7.3325+-0.0859 7.2591+-0.0857 int-or-other-min-then-get-by-val 7.3012+-0.0941 ? 7.4177+-0.1100 7.3627+-0.0845 ? int-or-other-mod-then-get-by-val 6.0422+-0.0752 ! 6.1944+-0.0544 6.1767+-0.0790 ? might be 1.0223x slower int-or-other-mul-then-get-by-val 6.5143+-0.0855 6.5069+-0.0866 6.4413+-0.0783 might be 1.0113x faster int-or-other-neg-then-get-by-val 8.0419+-0.0889 ? 8.1013+-0.0876 8.0565+-0.1097 ? int-or-other-neg-zero-then-get-by-val 36.6347+-0.2937 ? 37.0283+-0.3624 36.6935+-0.3524 ? int-or-other-sub-then-get-by-val 10.2278+-0.0931 10.1618+-0.0805 ? 10.2376+-0.1089 ? int-or-other-sub 8.2662+-0.0903 8.1862+-0.0892 ? 8.2597+-0.0886 int-overflow-local 11.7784+-0.1114 11.7768+-0.1269 ? 11.8154+-0.1779 ? Int16Array-bubble-sort 49.1390+-0.1670 ? 49.7268+-0.7294 49.1705+-0.1316 ? Int16Array-load-int-mul 1.9204+-0.0115 ? 1.9229+-0.0105 1.9208+-0.0112 ? Int8Array-load 4.8205+-0.0545 ? 4.8376+-0.0406 4.7812+-0.0618 integer-divide 15.4147+-0.1841 15.3208+-0.1190 ? 15.3542+-0.2200 integer-modulo 1.9946+-0.0155 1.9896+-0.0193 1.9503+-0.0205 ^ definitely 1.0227x faster make-indexed-storage 3.7472+-0.0527 3.7421+-0.0538 ? 3.7687+-0.0243 ? method-on-number 25.6686+-0.4388 25.5012+-0.4515 ? 25.5279+-0.3596 negative-zero-divide 0.3310+-0.0169 0.3310+-0.0174 0.3308+-0.0170 negative-zero-modulo 0.3232+-0.0216 ? 0.3242+-0.0223 ? 0.3257+-0.0235 ? negative-zero-negate 0.3115+-0.0215 0.3095+-0.0224 ? 0.3106+-0.0217 nested-function-parsing-random 383.2892+-12.9495 ? 388.7289+-13.4648 381.0032+-13.2147 nested-function-parsing 47.8588+-0.9464 47.5097+-1.0296 ? 47.8813+-1.0327 ? new-array-buffer-dead 3.6445+-0.0118 ? 3.6551+-0.0184 ? 3.6572+-0.0191 ? new-array-buffer-push 10.1421+-0.1879 10.1272+-0.1281 ? 10.2785+-0.1782 ? might be 1.0134x slower new-array-dead 28.3738+-0.1000 ? 28.4151+-0.1079 28.2972+-0.0763 new-array-push 6.7753+-0.0950 ? 6.8627+-0.0783 6.8513+-0.0593 ? might be 1.0112x slower number-test 4.3587+-0.0647 4.3509+-0.0691 4.3288+-0.0561 object-closure-call 11.2263+-2.0129 ? 11.2572+-2.0156 ? 12.2579+-1.9022 ? might be 1.0919x slower object-test 4.8034+-0.0557 4.7623+-0.0596 ! 4.9700+-0.0680 ! definitely 1.0347x slower poly-stricteq 92.3890+-0.7109 91.9303+-0.1186 ? 92.1627+-0.2971 polymorphic-structure 20.9760+-0.2089 20.7694+-0.0732 ? 20.8229+-0.0292 polyvariant-monomorphic-get-by-id 12.5252+-0.0787 ? 12.5837+-0.1104 12.4897+-0.0691 rare-osr-exit-on-local 20.0501+-0.1181 20.0330+-0.1170 ? 20.0477+-0.0897 register-pressure-from-osr 31.2491+-0.0690 ? 31.3009+-0.0977 31.2648+-0.0794 ? simple-activation-demo 34.3182+-0.1302 34.3074+-0.1367 ? 34.8127+-0.6267 ? might be 1.0144x slower slow-array-profile-convergence 3.8953+-0.0220 3.8472+-0.0379 ? 3.8734+-0.0254 slow-convergence 3.4199+-0.0146 3.4190+-0.0112 ? 3.4282+-0.0180 ? sparse-conditional 1.3145+-0.0198 ? 1.3203+-0.0199 1.3168+-0.0198 ? splice-to-remove 49.3856+-0.2152 ? 49.7578+-0.2192 ? 50.2562+-0.4271 ! definitely 1.0176x slower string-concat-object 2.7073+-0.0474 ? 2.7408+-0.0640 2.7345+-0.0692 ? might be 1.0101x slower string-concat-pair-object 2.6253+-0.0304 2.6224+-0.0178 ? 2.6408+-0.0181 ? string-concat-pair-simple 16.9193+-0.2776 ? 16.9423+-0.3100 ? 16.9739+-0.2893 ? string-concat-simple 17.0804+-0.2209 ? 17.1559+-0.2648 17.0165+-0.3188 string-cons-repeat 10.1501+-0.0380 ? 10.1518+-0.0378 10.1279+-0.0233 string-cons-tower 11.1030+-0.3098 10.8226+-0.0358 10.8215+-0.0255 might be 1.0260x faster string-equality 108.1959+-0.7545 ? 110.1222+-1.7021 ^ 106.1553+-1.7732 might be 1.0192x faster string-hash 2.5515+-0.0086 2.5511+-0.0107 2.5492+-0.0096 string-repeat-arith 44.2915+-0.1649 ! 46.0081+-0.2585 ^ 44.3517+-0.1951 ? string-sub 89.5064+-1.6261 89.3004+-0.7361 ? 89.4571+-1.7414 string-test 4.1879+-0.0463 ? 4.2558+-0.0497 4.2224+-0.0266 ? structure-hoist-over-transitions 3.1683+-0.0266 ? 3.1691+-0.0259 ? 3.1735+-0.0279 ? tear-off-arguments-simple 1.7553+-0.0097 1.7539+-0.0088 1.7458+-0.0076 tear-off-arguments 3.1986+-0.0204 3.1951+-0.0144 3.1882+-0.0065 temporal-structure 20.9758+-0.0965 ? 21.0721+-0.1892 20.9621+-0.0826 to-int32-boolean 23.1208+-0.0707 ? 23.1911+-0.1242 ? 23.2363+-0.0835 ? undefined-test 4.4558+-0.0706 ? 4.4805+-0.0656 4.4748+-0.0618 ? <arithmetic> ERROR ERROR ERROR <geometric> * ERROR ERROR ERROR <harmonic> ERROR ERROR ERROR Old TipOfTree NoPutResult NoPutResult v. Old All benchmarks: <arithmetic> ERROR ERROR ERROR <geometric> ERROR ERROR ERROR <harmonic> ERROR ERROR ERROR Old TipOfTree NoPutResult NoPutResult v. Old Geomean of preferred means: <scaled-result> ERROR ERROR ERROR
Looks like I made all of the things crash.
Created attachment 203418 [details] still broken but getting there Still causing test crashes.
Created attachment 203467 [details] the patch Fixed the crashes.
Comment on attachment 203467 [details] the patch View in context: https://bugs.webkit.org/attachment.cgi?id=203467&action=review > Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:89 > + void* jumpTarget = callLinkInfo.callReturnLocation.executableAddress(); Do call varargs have a call link info?
(In reply to comment #7) > (From update of attachment 203467 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=203467&action=review > > > Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:89 > > + void* jumpTarget = callLinkInfo.callReturnLocation.executableAddress(); > > Do call varargs have a call link info? I just checked, and it totally does. So we're fine here.
Landed in http://trac.webkit.org/changeset/151038