I'm going to introduce a new term: "heap variable". This is a variable that is anywhere but on the stack (i.e. local). It may be global or it may be captured. Hence the hierarchy of variables is: Variable: Local Variable: it's on the stack according to bytecode Heap Variable: it's not a Local Variable Captured Variable: it's in some function's activation, may be my own activation Global Variable: it's in some global object We currently use VirtualRegister to effectively track heap variables because of some history. The use of the VirtualRegister class for this purpose makes it difficult to then remove the hole we have in the stack that corresponds to local variables that got captured. Once we ensure that VirtualRegister is no longer used for heap variables, we'll be able to remove the hole.
Created attachment 245967 [details] it begins!
Comment on attachment 245967 [details] it begins! View in context: https://bugs.webkit.org/attachment.cgi?id=245967&action=review I really like this patch. It makes some stuff that confused me when I first got started hacking on JSC more intuitive. > Source/JavaScriptCore/runtime/SymbolTable.cpp:140 > +SymbolTable* SymbolTable::cloneIgnoringStack(VM& vm) I kind of like the function name: "cloneHeapNames" or "cloneHeapVariables", cloneIgnoringStack confused me at first. But that's just my style.
Created attachment 246875 [details] WRONG PATCH
Created attachment 246876 [details] moar
Created attachment 246898 [details] more
Created attachment 246976 [details] a bit more I believe that the next step is to remove the JSLexicalEnvironment::m_registers field.
*** Bug 141850 has been marked as a duplicate of this bug. ***
(In reply to comment #6) > Created attachment 246976 [details] > a bit more > > I believe that the next step is to remove the > JSLexicalEnvironment::m_registers field. It is, but it has to happen as part of this patch. m_registers currently serves the perverse purpose of allowing VirtualRegister to be used as a scope offset.
Created attachment 247155 [details] more
Created attachment 247195 [details] more Taking a pause while I explore what defineOwnProperty is really supposed to do for arguments. I'm pretty sure that what we're doing now is technically right but unnecessarily roundabout.
Created attachment 247241 [details] more Arguments objects C++ code is done.
Created attachment 247253 [details] more jit stuff Slowly pushing the new Arguments types through the JITs.
Created attachment 247442 [details] dragging arguments code through the JITs
Created attachment 247468 [details] starting to tool around in bytecodegenerator
Created attachment 247488 [details] a little more
Created attachment 247515 [details] doing real damage to bytecode generator
I just realized that my ScopedArguments object needs room for overflow arguments - those arguments that were not in the formal parameter list. Shouldn't be a hard change, just more code. But other than that, the BytecodeGenerator stuff is materializing nicely.
Created attachment 247539 [details] a bit more The bytecode generator changes are coming along nicely, but I'll have to shift focus a bit and give ScopedArguments the guts it needs for dealing with overflow arguments.
Created attachment 247623 [details] getting closer to figuring out the whole arguments thing
Created attachment 247636 [details] just a little bit more I think I've figured out how to initialize variables in the bytecode generator.
Created attachment 247643 [details] bytecode generation initialization is done Now I just have to: - change NodesCodegen to use BytecodeGenerator::variable() instead of BytecodeGenerator::local() - finish changing all of the execution engines to handle the new arguments- and activation-related operations. - redo ArgumentsSimplificationPhase
Created attachment 247650 [details] let the carnage begin! In preparation for adding all of the new stuff, I'm starting to remove the captured variable cruft. There is no longer such a thing! After bytecode is generated, all "captured" variables are just heap accesses, as they should be.
Created attachment 247651 [details] NodesCodegen is done? I think that the entire bytecompiler is done now.
*** Bug 130115 has been marked as a duplicate of this bug. ***
Created attachment 247652 [details] change all the files! More captured removal
Created attachment 247693 [details] moar!
Created attachment 247723 [details] starting to get the DFG backend up to speed
Created attachment 247740 [details] a bit more Starting to work on the inlined CreateDirectArguments
Created attachment 247775 [details] DFG arguments lowering is done 64-bit only for now
Created attachment 247842 [details] rebased
Created attachment 247931 [details] FTL is coming along
Created attachment 247981 [details] the bulk of functionality is done, just cleaning up now Of course this doesn't include 32-bit or the the new arguments simplification. The things left are to get this to the point where it compiles and where varargs calls aren't totally messed up.
Created attachment 247996 [details] carnage! Destroying old code that won't be needed and won't compile.
Created attachment 248002 [details] so close!
Created attachment 248126 [details] starting to compile
Created attachment 248135 [details] fewer compiler errors
Created attachment 248153 [details] wrote some more stuff Turns out I forgot to write some stuff before. This patch is going to be epic.
Created attachment 248165 [details] more fixes to get it to compile
Created attachment 248169 [details] more fixes for compiling
Created attachment 248174 [details] OMG it compiles!
Created attachment 248231 [details] it runs simple programs I'll start running the real tests soon.
Ossy: this doesn't look like it will involve platform-specifics, at least not yet. But there is still another 100k worth of code to write...
(In reply to comment #42) > Ossy: this doesn't look like it will involve platform-specifics, at least > not yet. But there is still another 100k worth of code to write... Thanks for the heads-up.
Created attachment 248269 [details] starting to pass tests
Created attachment 248291 [details] passing lots of tests Looks like there are still corner cases that are broken, but lots works! I also still need to write tests specifically for the bizarre things that arise with OutOfBandArguments and DirectArguments.
Created attachment 248341 [details] passing so many tests I think that I'm now down to some codegen goofs in FTL.
Created attachment 248371 [details] so pass, much test, wow
Created attachment 248383 [details] latest
Created attachment 248390 [details] so close to correct
Created attachment 248461 [details] more correct than ever
Created attachment 248480 [details] it might pass all tests Next step: get it to perform. After that: port to 32-bit. I want to make sure that this performs before I write the 32-bit codegen, since my performance findings may change my mind about how I generate code.
Created attachment 248564 [details] working on the new arguments elimination phase
Created attachment 248568 [details] more Arguments elimination phase now has all of the required analyses. I need to think for a bit about whether I like how they're written.
Created attachment 248597 [details] arguments elimination is sort of written
Created attachment 248610 [details] more arguments elimination
Created attachment 248623 [details] closer to eliminating arguments
Created attachment 248634 [details] dealing with the OSR exit of arguments elimination
Created attachment 248637 [details] rebased Arguments elimination phase is written. Haven't tried compiling it yet.
Created attachment 248791 [details] latest Trying to get the new stuff to compile. Turns out I need to make some more changes to promoted heap locations...
Created attachment 248853 [details] more things Rebased and added the FTL implementation of ForwardVarargs. Trying to get this thing to compile now.
Created attachment 248858 [details] closer to compiling
Created attachment 248868 [details] it compiles!
Created attachment 248887 [details] it eliminated some arguments!
Created attachment 248906 [details] it does all of the important things
Created attachment 248948 [details] added more tests
Created attachment 248971 [details] OSR exit looks solid Wrote a bunch of tests for materializing arguments objects.
Created attachment 248978 [details] strict mode arguments elimination and materialization works
Created attachment 249036 [details] passing all tests on 64-bit only, of course. haven't run perf tests yet.
(In reply to comment #68) > Created attachment 249036 [details] > passing all tests > > on 64-bit only, of course. haven't run perf tests yet. It still crashes raytrace - but only running in the benchmark harness. Gotta investigate what's up with that.
(In reply to comment #69) > (In reply to comment #68) > > Created attachment 249036 [details] > > passing all tests > > > > on 64-bit only, of course. haven't run perf tests yet. > > It still crashes raytrace - but only running in the benchmark harness. > Gotta investigate what's up with that. Looks like a GC bug, like a reference that isn't being marked or barriered. But when it does run, it's as fast as trunk! OTOH, box2d is still regressed, albeit less. I believe that benchmark will need some form of varargs forwarding (i.e. limited arguments elimination just for varargs) in the third-tier DFG.
Created attachment 249154 [details] rebased, still passing tests I believe that http://trac.webkit.org/changeset/181817 fixed the raytrace bug I was seeing.
We're at performance parity except for JSRegress.
Here are the numbers right now. Note that I intend to fix the box2d regression before putting this up for review. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r181817) "VarOffset" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r181817) Collected 6 samples per benchmark/VM, with 6 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. TipOfTree VarOffset SunSpider: 3d-cube 4.8810+-0.1003 ? 4.9412+-0.2189 ? might be 1.0123x slower 3d-morph 5.9792+-0.6905 5.8613+-0.5301 might be 1.0201x faster 3d-raytrace 6.4168+-0.1789 6.2884+-0.0709 might be 1.0204x faster access-binary-trees 2.1102+-0.0864 ? 2.1418+-0.0905 ? might be 1.0150x slower access-fannkuch 6.2496+-0.2250 5.9958+-0.0395 might be 1.0423x faster access-nbody 2.8756+-0.0770 ? 2.9577+-0.0481 ? might be 1.0286x slower access-nsieve 3.4230+-0.0339 ^ 3.1909+-0.1717 ^ definitely 1.0727x faster bitops-3bit-bits-in-byte 1.5723+-0.0332 ? 1.6587+-0.1485 ? might be 1.0549x slower bitops-bits-in-byte 3.5115+-0.0201 ^ 3.3578+-0.0437 ^ definitely 1.0458x faster bitops-bitwise-and 2.2646+-0.1186 ? 2.2751+-0.4194 ? bitops-nsieve-bits 3.7195+-0.0653 ? 3.7829+-0.0269 ? might be 1.0170x slower controlflow-recursive 2.1769+-0.0381 2.1263+-0.0295 might be 1.0238x faster crypto-aes 4.1481+-0.0565 4.1137+-0.1415 crypto-md5 2.4892+-0.0862 2.4578+-0.0611 might be 1.0128x faster crypto-sha1 2.6329+-0.1717 ? 2.6584+-0.1258 ? date-format-tofte 9.3994+-0.1059 ? 9.4074+-0.2280 ? date-format-xparb 5.4476+-0.1924 ? 5.6578+-0.5313 ? might be 1.0386x slower math-cordic 3.2232+-0.0863 3.1312+-0.0485 might be 1.0294x faster math-partial-sums 5.5891+-0.8351 5.2155+-0.0681 might be 1.0716x faster math-spectral-norm 1.9156+-0.0404 ? 1.9431+-0.0378 ? might be 1.0143x slower regexp-dna 8.5278+-1.6188 8.0537+-1.5675 might be 1.0589x faster string-base64 4.4894+-0.1216 ? 5.1257+-0.9666 ? might be 1.1417x slower string-fasta 6.4723+-0.0745 ? 6.7759+-0.6326 ? might be 1.0469x slower string-tagcloud 9.8012+-0.3706 9.7405+-0.2561 string-unpack-code 19.9095+-1.0705 ? 20.1883+-1.1555 ? might be 1.0140x slower string-validate-input 4.9509+-0.0970 4.9301+-0.1964 <arithmetic> 5.1606+-0.0346 5.1530+-0.0899 might be 1.0015x faster TipOfTree VarOffset LongSpider: 3d-cube 1096.3541+-8.9227 ? 1098.6296+-6.7645 ? 3d-morph 1537.5260+-13.7502 1530.0449+-1.4554 3d-raytrace 740.4688+-13.8050 724.3087+-2.6800 might be 1.0223x faster access-binary-trees 997.0497+-8.0571 984.6986+-6.3847 might be 1.0125x faster access-fannkuch 334.3393+-8.7815 ? 349.1175+-16.2045 ? might be 1.0442x slower access-nbody 613.7874+-4.0750 ? 615.0160+-4.0148 ? access-nsieve 876.3375+-8.6939 862.0601+-6.3177 might be 1.0166x faster bitops-3bit-bits-in-byte 44.8642+-0.9665 ? 45.0625+-1.1606 ? bitops-bits-in-byte 104.9997+-1.7882 ? 106.0337+-2.1904 ? bitops-nsieve-bits 692.0291+-2.8074 ? 699.8492+-7.1299 ? might be 1.0113x slower controlflow-recursive 498.1042+-2.4118 486.9194+-12.3577 might be 1.0230x faster crypto-aes 712.2198+-6.2998 707.3480+-9.8132 crypto-md5 555.1205+-9.9706 555.0508+-8.4426 crypto-sha1 602.9036+-5.4328 600.0266+-5.8228 date-format-tofte 778.7516+-16.1397 756.9041+-10.9492 might be 1.0289x faster date-format-xparb 755.8632+-23.7222 750.9738+-38.0241 math-cordic 592.1950+-2.2455 591.0228+-1.6436 math-partial-sums 505.3678+-2.3743 ? 508.5627+-3.8367 ? math-spectral-norm 567.3386+-2.1154 ? 568.4075+-3.7864 ? string-base64 369.2450+-6.3626 368.5506+-4.0007 string-fasta 422.3073+-7.2231 422.2526+-5.4314 string-tagcloud 214.7409+-1.1778 ? 216.4726+-0.9684 ? <geometric> 504.4244+-1.2149 503.4790+-2.3653 might be 1.0019x faster TipOfTree VarOffset V8Spider: crypto 54.3034+-0.9718 ? 54.7987+-2.9712 ? deltablue 90.4797+-2.7793 ? 91.8638+-6.2109 ? might be 1.0153x slower earley-boyer 41.9058+-0.4456 41.6246+-1.0615 raytrace 37.7885+-2.5572 ! 52.0101+-1.2691 ! definitely 1.3763x slower regexp 66.7170+-0.8178 66.5712+-1.7689 richards 80.1940+-4.3062 78.7520+-2.4506 might be 1.0183x faster splay 38.5278+-2.0155 37.5394+-1.8254 might be 1.0263x faster <geometric> 55.3812+-0.9574 ! 57.7238+-0.6952 ! definitely 1.0423x slower TipOfTree VarOffset Octane: encrypt 0.20400+-0.00349 0.20315+-0.00237 decrypt 3.59311+-0.03233 ? 3.65392+-0.05745 ? might be 1.0169x slower deltablue x2 0.21011+-0.00667 0.20560+-0.00128 might be 1.0220x faster earley 0.68576+-0.00833 ^ 0.55247+-0.00715 ^ definitely 1.2413x faster boyer 5.72970+-0.02119 5.71701+-0.01403 navier-stokes x2 5.22755+-0.03801 5.20467+-0.01836 raytrace x2 1.28091+-0.02078 ! 1.38581+-0.03557 ! definitely 1.0819x slower richards x2 0.12362+-0.00290 0.12232+-0.00097 might be 1.0107x faster splay x2 0.38370+-0.00106 ^ 0.38016+-0.00111 ^ definitely 1.0093x faster regexp x2 33.34993+-0.35057 ? 33.49987+-0.18192 ? pdfjs x2 45.03057+-0.40443 44.72524+-0.26780 mandreel x2 50.16406+-0.08274 ? 50.21281+-0.11843 ? gbemu x2 41.26040+-2.51154 40.45775+-2.20971 might be 1.0198x faster closure 0.57991+-0.00328 ^ 0.57066+-0.00304 ^ definitely 1.0162x faster jquery 7.17960+-0.08376 7.09311+-0.04506 might be 1.0122x faster box2d x2 12.65383+-0.10769 ! 14.15050+-0.18570 ! definitely 1.1183x slower zlib x2 395.38695+-3.58583 ^ 387.02517+-1.85088 ^ definitely 1.0216x faster typescript x2 816.79867+-12.75235 ! 835.92574+-6.31218 ! definitely 1.0234x slower <geometric> 6.77822+-0.04154 ? 6.78223+-0.01592 ? might be 1.0006x slower TipOfTree VarOffset Kraken: ai-astar 267.548+-3.688 ^ 260.889+-2.104 ^ definitely 1.0255x faster audio-beat-detection 109.934+-0.623 109.520+-0.823 audio-dft 149.642+-1.690 ? 151.238+-1.388 ? might be 1.0107x slower audio-fft 84.468+-3.638 ? 86.517+-2.202 ? might be 1.0243x slower audio-oscillator 209.616+-1.591 207.890+-1.322 imaging-darkroom 105.074+-1.890 104.859+-1.541 imaging-desaturate 64.816+-2.619 63.147+-1.404 might be 1.0264x faster imaging-gaussian-blur 114.085+-2.233 ? 115.209+-2.449 ? json-parse-financial 45.959+-1.785 45.921+-1.586 json-stringify-tinderbox 56.822+-1.917 ? 57.984+-2.564 ? might be 1.0205x slower stanford-crypto-aes 59.941+-1.531 ? 60.118+-0.760 ? stanford-crypto-ccm 51.511+-4.054 50.321+-0.879 might be 1.0237x faster stanford-crypto-pbkdf2 167.802+-2.311 ? 169.250+-1.904 ? stanford-crypto-sha256-iterative 55.323+-3.033 54.442+-1.267 might be 1.0162x faster <arithmetic> 110.181+-0.616 109.808+-0.484 might be 1.0034x faster TipOfTree VarOffset JSRegress: abs-boolean 2.5946+-0.0308 ? 2.6352+-0.0358 ? might be 1.0156x slower adapt-to-double-divide 16.9614+-0.8485 16.6886+-0.1406 might be 1.0163x faster aliased-arguments-getbyval 0.8153+-0.0376 ! 1.2177+-0.1017 ! definitely 1.4935x slower allocate-big-object 2.6530+-0.1139 2.5887+-0.0573 might be 1.0248x faster arguments-named-and-reflective 9.2794+-0.0808 ! 13.0651+-1.1642 ! definitely 1.4080x slower arguments-out-of-bounds 17.4600+-1.1310 ^ 14.7124+-0.1312 ^ definitely 1.1868x faster arguments-strict-mode 7.7709+-0.1667 ! 12.1736+-1.0436 ! definitely 1.5666x slower arguments 8.1423+-0.5024 ! 10.6184+-0.9747 ! definitely 1.3041x slower arity-mismatch-inlining 0.8191+-0.0248 0.8155+-0.0239 array-access-polymorphic-structure 6.6447+-0.1732 ? 6.9501+-0.8846 ? might be 1.0460x slower array-nonarray-polymorhpic-access 34.6062+-2.6651 ? 35.8829+-1.9388 ? might be 1.0369x slower array-prototype-every 88.4747+-2.5943 ? 88.8912+-1.9960 ? array-prototype-forEach 84.6232+-1.4198 ? 85.6668+-1.8852 ? might be 1.0123x slower array-prototype-map 95.9230+-2.6699 ? 96.5505+-2.0098 ? array-prototype-some 87.4120+-1.9506 ? 89.5926+-1.1322 ? might be 1.0249x slower array-splice-contiguous 41.7987+-1.6003 ? 43.4183+-3.6103 ? might be 1.0387x slower array-with-double-add 4.1451+-0.0562 4.0964+-0.0955 might be 1.0119x faster array-with-double-increment 3.1887+-0.0522 ? 3.2164+-0.0612 ? array-with-double-mul-add 4.9417+-0.0600 ? 4.9610+-0.0189 ? array-with-double-sum 3.2442+-0.0259 ? 3.2501+-0.0441 ? array-with-int32-add-sub 6.7751+-0.0447 ? 6.8922+-0.2916 ? might be 1.0173x slower array-with-int32-or-double-sum 3.3006+-0.0328 ? 3.3193+-0.0345 ? ArrayBuffer-DataView-alloc-large-long-lived 33.9954+-1.2239 ? 35.1350+-2.3671 ? might be 1.0335x slower ArrayBuffer-DataView-alloc-long-lived 14.8569+-1.8472 13.6867+-0.2885 might be 1.0855x faster ArrayBuffer-Int32Array-byteOffset 3.5193+-0.0696 3.4479+-0.0664 might be 1.0207x faster ArrayBuffer-Int8Array-alloc-large-long-lived 32.6768+-0.7688 ? 33.9708+-1.5550 ? might be 1.0396x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 22.6321+-0.9003 ? 23.4028+-1.4690 ? might be 1.0341x slower ArrayBuffer-Int8Array-alloc-long-lived 15.3832+-1.3250 14.5935+-2.0732 might be 1.0541x faster ArrayBuffer-Int8Array-alloc 12.1153+-1.5548 10.9799+-0.4923 might be 1.1034x faster asmjs_bool_bug 7.5955+-0.0226 ? 7.6364+-0.2101 ? assign-custom-setter-polymorphic 2.9980+-0.0900 2.8985+-0.0385 might be 1.0344x faster assign-custom-setter 4.0205+-0.0887 ? 4.0403+-0.0427 ? basic-set 8.2887+-0.3530 ? 8.4614+-0.2203 ? might be 1.0208x slower big-int-mul 3.9770+-0.0459 ? 3.9962+-0.1351 ? boolean-test 3.0010+-0.0297 ? 3.0165+-0.0431 ? branch-fold 3.6611+-0.0258 ? 3.6710+-0.0415 ? by-val-generic 8.2780+-0.4690 8.1835+-0.3438 might be 1.0115x faster call-spread-apply 16.4052+-0.3168 ! 30.4704+-1.5447 ! definitely 1.8574x slower call-spread-call 5.8409+-0.1160 ! 24.7337+-1.3571 ! definitely 4.2346x slower captured-assignments 0.4606+-0.0140 ? 0.4657+-0.0237 ? might be 1.0110x slower cast-int-to-double 5.2689+-0.0253 ? 5.3096+-0.0616 ? cell-argument 8.8658+-0.5694 ? 9.0880+-0.5696 ? might be 1.0251x slower cfg-simplify 2.8663+-0.0649 2.7812+-0.0335 might be 1.0306x faster chain-getter-access 10.1074+-0.2063 10.0616+-0.1372 cmpeq-obj-to-obj-other 11.7164+-1.0843 10.8038+-0.2472 might be 1.0845x faster constant-test 4.9111+-0.0426 ? 4.9352+-0.0477 ? DataView-custom-properties 39.0084+-1.8847 38.9785+-1.2017 delay-tear-off-arguments-strictmode 21.7605+-1.8349 ^ 14.2284+-1.4698 ^ definitely 1.5294x faster deltablue-varargs 180.0431+-4.2814 ! 199.5517+-2.1404 ! definitely 1.1084x slower destructuring-arguments 5.2795+-0.1067 ! 16.4444+-0.2312 ! definitely 3.1148x slower destructuring-swap 5.0404+-0.0513 5.0086+-0.0595 direct-arguments-getbyval 0.9004+-0.1032 ! 1.2008+-0.0448 ! definitely 1.3336x slower div-boolean-double 5.2073+-0.0337 5.2033+-0.0429 div-boolean 7.7643+-0.0341 ? 7.8008+-0.0716 ? double-get-by-val-out-of-bounds 4.4727+-0.1085 4.4333+-0.1690 double-pollution-getbyval 8.8335+-0.0812 ? 8.8634+-0.1152 ? double-pollution-putbyoffset 4.1790+-0.0465 ? 4.1997+-0.0352 ? double-to-int32-typed-array-no-inline 2.2277+-0.0681 2.2076+-0.0631 double-to-int32-typed-array 1.9083+-0.0303 1.8796+-0.0308 might be 1.0153x faster double-to-uint32-typed-array-no-inline 2.2590+-0.0583 ? 2.2752+-0.0699 ? double-to-uint32-typed-array 2.0082+-0.1009 1.9320+-0.0326 might be 1.0394x faster elidable-new-object-dag 44.6466+-1.0815 43.8640+-1.9043 might be 1.0178x faster elidable-new-object-roflcopter 47.2217+-1.9599 46.7753+-1.0197 elidable-new-object-then-call 39.7061+-2.0975 ? 39.7316+-2.5279 ? elidable-new-object-tree 45.7764+-1.6480 ? 46.1208+-2.0060 ? empty-string-plus-int 5.4008+-0.1094 5.3809+-0.0485 emscripten-cube2hash 38.6277+-1.5215 ? 39.6622+-2.2924 ? might be 1.0268x slower exit-length-on-plain-object 14.3577+-0.4051 ? 14.5464+-0.9210 ? might be 1.0131x slower external-arguments-getbyval 1.3982+-0.0631 ^ 1.2274+-0.0739 ^ definitely 1.1391x faster external-arguments-putbyval 2.0469+-0.0783 ! 2.2172+-0.0473 ! definitely 1.0832x slower fixed-typed-array-storage-var-index 1.2173+-0.0244 ? 1.2247+-0.0148 ? fixed-typed-array-storage 0.9189+-0.0735 0.8867+-0.0386 might be 1.0363x faster Float32Array-matrix-mult 4.3590+-0.0354 4.2901+-0.1468 might be 1.0161x faster Float32Array-to-Float64Array-set 61.2310+-1.4659 ^ 54.5194+-2.0250 ^ definitely 1.1231x faster Float64Array-alloc-long-lived 71.7369+-1.1532 ? 72.2988+-2.8447 ? Float64Array-to-Int16Array-set 69.6282+-1.8408 ? 73.8503+-3.3309 ? might be 1.0606x slower fold-double-to-int 15.5375+-0.8714 ? 15.8880+-1.0021 ? might be 1.0226x slower fold-get-by-id-to-multi-get-by-offset-rare-int 10.8487+-1.1018 9.7376+-0.6983 might be 1.1141x faster fold-get-by-id-to-multi-get-by-offset 9.7587+-1.4312 ? 10.0604+-1.1085 ? might be 1.0309x slower fold-multi-get-by-offset-to-get-by-offset 8.0291+-1.5285 ? 8.8405+-0.9215 ? might be 1.1011x slower fold-multi-get-by-offset-to-poly-get-by-offset 9.0087+-0.7933 ? 9.0991+-1.6932 ? might be 1.0100x slower fold-multi-put-by-offset-to-poly-put-by-offset 8.8807+-1.5549 8.3975+-0.9783 might be 1.0576x faster fold-multi-put-by-offset-to-put-by-offset 5.1576+-0.7888 4.7762+-0.3640 might be 1.0798x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.2135+-0.4250 ? 9.2383+-0.4380 ? fold-put-by-id-to-multi-put-by-offset 9.2397+-1.1536 ? 9.6261+-0.8922 ? might be 1.0418x slower fold-put-structure 4.1922+-0.5598 ? 5.6868+-1.8688 ? might be 1.3565x slower for-of-iterate-array-entries 4.4980+-0.1089 4.4907+-0.0592 for-of-iterate-array-keys 3.7445+-0.1454 ? 3.7973+-0.0837 ? might be 1.0141x slower for-of-iterate-array-values 3.6584+-0.0808 3.6324+-0.0744 fround 20.2461+-0.6496 19.8663+-0.8167 might be 1.0191x faster ftl-library-inlining-dataview 79.9187+-2.3690 ? 84.2666+-9.6070 ? might be 1.0544x slower ftl-library-inlining 90.7473+-25.2981 87.1804+-20.2631 might be 1.0409x faster function-dot-apply 1.5159+-0.0968 ! 6.9803+-0.1203 ! definitely 4.6048x slower function-test 3.3571+-0.0505 3.3199+-0.0607 might be 1.0112x faster function-with-eval 127.0381+-5.3430 ^ 94.6132+-1.7596 ^ definitely 1.3427x faster gcse-poly-get-less-obvious 19.7228+-0.9754 18.8351+-0.8369 might be 1.0471x faster gcse-poly-get 23.8511+-2.7606 22.5477+-3.5664 might be 1.0578x faster gcse 4.3086+-0.0641 4.2969+-0.0375 get-by-id-bimorphic-check-structure-elimination-simple 2.7298+-0.0522 ? 2.7493+-0.0249 ? get-by-id-bimorphic-check-structure-elimination 5.9954+-0.0598 ? 6.0799+-0.1448 ? might be 1.0141x slower get-by-id-chain-from-try-block 9.4046+-1.3389 7.2843+-1.2390 might be 1.2911x faster get-by-id-check-structure-elimination 5.1102+-0.1058 5.0589+-0.0371 might be 1.0101x faster get-by-id-proto-or-self 17.3796+-0.8890 17.2519+-0.6640 get-by-id-quadmorphic-check-structure-elimination-simple 2.8982+-0.0446 ? 2.9381+-0.0312 ? might be 1.0138x slower get-by-id-self-or-proto 17.6394+-0.7683 ? 17.8638+-0.4400 ? might be 1.0127x slower get-by-val-out-of-bounds 4.2981+-0.0810 ? 4.4692+-0.3577 ? might be 1.0398x slower get_callee_monomorphic 3.5990+-0.0914 ? 3.7183+-0.1490 ? might be 1.0331x slower get_callee_polymorphic 3.6145+-0.0634 ! 6.0481+-0.2810 ! definitely 1.6733x slower getter-no-activation 4.5031+-0.4174 4.2759+-0.0616 might be 1.0531x faster getter-richards 126.4748+-7.9221 ? 130.2811+-10.4765 ? might be 1.0301x slower getter 5.0794+-0.0248 ? 5.6488+-0.5997 ? might be 1.1121x slower global-var-const-infer-fire-from-opt 0.8390+-0.0417 ? 0.8876+-0.1025 ? might be 1.0580x slower global-var-const-infer 0.8540+-0.1113 0.8282+-0.0965 might be 1.0311x faster HashMap-put-get-iterate-keys 26.5817+-0.3888 ? 26.7537+-0.6443 ? HashMap-put-get-iterate 26.0569+-0.4290 25.7572+-0.3652 might be 1.0116x faster HashMap-string-put-get-iterate 28.3969+-1.3014 ? 28.5847+-1.2033 ? hoist-make-rope 11.9520+-0.8078 ? 12.1332+-0.4507 ? might be 1.0152x slower hoist-poly-check-structure-effectful-loop 5.6807+-1.7346 5.1488+-0.2995 might be 1.1033x faster hoist-poly-check-structure 3.6949+-0.0260 ? 3.7001+-0.0546 ? imul-double-only 8.5931+-0.7517 ? 9.1959+-0.8692 ? might be 1.0701x slower imul-int-only 9.8747+-0.2900 ? 9.9238+-0.1824 ? imul-mixed 8.2963+-0.1162 8.2702+-0.2809 in-four-cases 18.7720+-0.1949 ? 18.9537+-0.4311 ? in-one-case-false 10.2464+-0.4804 10.0719+-0.3790 might be 1.0173x faster in-one-case-true 10.3309+-0.4298 9.8443+-0.2252 might be 1.0494x faster in-two-cases 10.4166+-0.4481 10.3039+-0.3456 might be 1.0109x faster indexed-properties-in-objects 2.8927+-0.0351 ? 2.9218+-0.0290 ? might be 1.0100x slower infer-closure-const-then-mov-no-inline 3.6800+-0.0751 ^ 3.5350+-0.0257 ^ definitely 1.0410x faster infer-closure-const-then-mov 19.2969+-1.5919 17.3887+-0.4167 might be 1.1097x faster infer-closure-const-then-put-to-scope-no-inline 11.8832+-0.2306 ? 12.0228+-0.8698 ? might be 1.0118x slower infer-closure-const-then-put-to-scope 21.8037+-0.2797 ? 23.4359+-2.3851 ? might be 1.0749x slower infer-closure-const-then-reenter-no-inline 49.8403+-1.7341 48.3830+-0.2874 might be 1.0301x faster infer-closure-const-then-reenter 22.6548+-1.4774 ! 124.3955+-1.4561 ! definitely 5.4909x slower infer-constant-global-property 31.0710+-1.7498 ? 31.7423+-2.3690 ? might be 1.0216x slower infer-constant-property 2.7660+-0.0763 2.7579+-0.1134 infer-one-time-closure-ten-vars 12.5774+-0.7879 12.3526+-0.2497 might be 1.0182x faster infer-one-time-closure-two-vars 11.9910+-0.2488 ? 12.1115+-0.7321 ? might be 1.0101x slower infer-one-time-closure 11.7322+-0.3056 ? 12.4477+-1.1983 ? might be 1.0610x slower infer-one-time-deep-closure 21.3535+-1.1152 ? 21.4430+-1.2074 ? inline-arguments-access 1.3955+-0.0329 ! 4.2281+-0.0750 ! definitely 3.0298x slower inline-arguments-aliased-access 1.7501+-0.1605 ! 4.3364+-0.1212 ! definitely 2.4778x slower inline-arguments-local-escape 12.6784+-0.4123 ^ 4.5016+-0.1883 ^ definitely 2.8164x faster inline-get-scoped-var 4.6298+-0.1040 4.4285+-0.3475 might be 1.0454x faster inlined-put-by-id-transition 10.1538+-0.2056 ? 10.3675+-0.3597 ? might be 1.0210x slower int-or-other-abs-then-get-by-val 4.9827+-0.0424 4.9768+-0.0367 int-or-other-abs-zero-then-get-by-val 17.1215+-0.9293 ? 17.4886+-1.4086 ? might be 1.0214x slower int-or-other-add-then-get-by-val 4.3026+-0.0773 4.2896+-0.0239 int-or-other-add 5.3201+-0.0323 5.2887+-0.0311 int-or-other-div-then-get-by-val 4.2177+-0.0133 ? 4.4236+-0.4977 ? might be 1.0488x slower int-or-other-max-then-get-by-val 4.3446+-0.0590 ? 4.4173+-0.1067 ? might be 1.0167x slower int-or-other-min-then-get-by-val 4.3717+-0.0571 ? 4.4536+-0.0250 ? might be 1.0187x slower int-or-other-mod-then-get-by-val 3.8587+-0.0463 ? 3.9207+-0.0550 ? might be 1.0161x slower int-or-other-mul-then-get-by-val 3.9760+-0.0499 ? 4.0398+-0.0559 ? might be 1.0160x slower int-or-other-neg-then-get-by-val 4.6075+-0.0105 ? 4.7658+-0.3176 ? might be 1.0343x slower int-or-other-neg-zero-then-get-by-val 17.0751+-0.8281 ? 17.3219+-1.3883 ? might be 1.0145x slower int-or-other-sub-then-get-by-val 4.3413+-0.0964 ? 4.4165+-0.1894 ? might be 1.0173x slower int-or-other-sub 3.5396+-0.1246 3.5053+-0.0555 int-overflow-local 4.2557+-0.0588 ? 4.3250+-0.0283 ? might be 1.0163x slower Int16Array-alloc-long-lived 50.2916+-2.3694 50.0083+-1.8636 Int16Array-bubble-sort-with-byteLength 21.6849+-1.3561 ? 22.1416+-1.7688 ? might be 1.0211x slower Int16Array-bubble-sort 25.6385+-2.5840 ^ 21.2340+-0.0994 ^ definitely 1.2074x faster Int16Array-load-int-mul 1.4724+-0.0097 ? 1.5184+-0.0736 ? might be 1.0312x slower Int16Array-to-Int32Array-set 58.7047+-1.5287 ^ 51.9980+-1.7351 ^ definitely 1.1290x faster Int32Array-alloc-large 24.3234+-0.5871 ? 24.5723+-1.6618 ? might be 1.0102x slower Int32Array-alloc-long-lived 56.5165+-0.9798 ? 57.0769+-1.0481 ? Int32Array-alloc 3.5877+-0.6249 3.3811+-0.1499 might be 1.0611x faster Int32Array-Int8Array-view-alloc 7.8647+-1.8118 ? 7.9735+-0.9842 ? might be 1.0138x slower int52-spill 6.5568+-0.1255 ? 6.6782+-0.2856 ? might be 1.0185x slower Int8Array-alloc-long-lived 46.8322+-1.6964 46.5830+-1.3836 Int8Array-load-with-byteLength 3.3739+-0.1504 3.3111+-0.0311 might be 1.0190x faster Int8Array-load 3.3276+-0.0903 ? 3.3473+-0.0438 ? integer-divide 11.2773+-0.1837 ? 11.8682+-0.4097 ? might be 1.0524x slower integer-modulo 2.0358+-0.0698 ? 2.1246+-0.0992 ? might be 1.0436x slower large-int-captured 6.7703+-0.1129 ^ 5.5452+-0.0461 ^ definitely 1.2209x faster large-int-neg 16.4830+-0.2362 ? 18.1816+-1.5757 ? might be 1.1031x slower large-int 16.3620+-1.6881 ? 16.4237+-1.5908 ? logical-not 4.4885+-0.0188 ? 4.5450+-0.0535 ? might be 1.0126x slower lots-of-fields 13.5452+-1.3405 13.1271+-0.2983 might be 1.0319x faster make-indexed-storage 3.0584+-0.0826 3.0141+-0.0507 might be 1.0147x faster make-rope-cse 4.7023+-0.5056 4.6767+-0.6666 marsaglia-larger-ints 36.5052+-1.7796 35.7106+-1.0529 might be 1.0223x faster marsaglia-osr-entry 23.0603+-0.3326 ? 23.5247+-1.4735 ? might be 1.0201x slower max-boolean 2.4726+-0.0352 ? 2.5052+-0.0258 ? might be 1.0132x slower method-on-number 17.2160+-0.2334 ? 17.4234+-0.2140 ? might be 1.0120x slower min-boolean 2.4620+-0.0195 ? 2.5022+-0.0300 ? might be 1.0163x slower minus-boolean-double 3.1642+-0.0414 ? 3.1679+-0.0482 ? minus-boolean 2.3340+-0.0447 ? 2.3527+-0.0559 ? misc-strict-eq 37.4502+-0.2300 ? 38.2345+-2.7134 ? might be 1.0209x slower mod-boolean-double 10.8724+-0.1058 ? 11.0429+-0.2530 ? might be 1.0157x slower mod-boolean 7.9217+-0.2358 7.9097+-0.2778 mul-boolean-double 3.6959+-0.0386 3.6860+-0.0862 mul-boolean 2.8781+-0.0459 2.8774+-0.0544 neg-boolean 3.1665+-0.0309 3.1640+-0.0502 negative-zero-divide 0.3485+-0.0129 ? 0.3528+-0.0105 ? might be 1.0123x slower negative-zero-modulo 0.3394+-0.0146 ? 0.3467+-0.0128 ? might be 1.0217x slower negative-zero-negate 0.3244+-0.0180 0.3207+-0.0060 might be 1.0114x faster nested-function-parsing 21.4532+-0.5785 ! 43.9855+-2.2210 ! definitely 2.0503x slower new-array-buffer-dead 2.7646+-0.0656 ? 2.8088+-0.1389 ? might be 1.0160x slower new-array-buffer-push 7.0847+-0.7708 ? 7.4689+-0.9300 ? might be 1.0542x slower new-array-dead 12.2570+-0.1689 ? 12.5199+-0.1628 ? might be 1.0214x slower new-array-push 3.9345+-0.3003 ? 3.9680+-0.2564 ? number-test 2.9847+-0.0226 2.9670+-0.0328 object-closure-call 5.6496+-0.1442 5.6140+-0.0950 object-test 3.1206+-0.0523 ? 3.1329+-0.0525 ? obvious-sink-pathology-taken 145.4633+-2.4440 ? 146.4790+-2.7531 ? obvious-sink-pathology 140.9506+-1.9977 140.0090+-0.9226 obviously-elidable-new-object 36.4417+-2.4627 36.0307+-1.8095 might be 1.0114x faster plus-boolean-arith 2.5161+-0.0429 2.4975+-0.0417 plus-boolean-double 3.2134+-0.0807 3.1608+-0.0732 might be 1.0166x faster plus-boolean 2.3875+-0.0754 2.3669+-0.0320 poly-chain-access-different-prototypes-simple 3.3177+-0.0464 3.3105+-0.0453 poly-chain-access-different-prototypes 2.9827+-0.7310 2.6036+-0.0232 might be 1.1456x faster poly-chain-access-simpler 3.2949+-0.0392 ? 3.3538+-0.0787 ? might be 1.0179x slower poly-chain-access 2.9583+-0.3575 2.6023+-0.0856 might be 1.1368x faster poly-stricteq 57.8018+-1.8017 ? 59.9613+-2.7435 ? might be 1.0374x slower polymorphic-array-call 1.3512+-0.1752 ? 1.4014+-0.1874 ? might be 1.0371x slower polymorphic-get-by-id 3.1123+-0.0293 ? 3.1438+-0.1230 ? might be 1.0101x slower polymorphic-put-by-id 29.3969+-1.8048 28.5241+-1.6287 might be 1.0306x faster polymorphic-structure 15.2421+-0.7442 ? 15.5665+-1.3697 ? might be 1.0213x slower polyvariant-monomorphic-get-by-id 8.6059+-0.3007 8.5938+-0.1834 proto-getter-access 10.0130+-0.1296 ? 10.0970+-0.2201 ? put-by-id-replace-and-transition 8.8644+-0.2310 8.5975+-0.0838 might be 1.0310x faster put-by-id-slightly-polymorphic 2.8749+-0.0650 2.8423+-0.0205 might be 1.0115x faster put-by-id 13.3868+-0.4032 13.3621+-0.2823 put-by-val-direct 0.5626+-0.0262 ? 0.5751+-0.0199 ? might be 1.0222x slower put-by-val-large-index-blank-indexing-type 5.8165+-0.2447 ? 5.9867+-0.3952 ? might be 1.0293x slower put-by-val-machine-int 2.5441+-0.0533 ? 2.6388+-0.0917 ? might be 1.0372x slower rare-osr-exit-on-local 15.0249+-0.2465 ? 15.1480+-0.5870 ? register-pressure-from-osr 21.8321+-0.8673 21.7838+-0.8833 setter 5.2048+-0.0791 ? 5.7800+-0.6213 ? might be 1.1105x slower simple-activation-demo 25.1026+-0.4058 ? 25.2276+-0.6920 ? simple-getter-access 12.5372+-0.1897 ? 12.6647+-0.3392 ? might be 1.0102x slower simple-poly-call-nested 8.2292+-0.2781 8.0302+-0.2238 might be 1.0248x faster simple-poly-call 1.3129+-0.0722 ? 1.3481+-0.1312 ? might be 1.0268x slower sin-boolean 23.7668+-1.3876 23.5791+-1.3739 sinkable-new-object-dag 69.6718+-1.5538 ? 71.5166+-1.3809 ? might be 1.0265x slower sinkable-new-object-taken 53.3445+-2.2129 ? 53.6960+-3.2474 ? sinkable-new-object 39.7256+-0.9644 39.6622+-1.2151 slow-array-profile-convergence 2.9140+-0.2749 2.7585+-0.0671 might be 1.0564x faster slow-convergence 3.2701+-0.1736 3.2499+-0.0741 sparse-conditional 1.0963+-0.0287 ? 1.1333+-0.0967 ? might be 1.0337x slower splice-to-remove 16.4429+-0.2392 ? 16.8519+-1.2147 ? might be 1.0249x slower string-char-code-at 15.9352+-0.1477 ? 16.0804+-0.1399 ? string-concat-object 2.4601+-0.1902 2.4412+-0.2380 string-concat-pair-object 2.3042+-0.0731 ? 2.3067+-0.0467 ? string-concat-pair-simple 11.1728+-0.2965 ? 11.3615+-0.4010 ? might be 1.0169x slower string-concat-simple 11.9297+-1.1322 11.7049+-0.8871 might be 1.0192x faster string-cons-repeat 8.0776+-0.6548 ? 8.1977+-0.9899 ? might be 1.0149x slower string-cons-tower 8.3514+-0.7305 ? 8.5870+-1.1581 ? might be 1.0282x slower string-equality 17.5241+-0.3739 ? 17.9406+-1.6356 ? might be 1.0238x slower string-get-by-val-big-char 7.0094+-0.0623 ? 7.1229+-0.1642 ? might be 1.0162x slower string-get-by-val-out-of-bounds-insane 3.8482+-0.0817 ? 3.8486+-0.1226 ? string-get-by-val-out-of-bounds 5.1816+-0.0690 ? 5.2865+-0.1972 ? might be 1.0203x slower string-get-by-val 3.3008+-0.0376 ? 3.3855+-0.0512 ? might be 1.0257x slower string-hash 2.0244+-0.0470 ? 2.0406+-0.0731 ? string-long-ident-equality 14.2334+-0.1526 ? 15.2955+-1.3620 ? might be 1.0746x slower string-out-of-bounds 14.9467+-0.2740 14.8979+-0.2746 string-repeat-arith 36.0838+-1.8210 ^ 31.8703+-1.7766 ^ definitely 1.1322x faster string-sub 65.1422+-2.6170 ? 65.4779+-4.6902 ? string-test 2.9696+-0.0746 ? 2.9814+-0.0900 ? string-var-equality 30.6908+-1.7210 30.5079+-1.3530 structure-hoist-over-transitions 2.4899+-0.0501 ? 2.5460+-0.0572 ? might be 1.0225x slower substring-concat-weird 38.8601+-0.8495 38.7106+-1.0256 substring-concat 39.7387+-0.5464 ? 40.7720+-1.6544 ? might be 1.0260x slower substring 46.4003+-2.0718 ? 46.9388+-2.3465 ? might be 1.0116x slower switch-char-constant 2.7030+-0.0269 2.6866+-0.0396 switch-char 6.7489+-0.9652 ? 7.0335+-0.8245 ? might be 1.0422x slower switch-constant 8.2266+-0.3710 8.0303+-0.1079 might be 1.0244x faster switch-string-basic-big-var 16.0790+-1.7376 15.0439+-0.4941 might be 1.0688x faster switch-string-basic-big 14.2551+-0.9973 ? 14.9273+-1.7970 ? might be 1.0472x slower switch-string-basic-var 15.1372+-1.3279 14.8380+-1.1923 might be 1.0202x faster switch-string-basic 13.9145+-1.6241 ? 14.3321+-1.7179 ? might be 1.0300x slower switch-string-big-length-tower-var 21.9250+-1.7618 20.7657+-1.7587 might be 1.0558x faster switch-string-length-tower-var 14.6041+-0.1959 ? 15.1724+-1.4175 ? might be 1.0389x slower switch-string-length-tower 13.5666+-1.2648 ? 14.4839+-2.1993 ? might be 1.0676x slower switch-string-short 13.2701+-1.4505 ? 14.1888+-1.9055 ? might be 1.0692x slower switch 12.0872+-0.3136 ? 12.1033+-0.2543 ? tear-off-arguments-simple 1.9614+-0.0782 ! 3.2781+-0.0514 ! definitely 1.6713x slower tear-off-arguments 2.7454+-0.0279 ! 4.5109+-0.1216 ! definitely 1.6431x slower temporal-structure 12.9519+-0.8369 ? 13.2093+-1.3818 ? might be 1.0199x slower to-int32-boolean 14.1154+-0.9607 13.5620+-0.1546 might be 1.0408x faster undefined-property-access 385.6309+-3.8221 ? 386.4823+-6.3285 ? undefined-test 3.1202+-0.2218 3.0246+-0.0342 might be 1.0316x faster unprofiled-licm 23.9965+-1.9658 23.2896+-0.7174 might be 1.0304x faster varargs-call 15.9173+-0.9872 ! 17.9589+-0.8468 ! definitely 1.1283x slower varargs-construct 55.2190+-3.2016 ^ 40.3783+-1.3147 ^ definitely 1.3675x faster varargs-inline 8.4436+-0.3893 ! 12.8549+-1.1425 ! definitely 1.5224x slower varargs-strict-mode 15.4855+-1.1579 ? 16.8789+-0.2836 ? might be 1.0900x slower varargs 15.7035+-1.6085 14.9855+-0.2314 might be 1.0479x faster weird-inlining-const-prop 2.2171+-0.0910 ? 2.4135+-0.1939 ? might be 1.0886x slower <geometric> 8.3324+-0.0312 ! 8.6526+-0.0500 ! definitely 1.0384x slower TipOfTree VarOffset AsmBench: bigfib.cpp 493.9181+-2.8532 492.9224+-2.1096 cray.c 435.2725+-10.3530 430.1591+-2.5643 might be 1.0119x faster dry.c 489.8103+-1.8266 ? 490.4915+-10.3195 ? FloatMM.c 729.6682+-3.6618 726.7941+-2.6514 gcc-loops.cpp 4252.3182+-16.3408 ? 4260.9071+-23.2380 ? n-body.c 988.8191+-5.2327 986.9184+-3.9455 Quicksort.c 444.5309+-5.9634 442.4574+-1.4171 stepanov_container.cpp 3581.2647+-7.9971 3572.2782+-14.8630 Towers.c 268.3764+-2.2816 268.3147+-2.3779 <geometric> 802.4690+-2.2887 800.3650+-1.7432 might be 1.0026x faster TipOfTree VarOffset CompressionBench: huffman 386.2019+-1.2097 ? 386.7360+-2.6542 ? arithmetic-simple 406.9363+-5.0585 402.6431+-4.3853 might be 1.0107x faster arithmetic-precise 304.9522+-1.7341 304.7725+-4.5106 arithmetic-complex-precise 301.6358+-5.2021 ? 303.1571+-4.6472 ? arithmetic-precise-order-0 436.7237+-6.2695 435.1612+-9.1277 arithmetic-precise-order-1 342.7232+-2.9055 ^ 327.8700+-2.9491 ^ definitely 1.0453x faster arithmetic-precise-order-2 392.6497+-18.3265 369.9658+-6.2658 might be 1.0613x faster arithmetic-simple-order-1 435.4581+-4.3075 ^ 424.5752+-3.5638 ^ definitely 1.0256x faster arithmetic-simple-order-2 483.7448+-3.7295 ^ 472.3563+-4.0068 ^ definitely 1.0241x faster lz-string 325.3980+-5.9588 324.6047+-1.7246 <geometric> 377.1107+-2.0545 ^ 371.0082+-1.4414 ^ definitely 1.0164x faster TipOfTree VarOffset TipOfTree VarOffset Geomean of preferred means: <scaled-result> 63.7105+-0.2019 ! 64.1418+-0.1349 ! definitely 1.0068x slower
Created attachment 249157 [details] starting to work on the varargs forwarding phase
Created attachment 249172 [details] OSR exit part of varargs forwarding is almost done
Created attachment 249174 [details] it compiles again! DFG varargs forwarding phase is done. now to test it...
Created attachment 249175 [details] DFG and FTL can now forward varargs It's passing the main varargs tests. Running all tests now.
The new code with the third-tier varargs forwarding still has some issues: ** The following JSC stress test failures have been introduced: internal-js-tests.yaml/V8v7/raytrace.js.default-ftl internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-no-simple-opt internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-osr-validation internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-validate jsc-layout-tests.yaml/js/script-tests/function-apply-many-args.js.layout-dfg-eager-no-cjit v8-v6/v8-raytrace.js.default-ftl v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate v8-v6/v8-raytrace.js.ftl-eager-no-cjit v8-v6/v8-raytrace.js.ftl-no-cjit-validate Results for JSC stress tests: 9 failures found.
Unfortunately, this doesn't appear to address the box2d slow-down just yet: box2d x2 12.74762+-0.13700 ! 14.14226+-0.40700 ! definitely 1.1094x slower
OK, I fixed that. It turned out to be a dumb bug in argumentsInvolveStackSlot(): we thought that a store to 'this' interferes with the stack slots used by the arguments object.
(In reply to comment #80) > OK, I fixed that. It turned out to be a dumb bug in > argumentsInvolveStackSlot(): we thought that a store to 'this' interferes > with the stack slots used by the arguments object. And by "fixed", I mean that box2d now has a speed-up with this patch: box2d x2 12.74121+-0.02937 ^ 12.21960+-0.13325 ^ definitely 1.0427x faster
Created attachment 249182 [details] couple of bugfixes And some new tests!
(In reply to comment #82) > Created attachment 249182 [details] > couple of bugfixes > > And some new tests! This passes a lot of tests, but hilariously, the VarargsForwardingPhase causes the FTL to do less optimizations. I need to investigate.
Victory. Now I just have one crash bug to fix (in dead-access-to-captured-variable-preceded-by-a-live-store) and I need to port to 32-bit. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r181817) "VarOffset" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r181817) Collected 6 samples per benchmark/VM, with 6 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. TipOfTree VarOffset SunSpider: 3d-cube 4.9017+-0.1281 4.8992+-0.0291 3d-morph 6.0416+-0.7505 5.5698+-0.0824 might be 1.0847x faster 3d-raytrace 7.1640+-1.9683 6.3432+-0.1266 might be 1.1294x faster access-binary-trees 2.1097+-0.1085 2.0797+-0.0627 might be 1.0144x faster access-fannkuch 6.0033+-0.2915 ? 6.2669+-0.4815 ? might be 1.0439x slower access-nbody 2.8446+-0.0524 ? 2.9247+-0.1032 ? might be 1.0282x slower access-nsieve 3.2158+-0.1422 ! 3.4085+-0.0389 ! definitely 1.0599x slower bitops-3bit-bits-in-byte 1.5995+-0.1207 1.5392+-0.0188 might be 1.0392x faster bitops-bits-in-byte 3.5599+-0.0357 ^ 3.3985+-0.0229 ^ definitely 1.0475x faster bitops-bitwise-and 2.1314+-0.0480 ? 2.1954+-0.1212 ? might be 1.0300x slower bitops-nsieve-bits 3.9392+-0.6223 3.7704+-0.0346 might be 1.0448x faster controlflow-recursive 2.1592+-0.0374 2.1560+-0.0996 crypto-aes 4.4269+-0.5888 4.2992+-0.4744 might be 1.0297x faster crypto-md5 2.4290+-0.0336 2.4179+-0.0271 crypto-sha1 2.7904+-0.0545 ? 2.9407+-0.5976 ? might be 1.0539x slower date-format-tofte 9.2875+-0.1429 ? 9.3208+-0.2291 ? date-format-xparb 5.3167+-0.1542 ? 5.6932+-0.3558 ? might be 1.0708x slower math-cordic 3.2699+-0.1204 3.2036+-0.1562 might be 1.0207x faster math-partial-sums 5.1961+-0.1131 5.1629+-0.0982 math-spectral-norm 1.9756+-0.0741 1.9349+-0.0565 might be 1.0211x faster regexp-dna 7.7810+-1.2019 7.6440+-1.2113 might be 1.0179x faster string-base64 4.7606+-0.6879 ? 4.8085+-0.9157 ? might be 1.0101x slower string-fasta 6.4792+-0.1243 ? 6.7039+-0.6378 ? might be 1.0347x slower string-tagcloud 9.8202+-0.2892 9.6373+-0.2542 might be 1.0190x faster string-unpack-code 20.3537+-1.0780 19.7221+-0.2824 might be 1.0320x faster string-validate-input 4.8014+-0.0457 ? 4.9093+-0.0879 ? might be 1.0225x slower <arithmetic> 5.1676+-0.0850 5.1135+-0.0498 might be 1.0106x faster TipOfTree VarOffset LongSpider: 3d-cube 1096.3337+-8.4898 1093.7603+-9.5475 3d-morph 1532.0884+-4.6503 ? 1542.2600+-17.2167 ? 3d-raytrace 733.3191+-5.9032 727.7755+-11.5984 access-binary-trees 996.8634+-10.0249 983.8950+-5.8529 might be 1.0132x faster access-fannkuch 339.4403+-9.7328 ? 353.4993+-5.6720 ? might be 1.0414x slower access-nbody 613.0658+-2.4074 ? 647.6632+-81.1990 ? might be 1.0564x slower access-nsieve 870.4932+-8.3117 864.8263+-11.1455 bitops-3bit-bits-in-byte 45.0267+-0.9861 ? 46.3044+-2.7221 ? might be 1.0284x slower bitops-bits-in-byte 103.9690+-1.0523 ? 105.1049+-4.4509 ? might be 1.0109x slower bitops-nsieve-bits 712.0330+-39.0448 704.5660+-4.9940 might be 1.0106x faster controlflow-recursive 503.8050+-12.8532 ^ 482.9097+-3.6907 ^ definitely 1.0433x faster crypto-aes 709.7507+-5.3468 ? 710.8568+-8.4165 ? crypto-md5 552.1249+-5.5952 550.6012+-6.1270 crypto-sha1 601.5227+-7.1291 599.2570+-6.7295 date-format-tofte 771.8925+-9.2285 758.7334+-15.8302 might be 1.0173x faster date-format-xparb 762.2727+-21.1727 745.9775+-18.5221 might be 1.0218x faster math-cordic 597.2029+-7.9316 597.0286+-11.4778 math-partial-sums 509.1969+-6.4644 506.6546+-1.8273 math-spectral-norm 564.6925+-0.9477 ? 613.0783+-119.0429 ? might be 1.0857x slower string-base64 364.2877+-7.8788 362.8219+-4.9663 string-fasta 422.7378+-3.7619 ? 424.4975+-5.7933 ? string-tagcloud 215.9610+-2.4832 ? 216.5074+-2.7605 ? <geometric> 504.8709+-2.5775 ? 506.6397+-4.4576 ? might be 1.0035x slower TipOfTree VarOffset V8Spider: crypto 55.8340+-1.6098 55.1450+-3.3781 might be 1.0125x faster deltablue 92.3854+-4.9547 92.3543+-6.5274 earley-boyer 42.3256+-0.8410 41.1394+-0.5167 might be 1.0288x faster raytrace 38.5377+-3.7738 ? 38.7447+-1.8166 ? regexp 67.1395+-1.2739 66.4766+-1.4860 richards 81.1405+-2.5279 78.9990+-2.4080 might be 1.0271x faster splay 39.0199+-1.0256 37.8300+-2.0243 might be 1.0315x faster <geometric> 56.2434+-1.3248 55.4115+-0.5837 might be 1.0150x faster TipOfTree VarOffset Octane: encrypt 0.20259+-0.00108 ? 0.20283+-0.00117 ? decrypt 3.59592+-0.03947 ? 3.61984+-0.04092 ? deltablue x2 0.20534+-0.00130 ? 0.20611+-0.00184 ? earley 0.69050+-0.00390 ^ 0.55301+-0.00388 ^ definitely 1.2486x faster boyer 5.72497+-0.04539 5.69658+-0.02511 navier-stokes x2 5.21616+-0.05402 5.18832+-0.00788 raytrace x2 1.29042+-0.04445 1.26241+-0.04465 might be 1.0222x faster richards x2 0.12323+-0.00225 0.12251+-0.00094 splay x2 0.38506+-0.00475 0.38238+-0.00241 regexp x2 33.33609+-0.33576 33.15827+-0.26477 pdfjs x2 44.82803+-0.28930 ? 45.08427+-0.77731 ? mandreel x2 50.36068+-0.70841 ? 57.18621+-17.73578 ? might be 1.1355x slower gbemu x2 40.15027+-0.43667 ? 40.17046+-1.95167 ? closure 0.58239+-0.00377 0.57650+-0.01621 might be 1.0102x faster jquery 7.18168+-0.07183 7.14945+-0.13291 box2d x2 12.80408+-0.21425 ^ 12.22952+-0.09737 ^ definitely 1.0470x faster zlib x2 394.84661+-1.64225 377.00917+-17.57298 might be 1.0473x faster typescript x2 821.01302+-12.52872 ? 830.25403+-17.89477 ? might be 1.0113x slower <geometric> 6.76613+-0.02426 6.70560+-0.11897 might be 1.0090x faster TipOfTree VarOffset Kraken: ai-astar 265.915+-1.931 262.635+-4.194 might be 1.0125x faster audio-beat-detection 110.384+-1.035 110.372+-1.343 audio-dft 149.307+-3.935 148.168+-1.667 audio-fft 86.236+-2.842 83.137+-5.905 might be 1.0373x faster audio-oscillator 215.602+-5.141 211.427+-2.152 might be 1.0197x faster imaging-darkroom 105.290+-1.956 ? 105.543+-1.780 ? imaging-desaturate 63.412+-1.882 ? 63.789+-1.963 ? imaging-gaussian-blur 113.937+-1.949 112.583+-2.000 might be 1.0120x faster json-parse-financial 46.617+-2.036 ? 48.113+-1.697 ? might be 1.0321x slower json-stringify-tinderbox 56.910+-1.341 55.800+-1.737 might be 1.0199x faster stanford-crypto-aes 60.405+-1.719 60.072+-1.019 stanford-crypto-ccm 51.840+-4.761 50.555+-1.383 might be 1.0254x faster stanford-crypto-pbkdf2 168.868+-1.889 168.840+-2.545 stanford-crypto-sha256-iterative 55.130+-2.123 ? 55.299+-1.666 ? <arithmetic> 110.704+-0.957 109.738+-0.469 might be 1.0088x faster TipOfTree VarOffset JSRegress: abs-boolean 2.6390+-0.0497 ? 2.6733+-0.1426 ? might be 1.0130x slower adapt-to-double-divide 16.7057+-0.2939 16.5352+-0.2077 might be 1.0103x faster aliased-arguments-getbyval 0.8750+-0.1003 ! 1.1810+-0.0572 ! definitely 1.3497x slower allocate-big-object 2.7465+-0.2200 ? 2.7649+-0.1810 ? arguments-named-and-reflective 9.2676+-0.1568 ! 12.4880+-0.1670 ! definitely 1.3475x slower arguments-out-of-bounds 17.5296+-1.4577 ^ 14.8223+-0.1275 ^ definitely 1.1827x faster arguments-strict-mode 7.8397+-0.1147 ! 11.9400+-0.7952 ! definitely 1.5230x slower arguments 8.1028+-0.4231 ! 10.7074+-1.1347 ! definitely 1.3215x slower arity-mismatch-inlining 0.8495+-0.0812 0.8014+-0.0272 might be 1.0600x faster array-access-polymorphic-structure 6.6608+-0.1380 ? 7.1372+-0.9479 ? might be 1.0715x slower array-nonarray-polymorhpic-access 35.2690+-2.1497 35.2384+-1.5625 array-prototype-every 87.0461+-2.6521 86.3693+-2.4882 array-prototype-forEach 83.1996+-2.1928 ? 85.3514+-1.7538 ? might be 1.0259x slower array-prototype-map 94.2257+-4.2539 ? 95.8304+-2.5183 ? might be 1.0170x slower array-prototype-some 86.7282+-0.5704 ? 87.7251+-2.7378 ? might be 1.0115x slower array-splice-contiguous 41.4119+-1.3195 ? 41.7235+-1.2377 ? array-with-double-add 4.1983+-0.0968 4.1463+-0.0708 might be 1.0125x faster array-with-double-increment 3.1737+-0.0452 ? 3.2521+-0.1287 ? might be 1.0247x slower array-with-double-mul-add 4.9507+-0.0674 ? 5.2213+-0.3005 ? might be 1.0547x slower array-with-double-sum 3.2365+-0.0320 ? 3.2881+-0.0932 ? might be 1.0159x slower array-with-int32-add-sub 6.7863+-0.0695 6.7522+-0.0127 array-with-int32-or-double-sum 3.3001+-0.0394 ? 3.4034+-0.2287 ? might be 1.0313x slower ArrayBuffer-DataView-alloc-large-long-lived 34.4114+-2.4115 34.2580+-1.7629 ArrayBuffer-DataView-alloc-long-lived 15.5472+-1.4064 14.8891+-2.0846 might be 1.0442x faster ArrayBuffer-Int32Array-byteOffset 3.5158+-0.1379 3.4370+-0.0469 might be 1.0229x faster ArrayBuffer-Int8Array-alloc-large-long-lived 33.6919+-1.9438 ? 34.2576+-2.3308 ? might be 1.0168x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 23.9516+-2.0772 23.7262+-2.0815 ArrayBuffer-Int8Array-alloc-long-lived 14.1093+-1.7181 ? 15.4349+-1.8490 ? might be 1.0939x slower ArrayBuffer-Int8Array-alloc 11.5817+-1.0811 11.1208+-0.9256 might be 1.0415x faster asmjs_bool_bug 7.7481+-0.2484 ? 7.7651+-0.2098 ? assign-custom-setter-polymorphic 3.0131+-0.2336 ? 3.2188+-0.1491 ? might be 1.0683x slower assign-custom-setter 4.0621+-0.1279 ? 4.4348+-0.3296 ? might be 1.0917x slower basic-set 8.6607+-0.7063 8.3453+-0.4424 might be 1.0378x faster big-int-mul 3.9293+-0.0796 ? 3.9717+-0.0638 ? might be 1.0108x slower boolean-test 3.0121+-0.0698 ? 3.0485+-0.0473 ? might be 1.0121x slower branch-fold 3.6445+-0.0161 ? 3.7840+-0.1745 ? might be 1.0383x slower by-val-generic 7.9561+-0.0948 ? 8.1960+-0.4687 ? might be 1.0301x slower call-spread-apply 17.3580+-1.1964 ! 31.5833+-1.6596 ! definitely 1.8195x slower call-spread-call 6.0394+-0.1774 ! 24.9599+-0.6710 ! definitely 4.1328x slower captured-assignments 0.4768+-0.0179 ? 0.4884+-0.0697 ? might be 1.0243x slower cast-int-to-double 5.2884+-0.0258 ? 5.3094+-0.0543 ? cell-argument 8.5227+-0.1246 ? 8.8488+-0.6758 ? might be 1.0383x slower cfg-simplify 2.9098+-0.1369 2.8330+-0.1209 might be 1.0271x faster chain-getter-access 10.0680+-0.1349 10.0254+-0.1750 cmpeq-obj-to-obj-other 11.5928+-1.3747 ? 11.9969+-0.7984 ? might be 1.0349x slower constant-test 4.9227+-0.0299 4.9205+-0.0623 DataView-custom-properties 39.6618+-1.2995 39.1096+-1.2928 might be 1.0141x faster delay-tear-off-arguments-strictmode 21.3940+-1.5909 ^ 14.2245+-1.4681 ^ definitely 1.5040x faster deltablue-varargs 181.3296+-1.9218 ! 202.8445+-1.5379 ! definitely 1.1187x slower destructuring-arguments 5.2181+-0.1088 ! 17.2683+-1.1020 ! definitely 3.3093x slower destructuring-swap 5.0476+-0.0418 5.0198+-0.0327 direct-arguments-getbyval 0.9563+-0.0470 ! 1.2015+-0.0519 ! definitely 1.2564x slower div-boolean-double 5.1892+-0.0365 ? 5.1921+-0.0063 ? div-boolean 7.8449+-0.2864 ? 7.9229+-0.2491 ? double-get-by-val-out-of-bounds 4.4637+-0.0989 4.4186+-0.0474 might be 1.0102x faster double-pollution-getbyval 8.8902+-0.0753 8.8330+-0.0383 double-pollution-putbyoffset 4.1302+-0.0696 ? 4.1768+-0.0511 ? might be 1.0113x slower double-to-int32-typed-array-no-inline 2.2805+-0.0984 2.2174+-0.0864 might be 1.0284x faster double-to-int32-typed-array 1.9027+-0.0420 ? 1.9681+-0.1436 ? might be 1.0343x slower double-to-uint32-typed-array-no-inline 2.2585+-0.0869 ? 2.3159+-0.0719 ? might be 1.0254x slower double-to-uint32-typed-array 2.0577+-0.1435 2.0318+-0.1428 might be 1.0127x faster elidable-new-object-dag 44.6996+-1.7341 ? 45.1471+-1.4622 ? might be 1.0100x slower elidable-new-object-roflcopter 47.9990+-2.1137 ? 48.1162+-1.4348 ? elidable-new-object-then-call 39.1941+-2.7395 ? 39.6864+-1.4742 ? might be 1.0126x slower elidable-new-object-tree 45.5476+-2.2245 ? 46.4419+-1.9910 ? might be 1.0196x slower empty-string-plus-int 5.3222+-0.0782 ? 5.5485+-0.4114 ? might be 1.0425x slower emscripten-cube2hash 39.2718+-1.6096 ? 40.1305+-1.4285 ? might be 1.0219x slower exit-length-on-plain-object 14.1991+-0.5177 13.9755+-0.8267 might be 1.0160x faster external-arguments-getbyval 1.3825+-0.0361 ^ 1.1838+-0.0397 ^ definitely 1.1679x faster external-arguments-putbyval 2.0158+-0.0306 ! 2.3329+-0.1640 ! definitely 1.1573x slower fixed-typed-array-storage-var-index 1.2332+-0.0257 1.2162+-0.0100 might be 1.0140x faster fixed-typed-array-storage 0.8810+-0.0322 ? 0.9222+-0.0851 ? might be 1.0468x slower Float32Array-matrix-mult 4.4539+-0.2833 4.3785+-0.1749 might be 1.0172x faster Float32Array-to-Float64Array-set 58.6958+-3.3470 57.6047+-1.5853 might be 1.0189x faster Float64Array-alloc-long-lived 73.2237+-1.6983 72.5228+-1.2552 Float64Array-to-Int16Array-set 70.9159+-1.0545 70.6936+-1.6639 fold-double-to-int 15.1743+-0.2741 ? 15.8724+-0.9338 ? might be 1.0460x slower fold-get-by-id-to-multi-get-by-offset-rare-int 10.1990+-1.0486 ? 10.4776+-0.9626 ? might be 1.0273x slower fold-get-by-id-to-multi-get-by-offset 9.9266+-1.4890 ? 10.0684+-1.5731 ? might be 1.0143x slower fold-multi-get-by-offset-to-get-by-offset 8.2025+-0.8273 8.1991+-2.0772 fold-multi-get-by-offset-to-poly-get-by-offset 9.1453+-1.3455 8.8655+-0.8686 might be 1.0316x faster fold-multi-put-by-offset-to-poly-put-by-offset 8.5237+-0.5916 ? 9.0015+-0.8627 ? might be 1.0561x slower fold-multi-put-by-offset-to-put-by-offset 6.5721+-1.7099 ^ 4.5703+-0.0696 ^ definitely 1.4380x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.3901+-0.3974 9.1227+-0.4649 might be 1.0293x faster fold-put-by-id-to-multi-put-by-offset 9.9117+-1.1066 9.8844+-1.0134 fold-put-structure 6.2134+-1.3981 4.7370+-1.0329 might be 1.3117x faster for-of-iterate-array-entries 4.5640+-0.1435 4.4607+-0.1183 might be 1.0232x faster for-of-iterate-array-keys 3.8091+-0.1270 3.7777+-0.1251 for-of-iterate-array-values 3.6397+-0.1482 ? 3.7272+-0.1953 ? might be 1.0240x slower fround 20.2495+-0.8432 ? 20.4237+-0.8198 ? ftl-library-inlining-dataview 80.5157+-1.8920 77.0192+-1.6499 might be 1.0454x faster ftl-library-inlining 76.9821+-14.7738 75.6729+-17.1504 might be 1.0173x faster function-dot-apply 1.5002+-0.0270 ! 1.8845+-0.1164 ! definitely 1.2562x slower function-test 3.2892+-0.0493 ? 3.4031+-0.1722 ? might be 1.0346x slower function-with-eval 128.4430+-4.5534 ^ 94.5411+-3.5651 ^ definitely 1.3586x faster gcse-poly-get-less-obvious 19.2656+-1.3417 18.5206+-0.6295 might be 1.0402x faster gcse-poly-get 21.7214+-1.3384 ? 22.5645+-2.2093 ? might be 1.0388x slower gcse 4.2562+-0.0280 ? 4.3004+-0.0503 ? might be 1.0104x slower get-by-id-bimorphic-check-structure-elimination-simple 2.7181+-0.0194 ? 2.7362+-0.0551 ? get-by-id-bimorphic-check-structure-elimination 6.0959+-0.0588 6.0878+-0.2456 get-by-id-chain-from-try-block 8.1543+-0.1445 7.0035+-1.1210 might be 1.1643x faster get-by-id-check-structure-elimination 5.1170+-0.1482 ? 5.1704+-0.1173 ? might be 1.0104x slower get-by-id-proto-or-self 18.7258+-0.6064 ^ 17.5041+-0.5120 ^ definitely 1.0698x faster get-by-id-quadmorphic-check-structure-elimination-simple 2.8955+-0.0384 ? 2.9419+-0.0988 ? might be 1.0160x slower get-by-id-self-or-proto 18.3523+-1.1115 17.0832+-0.4751 might be 1.0743x faster get-by-val-out-of-bounds 4.3057+-0.1117 4.2981+-0.0612 get_callee_monomorphic 3.6626+-0.1076 ? 3.7227+-0.2364 ? might be 1.0164x slower get_callee_polymorphic 3.9410+-0.6369 3.5183+-0.4027 might be 1.1201x faster getter-no-activation 5.3969+-0.4493 ^ 4.2830+-0.0792 ^ definitely 1.2601x faster getter-richards 121.8851+-3.3198 ? 126.0511+-10.2824 ? might be 1.0342x slower getter 5.0717+-0.0410 ! 6.3139+-0.6114 ! definitely 1.2449x slower global-var-const-infer-fire-from-opt 0.8617+-0.0176 ? 0.8796+-0.0854 ? might be 1.0208x slower global-var-const-infer 0.9307+-0.1311 0.8925+-0.1305 might be 1.0428x faster HashMap-put-get-iterate-keys 26.3513+-0.1736 ? 26.7427+-0.7182 ? might be 1.0149x slower HashMap-put-get-iterate 26.2697+-0.4626 ? 26.4187+-0.5611 ? HashMap-string-put-get-iterate 27.2253+-0.7928 27.1683+-1.1587 hoist-make-rope 11.8115+-1.0004 ? 12.1286+-0.4142 ? might be 1.0268x slower hoist-poly-check-structure-effectful-loop 5.0406+-0.0556 ? 5.0575+-0.1150 ? hoist-poly-check-structure 3.6597+-0.0521 ? 3.7184+-0.0529 ? might be 1.0160x slower imul-double-only 8.5562+-0.7061 ? 8.6226+-0.1911 ? imul-int-only 9.8023+-0.1701 ? 10.3704+-0.9784 ? might be 1.0579x slower imul-mixed 8.3955+-0.4162 ? 8.8667+-0.4955 ? might be 1.0561x slower in-four-cases 18.9094+-0.3386 18.7487+-0.1410 in-one-case-false 10.0959+-0.4155 ? 10.4620+-0.4008 ? might be 1.0363x slower in-one-case-true 10.2759+-0.3670 ? 10.7109+-0.6159 ? might be 1.0423x slower in-two-cases 10.4377+-0.3131 10.2596+-0.4116 might be 1.0174x faster indexed-properties-in-objects 2.9023+-0.0764 ? 2.9194+-0.0231 ? infer-closure-const-then-mov-no-inline 3.7555+-0.0690 3.6036+-0.1065 might be 1.0422x faster infer-closure-const-then-mov 19.3493+-1.1433 ^ 17.2740+-0.5206 ^ definitely 1.1201x faster infer-closure-const-then-put-to-scope-no-inline 12.0240+-0.7870 11.7476+-0.1343 might be 1.0235x faster infer-closure-const-then-put-to-scope 22.7669+-1.3984 ? 23.3833+-1.7187 ? might be 1.0271x slower infer-closure-const-then-reenter-no-inline 49.2767+-1.3583 48.8374+-1.3068 infer-closure-const-then-reenter 23.1223+-1.3124 ! 123.6871+-2.7920 ! definitely 5.3493x slower infer-constant-global-property 31.3879+-1.7937 31.1616+-2.7796 infer-constant-property 2.6959+-0.0345 ? 2.7125+-0.0196 ? infer-one-time-closure-ten-vars 12.8476+-1.0622 12.3145+-0.5094 might be 1.0433x faster infer-one-time-closure-two-vars 12.0057+-0.2441 ? 12.1625+-1.0409 ? might be 1.0131x slower infer-one-time-closure 12.0015+-0.8442 ? 12.1133+-0.8221 ? infer-one-time-deep-closure 21.0460+-1.0653 ? 21.5560+-1.5585 ? might be 1.0242x slower inline-arguments-access 1.4402+-0.0702 ! 4.2520+-0.1272 ! definitely 2.9524x slower inline-arguments-aliased-access 1.7471+-0.0563 ! 4.3171+-0.2038 ! definitely 2.4710x slower inline-arguments-local-escape 13.7960+-1.6183 ^ 4.4342+-0.2971 ^ definitely 3.1113x faster inline-get-scoped-var 4.6211+-0.1860 ^ 4.1538+-0.0290 ^ definitely 1.1125x faster inlined-put-by-id-transition 10.5100+-0.2167 10.4991+-0.2377 int-or-other-abs-then-get-by-val 4.9626+-0.0603 ? 5.0149+-0.1310 ? might be 1.0105x slower int-or-other-abs-zero-then-get-by-val 17.6873+-1.5964 16.7367+-0.5435 might be 1.0568x faster int-or-other-add-then-get-by-val 4.4602+-0.2903 4.2980+-0.0273 might be 1.0377x faster int-or-other-add 5.3402+-0.0675 5.3112+-0.0275 int-or-other-div-then-get-by-val 4.2559+-0.0569 4.1961+-0.0570 might be 1.0142x faster int-or-other-max-then-get-by-val 4.3458+-0.0116 ? 4.3707+-0.1127 ? int-or-other-min-then-get-by-val 4.4704+-0.0593 4.3972+-0.0377 might be 1.0166x faster int-or-other-mod-then-get-by-val 3.9224+-0.0384 3.8685+-0.0759 might be 1.0139x faster int-or-other-mul-then-get-by-val 4.0094+-0.0248 ? 4.0282+-0.1109 ? int-or-other-neg-then-get-by-val 4.7043+-0.0949 4.6481+-0.0526 might be 1.0121x faster int-or-other-neg-zero-then-get-by-val 17.4395+-1.3705 ? 17.4657+-1.4012 ? int-or-other-sub-then-get-by-val 4.3718+-0.0419 4.3665+-0.0356 int-or-other-sub 3.5269+-0.0288 3.5150+-0.0425 int-overflow-local 4.3295+-0.0408 4.2726+-0.1334 might be 1.0133x faster Int16Array-alloc-long-lived 50.8427+-2.3988 50.7721+-1.2607 Int16Array-bubble-sort-with-byteLength 21.4179+-0.4376 ? 24.3806+-5.3940 ? might be 1.1383x slower Int16Array-bubble-sort 21.6378+-0.6571 ? 22.0357+-1.4224 ? might be 1.0184x slower Int16Array-load-int-mul 1.4740+-0.0089 1.4679+-0.0114 Int16Array-to-Int32Array-set 59.0459+-1.7402 ? 59.6632+-3.1327 ? might be 1.0105x slower Int32Array-alloc-large 23.9794+-0.7220 ? 24.5577+-0.8429 ? might be 1.0241x slower Int32Array-alloc-long-lived 57.7323+-1.6962 55.8142+-1.4536 might be 1.0344x faster Int32Array-alloc 3.5662+-0.3933 3.3320+-0.1213 might be 1.0703x faster Int32Array-Int8Array-view-alloc 7.7539+-1.1361 ? 7.9190+-1.2548 ? might be 1.0213x slower int52-spill 6.4653+-0.0545 ^ 6.3186+-0.0481 ^ definitely 1.0232x faster Int8Array-alloc-long-lived 46.3286+-1.7351 ? 47.5632+-1.3034 ? might be 1.0267x slower Int8Array-load-with-byteLength 3.3155+-0.0665 ? 3.3427+-0.0339 ? Int8Array-load 3.3503+-0.1065 3.2932+-0.0294 might be 1.0173x faster integer-divide 11.2214+-0.1528 ! 11.6576+-0.1335 ! definitely 1.0389x slower integer-modulo 2.0173+-0.0734 ? 2.0398+-0.1137 ? might be 1.0112x slower large-int-captured 7.8016+-1.3366 ^ 5.5686+-0.0773 ^ definitely 1.4010x faster large-int-neg 17.0398+-1.1413 ? 17.0661+-0.8626 ? large-int 15.8834+-1.5409 ? 16.3064+-1.8071 ? might be 1.0266x slower logical-not 4.5280+-0.0529 ? 4.5280+-0.0228 ? lots-of-fields 13.4087+-0.3484 ? 13.4416+-1.2504 ? make-indexed-storage 2.9440+-0.2073 ? 3.0500+-0.0539 ? might be 1.0360x slower make-rope-cse 4.6322+-0.3653 4.5820+-0.4345 might be 1.0109x faster marsaglia-larger-ints 35.8851+-0.8029 35.8750+-1.1125 marsaglia-osr-entry 23.9246+-1.7671 22.9251+-0.6325 might be 1.0436x faster max-boolean 2.4577+-0.0424 2.4371+-0.0328 method-on-number 17.5167+-0.3456 17.4048+-0.3676 min-boolean 2.4742+-0.0326 2.4296+-0.0297 might be 1.0183x faster minus-boolean-double 3.1858+-0.1419 3.1725+-0.0625 minus-boolean 2.3938+-0.0902 2.2947+-0.0211 might be 1.0432x faster misc-strict-eq 37.6575+-1.1902 37.6318+-1.1635 mod-boolean-double 11.2262+-0.5222 11.0247+-0.2976 might be 1.0183x faster mod-boolean 7.9851+-0.2871 ? 8.0659+-0.4693 ? might be 1.0101x slower mul-boolean-double 3.6695+-0.0564 ? 3.6796+-0.0574 ? mul-boolean 2.8704+-0.0647 2.8656+-0.0212 neg-boolean 3.1907+-0.0461 3.1732+-0.0552 negative-zero-divide 0.3549+-0.0146 0.3494+-0.0138 might be 1.0157x faster negative-zero-modulo 0.3706+-0.0169 0.3554+-0.0227 might be 1.0429x faster negative-zero-negate 0.3221+-0.0083 ? 0.3260+-0.0182 ? might be 1.0123x slower nested-function-parsing 21.6555+-0.7431 ! 44.5251+-1.8346 ! definitely 2.0561x slower new-array-buffer-dead 2.7895+-0.0395 2.7755+-0.0907 new-array-buffer-push 7.3080+-0.8165 6.5614+-0.2065 might be 1.1138x faster new-array-dead 12.6055+-0.2789 ? 12.6152+-0.3897 ? new-array-push 4.0273+-0.3797 3.8538+-0.1142 might be 1.0450x faster number-test 2.9594+-0.0174 ! 2.9899+-0.0124 ! definitely 1.0103x slower object-closure-call 5.5707+-0.0496 ? 5.6145+-0.1639 ? object-test 3.0770+-0.0255 ? 3.0964+-0.0360 ? obvious-sink-pathology-taken 147.4931+-2.4009 145.9941+-2.1380 might be 1.0103x faster obvious-sink-pathology 141.1209+-1.5270 139.8644+-1.4646 obviously-elidable-new-object 35.5533+-1.3028 35.3221+-1.1873 plus-boolean-arith 2.5422+-0.0733 2.5179+-0.0398 plus-boolean-double 3.1736+-0.0667 ? 3.2214+-0.1387 ? might be 1.0151x slower plus-boolean 2.4092+-0.0830 2.3930+-0.0750 poly-chain-access-different-prototypes-simple 3.3042+-0.0609 ? 3.3204+-0.0595 ? poly-chain-access-different-prototypes 2.7035+-0.2689 2.5977+-0.0366 might be 1.0408x faster poly-chain-access-simpler 3.2927+-0.0669 ? 3.3143+-0.0544 ? poly-chain-access 2.8394+-0.0858 ^ 2.6106+-0.1137 ^ definitely 1.0876x faster poly-stricteq 58.6075+-1.5167 57.9830+-1.7438 might be 1.0108x faster polymorphic-array-call 1.3532+-0.1702 1.3053+-0.1876 might be 1.0367x faster polymorphic-get-by-id 3.0854+-0.0707 ? 3.1829+-0.0920 ? might be 1.0316x slower polymorphic-put-by-id 29.7537+-3.0295 ? 30.7596+-1.6062 ? might be 1.0338x slower polymorphic-structure 15.0833+-0.2304 ? 15.5603+-1.0034 ? might be 1.0316x slower polyvariant-monomorphic-get-by-id 8.8531+-0.8326 8.4688+-0.1626 might be 1.0454x faster proto-getter-access 10.0885+-0.1768 10.0450+-0.2142 put-by-id-replace-and-transition 8.8181+-0.3488 ? 8.8289+-0.2731 ? put-by-id-slightly-polymorphic 2.8625+-0.0176 2.8037+-0.0662 might be 1.0210x faster put-by-id 13.5565+-0.3939 13.5031+-0.8062 put-by-val-direct 0.5921+-0.0314 0.5714+-0.0133 might be 1.0362x faster put-by-val-large-index-blank-indexing-type 6.1239+-0.7834 ? 7.1712+-1.2868 ? might be 1.1710x slower put-by-val-machine-int 2.6144+-0.0849 ? 2.6367+-0.1562 ? rare-osr-exit-on-local 15.0093+-0.1780 ? 15.7513+-0.9161 ? might be 1.0494x slower register-pressure-from-osr 22.1305+-0.9900 21.7078+-0.2673 might be 1.0195x faster setter 5.1576+-0.0495 ? 5.7961+-0.7765 ? might be 1.1238x slower simple-activation-demo 25.6074+-0.7605 ? 26.0972+-1.6388 ? might be 1.0191x slower simple-getter-access 13.1194+-0.9512 12.8645+-0.2830 might be 1.0198x faster simple-poly-call-nested 8.1116+-0.2371 ? 8.2921+-0.1099 ? might be 1.0223x slower simple-poly-call 1.3296+-0.1254 1.3285+-0.0959 sin-boolean 24.0593+-1.8701 23.4427+-1.5779 might be 1.0263x faster sinkable-new-object-dag 70.2107+-1.9180 69.9739+-1.7544 sinkable-new-object-taken 52.1914+-2.9084 ? 54.6195+-3.9451 ? might be 1.0465x slower sinkable-new-object 40.1091+-1.6442 39.7052+-1.3105 might be 1.0102x faster slow-array-profile-convergence 2.7955+-0.1770 2.7048+-0.0918 might be 1.0335x faster slow-convergence 3.2128+-0.1472 ? 3.2174+-0.0485 ? sparse-conditional 1.1125+-0.0203 1.1029+-0.0278 splice-to-remove 16.8130+-0.8996 ? 16.8183+-1.5070 ? string-char-code-at 16.1733+-0.4678 ? 16.2556+-0.6729 ? string-concat-object 2.3987+-0.1789 2.3842+-0.1709 string-concat-pair-object 2.2861+-0.0512 ? 2.3960+-0.1871 ? might be 1.0481x slower string-concat-pair-simple 11.5107+-0.6851 ? 11.5180+-1.0604 ? string-concat-simple 12.1667+-1.1216 11.6713+-0.5500 might be 1.0424x faster string-cons-repeat 8.2025+-0.9493 7.7374+-0.4247 might be 1.0601x faster string-cons-tower 8.7757+-1.0525 8.2312+-0.8040 might be 1.0661x faster string-equality 17.4707+-0.4443 17.4655+-0.4353 string-get-by-val-big-char 7.1091+-0.0829 7.0916+-0.0563 string-get-by-val-out-of-bounds-insane 3.7678+-0.0806 3.7659+-0.0323 string-get-by-val-out-of-bounds 5.2863+-0.0378 5.1980+-0.0714 might be 1.0170x faster string-get-by-val 3.2426+-0.0421 ! 3.3960+-0.0700 ! definitely 1.0473x slower string-hash 2.0335+-0.0350 2.0141+-0.0335 string-long-ident-equality 14.2249+-0.0780 ? 14.6000+-0.9823 ? might be 1.0264x slower string-out-of-bounds 15.1638+-0.7786 15.0729+-0.5973 string-repeat-arith 35.8065+-0.6544 34.5970+-1.6211 might be 1.0350x faster string-sub 64.2106+-3.0903 ? 68.0066+-4.7424 ? might be 1.0591x slower string-test 2.9296+-0.1078 ? 2.9728+-0.0301 ? might be 1.0147x slower string-var-equality 31.5003+-1.6464 30.9654+-2.2979 might be 1.0173x faster structure-hoist-over-transitions 2.5172+-0.1064 ? 2.5671+-0.1308 ? might be 1.0198x slower substring-concat-weird 40.2897+-2.3720 39.0346+-1.2074 might be 1.0322x faster substring-concat 40.6621+-1.1766 ? 40.9687+-1.1856 ? substring 47.2465+-2.6712 ? 47.5990+-3.3464 ? switch-char-constant 2.7070+-0.0708 ? 2.7304+-0.0460 ? switch-char 6.3708+-0.5926 ? 7.4512+-1.0025 ? might be 1.1696x slower switch-constant 8.0514+-0.1773 ? 8.1058+-0.3141 ? switch-string-basic-big-var 15.3012+-0.2235 15.0091+-0.2259 might be 1.0195x faster switch-string-basic-big 13.9205+-0.1883 ? 14.5605+-1.4762 ? might be 1.0460x slower switch-string-basic-var 14.5863+-0.1473 ? 15.3944+-1.1663 ? might be 1.0554x slower switch-string-basic 14.8356+-2.0343 13.8768+-1.3520 might be 1.0691x faster switch-string-big-length-tower-var 20.2087+-1.2477 ? 21.8391+-1.8508 ? might be 1.0807x slower switch-string-length-tower-var 15.6849+-1.8050 ? 16.3818+-1.8776 ? might be 1.0444x slower switch-string-length-tower 12.7873+-0.3483 ? 13.8520+-1.8304 ? might be 1.0833x slower switch-string-short 13.6672+-1.6745 ? 14.0314+-1.8732 ? might be 1.0266x slower switch 12.1479+-0.4476 ? 12.2706+-0.3697 ? might be 1.0101x slower tear-off-arguments-simple 1.9020+-0.0494 ! 3.2655+-0.1397 ! definitely 1.7168x slower tear-off-arguments 2.8190+-0.0892 ! 4.4437+-0.1124 ! definitely 1.5763x slower temporal-structure 13.3230+-1.1906 12.5909+-0.6099 might be 1.0581x faster to-int32-boolean 14.0263+-0.9309 13.5819+-0.1317 might be 1.0327x faster undefined-property-access 384.9192+-2.7036 ? 387.3313+-9.4170 ? undefined-test 3.0173+-0.0381 ? 3.0363+-0.0199 ? unprofiled-licm 23.0422+-0.7026 ? 23.5144+-1.1849 ? might be 1.0205x slower varargs-call 15.4869+-0.9142 15.0684+-0.9673 might be 1.0278x faster varargs-construct-inline 26.7935+-0.5220 ^ 21.9454+-1.1826 ^ definitely 1.2209x faster varargs-construct 53.0739+-1.2479 ^ 31.1738+-0.4344 ^ definitely 1.7025x faster varargs-inline 8.4015+-0.1392 ! 8.9392+-0.1207 ! definitely 1.0640x slower varargs-strict-mode 15.5480+-1.1111 ^ 9.6472+-0.2742 ^ definitely 1.6117x faster varargs 15.3287+-1.4077 ^ 9.6080+-0.2812 ^ definitely 1.5954x faster weird-inlining-const-prop 2.4106+-0.1055 2.3115+-0.1673 might be 1.0429x faster <geometric> 8.4082+-0.0184 ! 8.5859+-0.0409 ! definitely 1.0211x slower TipOfTree VarOffset AsmBench: bigfib.cpp 496.4717+-3.9151 492.5236+-2.5813 cray.c 432.0098+-2.9190 431.3133+-2.2351 dry.c 490.1071+-2.8983 ? 491.6430+-3.3350 ? FloatMM.c 725.7777+-1.6946 ? 727.5629+-2.1993 ? gcc-loops.cpp 4260.0028+-16.2461 ? 4262.3150+-14.4032 ? n-body.c 987.6784+-5.2987 987.2420+-4.4006 Quicksort.c 444.7657+-2.8900 ? 446.0485+-9.6435 ? stepanov_container.cpp 3585.8910+-26.4753 3571.6336+-24.7367 Towers.c 268.1252+-1.3207 ? 270.2616+-7.8826 ? <geometric> 801.9935+-2.5337 ? 802.2153+-2.8206 ? might be 1.0003x slower TipOfTree VarOffset CompressionBench: huffman 388.0924+-4.1394 ^ 356.9426+-5.2978 ^ definitely 1.0873x faster arithmetic-simple 405.9687+-3.5749 401.5917+-2.6309 might be 1.0109x faster arithmetic-precise 302.5660+-5.4995 ? 305.2662+-3.9765 ? arithmetic-complex-precise 305.9331+-4.1077 300.8577+-4.2975 might be 1.0169x faster arithmetic-precise-order-0 440.6399+-5.8884 431.3855+-5.4651 might be 1.0215x faster arithmetic-precise-order-1 342.5976+-4.7162 ^ 327.4685+-3.9371 ^ definitely 1.0462x faster arithmetic-precise-order-2 381.4177+-5.6730 ^ 367.3711+-6.8823 ^ definitely 1.0382x faster arithmetic-simple-order-1 432.7577+-5.0733 ^ 421.5168+-5.1200 ^ definitely 1.0267x faster arithmetic-simple-order-2 487.1242+-7.2715 ^ 472.7613+-6.3532 ^ definitely 1.0304x faster lz-string 330.5444+-8.2041 326.0296+-5.7456 might be 1.0138x faster <geometric> 377.3027+-1.0633 ^ 367.0321+-2.5581 ^ definitely 1.0280x faster TipOfTree VarOffset TipOfTree VarOffset Geomean of preferred means: <scaled-result> 63.9458+-0.3582 63.5785+-0.1472 might be 1.0058x faster
Created attachment 249189 [details] some more fixing to get to net speed-up
I fixed the dead-access-to-captured-variable-preceded-by-a-live-store regression. It's the good old DCE on GetClosureVar issue.
Created attachment 249204 [details] 64-bit is complete Now I just need to port to 32-bit. Latest perf results: Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r181829) "VarOffset" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r181829) Collected 6 samples per benchmark/VM, with 6 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. TipOfTree VarOffset SunSpider: 3d-cube 4.9322+-0.0829 4.8220+-0.0660 might be 1.0229x faster 3d-morph 5.6054+-0.1023 5.5866+-0.0511 3d-raytrace 6.3923+-0.1216 6.2673+-0.0913 might be 1.0199x faster access-binary-trees 2.0755+-0.0593 ? 2.0907+-0.1154 ? access-fannkuch 6.0940+-0.1460 ? 6.1069+-0.1212 ? access-nbody 2.9783+-0.2156 2.9429+-0.0406 might be 1.0120x faster access-nsieve 3.3505+-0.1278 3.2049+-0.1732 might be 1.0454x faster bitops-3bit-bits-in-byte 1.5922+-0.1359 ? 1.6077+-0.1602 ? bitops-bits-in-byte 3.5235+-0.0331 ^ 3.3596+-0.0257 ^ definitely 1.0488x faster bitops-bitwise-and 2.1643+-0.0466 2.1202+-0.0258 might be 1.0208x faster bitops-nsieve-bits 3.9432+-0.2749 3.8155+-0.0710 might be 1.0335x faster controlflow-recursive 2.2068+-0.1200 ? 2.3831+-0.5845 ? might be 1.0799x slower crypto-aes 4.2832+-0.3481 ? 4.3275+-0.5604 ? might be 1.0103x slower crypto-md5 2.4620+-0.0501 2.4489+-0.0615 crypto-sha1 2.7450+-0.2418 2.6227+-0.1691 might be 1.0466x faster date-format-tofte 9.3693+-0.1013 ? 9.3881+-0.2130 ? date-format-xparb 5.6176+-0.2971 5.5451+-0.2958 might be 1.0131x faster math-cordic 3.2082+-0.0209 3.1333+-0.0586 might be 1.0239x faster math-partial-sums 5.1289+-0.1111 ? 5.3451+-0.8355 ? might be 1.0422x slower math-spectral-norm 1.9527+-0.0661 1.9515+-0.0742 regexp-dna 8.0590+-1.5616 7.2937+-0.2863 might be 1.1049x faster string-base64 4.5945+-0.2107 ? 4.7689+-0.4900 ? might be 1.0380x slower string-fasta 6.8561+-0.6618 6.6880+-0.4356 might be 1.0251x faster string-tagcloud 9.6437+-0.1189 ? 9.7797+-0.4374 ? might be 1.0141x slower string-unpack-code 19.6305+-0.3922 ? 20.2646+-0.9095 ? might be 1.0323x slower string-validate-input 4.9310+-0.0838 ? 4.9378+-0.2779 ? <arithmetic> 5.1285+-0.0567 5.1078+-0.0777 might be 1.0040x faster TipOfTree VarOffset LongSpider: 3d-cube 1099.5932+-18.8077 ? 1107.8401+-8.0775 ? 3d-morph 1533.2281+-5.2830 1529.9788+-3.2187 3d-raytrace 730.4418+-5.7994 ? 735.4867+-5.0575 ? access-binary-trees 992.5365+-4.9261 ? 996.8359+-5.8294 ? access-fannkuch 341.5399+-13.9172 ? 343.8509+-9.0972 ? access-nbody 612.6711+-2.0265 ? 618.3440+-5.2635 ? access-nsieve 873.1607+-3.8562 862.0680+-8.3486 might be 1.0129x faster bitops-3bit-bits-in-byte 47.1628+-2.6914 44.9156+-0.9330 might be 1.0500x faster bitops-bits-in-byte 103.7617+-3.6879 ? 104.6177+-3.4075 ? bitops-nsieve-bits 692.2736+-2.6719 ? 697.0440+-5.9813 ? controlflow-recursive 499.5885+-6.6634 489.8137+-15.1744 might be 1.0200x faster crypto-aes 711.3757+-10.4680 ? 713.3570+-11.2124 ? crypto-md5 550.1893+-8.2335 548.1588+-6.9722 crypto-sha1 593.0117+-5.2151 ? 600.8757+-9.6863 ? might be 1.0133x slower date-format-tofte 768.2397+-10.6766 765.1396+-12.3215 date-format-xparb 774.8064+-21.2522 733.7255+-22.6895 might be 1.0560x faster math-cordic 592.9007+-1.9488 ? 593.3338+-2.1848 ? math-partial-sums 510.7029+-3.8226 509.4083+-5.2377 math-spectral-norm 565.1184+-1.2991 ? 567.0823+-4.3847 ? string-base64 363.4379+-2.5350 363.2817+-5.6761 string-fasta 423.6615+-4.4023 ? 427.4296+-7.1136 ? string-tagcloud 217.9506+-6.0811 216.2365+-3.1168 <geometric> 505.1614+-2.1126 503.4029+-2.0859 might be 1.0035x faster TipOfTree VarOffset V8Spider: crypto 54.9220+-0.9519 54.4576+-1.9372 deltablue 93.4203+-6.9801 89.4571+-7.3775 might be 1.0443x faster earley-boyer 42.2155+-0.4651 41.9905+-0.8088 raytrace 42.0376+-6.2034 38.6932+-1.4829 might be 1.0864x faster regexp 68.8643+-1.5642 68.3782+-1.3744 richards 79.9442+-3.2038 79.5358+-1.8252 splay 38.7885+-2.3418 38.3063+-1.6813 might be 1.0126x faster <geometric> 56.8765+-1.6118 55.6006+-1.0697 might be 1.0229x faster TipOfTree VarOffset Octane: encrypt 0.20201+-0.00071 ? 0.20326+-0.00097 ? decrypt 3.59199+-0.04997 ? 3.60693+-0.04090 ? deltablue x2 0.20657+-0.00238 0.20544+-0.00134 earley 0.69826+-0.00641 ^ 0.56099+-0.00400 ^ definitely 1.2447x faster boyer 5.75250+-0.02877 5.69160+-0.03383 might be 1.0107x faster navier-stokes x2 5.19088+-0.00586 ? 5.21957+-0.04326 ? raytrace x2 1.24228+-0.04558 ? 1.26245+-0.04569 ? might be 1.0162x slower richards x2 0.12375+-0.00133 0.12239+-0.00088 might be 1.0111x faster splay x2 0.38303+-0.00266 ? 0.38364+-0.00109 ? regexp x2 33.19037+-0.17983 33.04567+-0.13597 pdfjs x2 45.57166+-0.92850 45.04559+-0.54423 might be 1.0117x faster mandreel x2 50.25440+-0.21808 50.01300+-0.43212 gbemu x2 41.49870+-2.33416 39.55027+-0.66128 might be 1.0493x faster closure 0.56376+-0.00300 0.56128+-0.00288 jquery 7.15211+-0.06428 7.12430+-0.13150 box2d x2 12.74157+-0.18356 ^ 12.24525+-0.11695 ^ definitely 1.0405x faster zlib x2 388.76792+-14.06640 382.76324+-15.36088 might be 1.0157x faster typescript x2 820.06462+-14.03307 ? 820.55098+-17.47605 ? <geometric> 6.75245+-0.04271 ^ 6.64982+-0.02445 ^ definitely 1.0154x faster TipOfTree VarOffset Kraken: ai-astar 266.617+-2.845 262.981+-1.481 might be 1.0138x faster audio-beat-detection 110.622+-0.786 ? 113.091+-6.672 ? might be 1.0223x slower audio-dft 148.771+-3.253 ? 149.312+-3.971 ? audio-fft 88.416+-2.642 86.316+-2.728 might be 1.0243x faster audio-oscillator 208.598+-2.652 ? 210.125+-3.856 ? imaging-darkroom 106.197+-1.851 105.496+-2.055 imaging-desaturate 63.311+-1.481 ? 63.552+-1.931 ? imaging-gaussian-blur 114.238+-2.245 112.267+-0.976 might be 1.0176x faster json-parse-financial 48.009+-1.351 ^ 44.773+-1.002 ^ definitely 1.0723x faster json-stringify-tinderbox 55.308+-0.758 ? 57.647+-1.966 ? might be 1.0423x slower stanford-crypto-aes 60.794+-2.772 59.802+-0.854 might be 1.0166x faster stanford-crypto-ccm 54.928+-7.694 52.555+-4.379 might be 1.0451x faster stanford-crypto-pbkdf2 167.915+-1.908 167.325+-4.431 stanford-crypto-sha256-iterative 55.339+-1.751 ? 55.454+-2.057 ? <arithmetic> 110.647+-0.864 110.050+-1.061 might be 1.0054x faster TipOfTree VarOffset JSRegress: abs-boolean 2.6134+-0.0238 ? 2.6195+-0.0693 ? adapt-to-double-divide 16.8341+-0.3381 16.6994+-0.3995 aliased-arguments-getbyval 0.8483+-0.0394 ! 1.1965+-0.0689 ! definitely 1.4106x slower allocate-big-object 2.5850+-0.0626 ? 2.6624+-0.0998 ? might be 1.0299x slower arguments-named-and-reflective 9.2603+-0.1054 ! 12.5426+-0.4376 ! definitely 1.3544x slower arguments-out-of-bounds 19.4351+-2.0528 ^ 14.8372+-0.3443 ^ definitely 1.3099x faster arguments-strict-mode 9.4945+-1.7099 ? 11.4707+-0.3131 ? might be 1.2081x slower arguments 7.8692+-0.2404 ! 10.1773+-0.2612 ! definitely 1.2933x slower arity-mismatch-inlining 0.7992+-0.0245 ? 0.8063+-0.0130 ? array-access-polymorphic-structure 6.6423+-0.1320 ? 7.2634+-1.0628 ? might be 1.0935x slower array-nonarray-polymorhpic-access 34.8418+-0.3918 ? 35.3311+-0.7382 ? might be 1.0140x slower array-prototype-every 89.4722+-1.9853 86.4930+-1.5157 might be 1.0344x faster array-prototype-forEach 97.8055+-31.9496 84.4849+-1.4313 might be 1.1577x faster array-prototype-map 96.8150+-3.3996 95.2338+-1.6603 might be 1.0166x faster array-prototype-some 89.2660+-1.3272 88.2330+-3.5067 might be 1.0117x faster array-splice-contiguous 42.2039+-2.0148 41.8460+-0.5215 array-with-double-add 4.1806+-0.0880 4.0797+-0.0472 might be 1.0247x faster array-with-double-increment 3.2430+-0.2234 ? 3.2487+-0.1011 ? array-with-double-mul-add 4.9968+-0.1152 ? 5.0650+-0.0517 ? might be 1.0136x slower array-with-double-sum 3.2604+-0.1060 3.2446+-0.0367 array-with-int32-add-sub 6.7792+-0.0889 6.7577+-0.0217 array-with-int32-or-double-sum 3.3442+-0.0690 ? 3.4225+-0.1615 ? might be 1.0234x slower ArrayBuffer-DataView-alloc-large-long-lived 34.1026+-2.1419 33.9862+-1.5561 ArrayBuffer-DataView-alloc-long-lived 16.2467+-1.9408 15.2227+-1.5025 might be 1.0673x faster ArrayBuffer-Int32Array-byteOffset 3.5273+-0.0579 ? 3.5407+-0.3014 ? ArrayBuffer-Int8Array-alloc-large-long-lived 32.6386+-1.0033 ? 33.1767+-1.2276 ? might be 1.0165x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 22.1071+-0.2440 ! 25.0457+-2.4593 ! definitely 1.1329x slower ArrayBuffer-Int8Array-alloc-long-lived 15.3454+-1.2927 15.0369+-2.0725 might be 1.0205x faster ArrayBuffer-Int8Array-alloc 11.3002+-1.0332 ? 12.0415+-2.0751 ? might be 1.0656x slower asmjs_bool_bug 7.6884+-0.1452 ? 7.8267+-0.3150 ? might be 1.0180x slower assign-custom-setter-polymorphic 3.1584+-0.0738 ^ 2.9384+-0.0447 ^ definitely 1.0749x faster assign-custom-setter 4.3654+-0.0576 4.1737+-0.2912 might be 1.0459x faster basic-set 8.3012+-0.2292 ? 8.3519+-0.4361 ? big-int-mul 3.9632+-0.0993 3.9377+-0.0565 boolean-test 3.0556+-0.0307 3.0287+-0.0484 branch-fold 3.6721+-0.0550 ? 3.6820+-0.0339 ? by-val-generic 8.0747+-0.4244 ? 8.1587+-0.4367 ? might be 1.0104x slower call-spread-apply 16.3509+-0.5089 ! 31.5406+-1.6610 ! definitely 1.9290x slower call-spread-call 6.1589+-0.1679 ! 25.1263+-1.5951 ! definitely 4.0797x slower captured-assignments 0.4595+-0.0154 0.4546+-0.0103 might be 1.0107x faster cast-int-to-double 5.2808+-0.0299 5.2665+-0.0352 cell-argument 9.1844+-1.6701 8.6917+-0.2191 might be 1.0567x faster cfg-simplify 2.9244+-0.0413 2.8748+-0.1096 might be 1.0172x faster chain-getter-access 10.1655+-0.1452 10.1057+-0.2654 cmpeq-obj-to-obj-other 11.0281+-1.2083 ? 11.3328+-1.2613 ? might be 1.0276x slower constant-test 4.9730+-0.1024 4.9186+-0.0229 might be 1.0111x faster DataView-custom-properties 40.2690+-1.2623 39.0569+-1.5486 might be 1.0310x faster delay-tear-off-arguments-strictmode 23.0118+-2.6301 ^ 13.4137+-0.3394 ^ definitely 1.7155x faster deltablue-varargs 181.6470+-2.2595 ! 199.4470+-2.0269 ! definitely 1.0980x slower destructuring-arguments 5.1739+-0.0185 ! 16.8056+-0.7282 ! definitely 3.2482x slower destructuring-swap 5.1157+-0.0886 ^ 4.9877+-0.0150 ^ definitely 1.0257x faster direct-arguments-getbyval 0.9358+-0.0600 ! 1.2183+-0.0840 ! definitely 1.3019x slower div-boolean-double 5.1771+-0.0100 ? 5.2090+-0.0476 ? div-boolean 7.8059+-0.1361 ? 7.8854+-0.2034 ? might be 1.0102x slower double-get-by-val-out-of-bounds 4.7887+-0.7709 4.4100+-0.0672 might be 1.0859x faster double-pollution-getbyval 8.8682+-0.1201 8.8135+-0.0419 double-pollution-putbyoffset 4.1056+-0.0909 ? 4.1220+-0.0360 ? double-to-int32-typed-array-no-inline 2.2209+-0.0567 ? 2.2920+-0.1305 ? might be 1.0320x slower double-to-int32-typed-array 1.9408+-0.0743 ? 1.9746+-0.1372 ? might be 1.0174x slower double-to-uint32-typed-array-no-inline 2.3682+-0.1220 2.3056+-0.0636 might be 1.0271x faster double-to-uint32-typed-array 1.9592+-0.0249 ? 1.9690+-0.0426 ? elidable-new-object-dag 42.6536+-1.6876 ? 44.0400+-1.8564 ? might be 1.0325x slower elidable-new-object-roflcopter 48.2579+-4.7490 46.5518+-1.3365 might be 1.0366x faster elidable-new-object-then-call 40.0157+-1.3151 39.2323+-1.0546 might be 1.0200x faster elidable-new-object-tree 45.2661+-1.2491 ? 46.7212+-1.2318 ? might be 1.0321x slower empty-string-plus-int 5.6666+-0.7371 5.4163+-0.1743 might be 1.0462x faster emscripten-cube2hash 40.7569+-2.6433 39.5957+-1.1918 might be 1.0293x faster exit-length-on-plain-object 14.1452+-0.7660 14.0780+-0.5585 external-arguments-getbyval 1.3350+-0.0590 ^ 1.1825+-0.0473 ^ definitely 1.1290x faster external-arguments-putbyval 2.0893+-0.1546 ? 2.2450+-0.0438 ? might be 1.0745x slower fixed-typed-array-storage-var-index 1.2138+-0.0311 1.2108+-0.0310 fixed-typed-array-storage 0.8584+-0.0339 ! 0.9486+-0.0546 ! definitely 1.1050x slower Float32Array-matrix-mult 4.3046+-0.1262 ? 4.5880+-0.4238 ? might be 1.0658x slower Float32Array-to-Float64Array-set 56.9635+-1.6628 ^ 53.4380+-0.6063 ^ definitely 1.0660x faster Float64Array-alloc-long-lived 72.9387+-2.0272 72.4755+-1.6346 Float64Array-to-Int16Array-set 68.7090+-1.0389 ? 69.6130+-2.2856 ? might be 1.0132x slower fold-double-to-int 15.2243+-0.3107 ? 16.0367+-1.3148 ? might be 1.0534x slower fold-get-by-id-to-multi-get-by-offset-rare-int 9.5730+-0.4440 ? 10.2976+-0.8383 ? might be 1.0757x slower fold-get-by-id-to-multi-get-by-offset 10.1925+-1.0248 9.4966+-0.8874 might be 1.0733x faster fold-multi-get-by-offset-to-get-by-offset 9.1421+-1.1607 8.9860+-0.9770 might be 1.0174x faster fold-multi-get-by-offset-to-poly-get-by-offset 9.3510+-0.8878 8.7582+-0.7896 might be 1.0677x faster fold-multi-put-by-offset-to-poly-put-by-offset 8.7606+-0.7929 8.1433+-0.6423 might be 1.0758x faster fold-multi-put-by-offset-to-put-by-offset 5.0073+-1.1878 4.2605+-0.5537 might be 1.1753x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.2568+-0.4382 ? 9.5265+-0.1526 ? might be 1.0291x slower fold-put-by-id-to-multi-put-by-offset 9.2849+-0.8846 ? 9.4014+-0.7359 ? might be 1.0126x slower fold-put-structure 4.6308+-0.9609 ! 6.9747+-0.2159 ! definitely 1.5062x slower for-of-iterate-array-entries 4.4991+-0.0584 ? 4.7219+-0.5667 ? might be 1.0495x slower for-of-iterate-array-keys 3.7204+-0.0764 ? 4.2790+-1.3859 ? might be 1.1501x slower for-of-iterate-array-values 3.7830+-0.2991 3.7100+-0.1467 might be 1.0197x faster fround 20.3368+-0.5122 20.0145+-0.3672 might be 1.0161x faster ftl-library-inlining-dataview 80.7778+-1.1799 ! 86.0890+-2.7822 ! definitely 1.0658x slower ftl-library-inlining 76.9004+-16.5954 67.4126+-1.3813 might be 1.1407x faster function-dot-apply 1.4868+-0.0318 ! 1.8031+-0.0241 ! definitely 1.2127x slower function-test 3.3556+-0.0290 ^ 3.2678+-0.0519 ^ definitely 1.0269x faster function-with-eval 130.8863+-4.9127 ^ 94.2814+-4.1896 ^ definitely 1.3883x faster gcse-poly-get-less-obvious 18.9486+-1.0414 ? 19.0500+-1.3710 ? gcse-poly-get 21.0500+-1.6462 ? 22.1683+-2.2014 ? might be 1.0531x slower gcse 4.2902+-0.0379 ? 4.3122+-0.0756 ? get-by-id-bimorphic-check-structure-elimination-simple 2.7406+-0.0241 ! 2.7941+-0.0076 ! definitely 1.0195x slower get-by-id-bimorphic-check-structure-elimination 6.1735+-0.2907 6.0441+-0.0524 might be 1.0214x faster get-by-id-chain-from-try-block 8.4884+-0.4804 6.9095+-1.1776 might be 1.2285x faster get-by-id-check-structure-elimination 5.1051+-0.0639 5.0326+-0.0257 might be 1.0144x faster get-by-id-proto-or-self 18.5420+-1.0327 17.8942+-0.8348 might be 1.0362x faster get-by-id-quadmorphic-check-structure-elimination-simple 2.8949+-0.0192 ? 3.3192+-0.9898 ? might be 1.1466x slower get-by-id-self-or-proto 18.8424+-0.9316 ^ 17.2989+-0.2618 ^ definitely 1.0892x faster get-by-val-out-of-bounds 4.3048+-0.0764 4.2753+-0.0287 get_callee_monomorphic 3.6982+-0.2145 3.5462+-0.0450 might be 1.0429x faster get_callee_polymorphic 3.6163+-0.0675 3.5960+-0.4092 getter-no-activation 4.8656+-0.5498 4.6007+-0.4500 might be 1.0576x faster getter-richards 126.3455+-6.6105 ? 127.2507+-5.4982 ? getter 5.0960+-0.0893 ! 5.8821+-0.6791 ! definitely 1.1542x slower global-var-const-infer-fire-from-opt 0.8999+-0.1624 ? 0.9091+-0.1215 ? might be 1.0103x slower global-var-const-infer 0.8570+-0.0981 ? 0.9151+-0.0823 ? might be 1.0678x slower HashMap-put-get-iterate-keys 26.3931+-0.2500 ? 26.5310+-0.2715 ? HashMap-put-get-iterate 26.5174+-0.4078 26.3641+-0.5456 HashMap-string-put-get-iterate 27.6614+-1.6414 ? 28.1718+-1.5010 ? might be 1.0185x slower hoist-make-rope 11.7453+-0.8244 ? 12.4696+-0.5823 ? might be 1.0617x slower hoist-poly-check-structure-effectful-loop 4.9924+-0.0738 4.9828+-0.0639 hoist-poly-check-structure 3.7218+-0.0905 ? 3.7247+-0.0758 ? imul-double-only 8.6851+-0.2823 ? 9.3796+-2.2927 ? might be 1.0800x slower imul-int-only 10.0437+-0.6656 ? 10.1278+-0.7189 ? imul-mixed 8.6794+-0.2262 8.3492+-0.5378 might be 1.0395x faster in-four-cases 18.8326+-0.2947 ? 18.8819+-0.2064 ? in-one-case-false 10.1109+-0.4493 9.9975+-0.4747 might be 1.0113x faster in-one-case-true 9.9863+-0.3878 ? 10.2507+-0.6581 ? might be 1.0265x slower in-two-cases 11.2146+-0.9356 10.2672+-0.2806 might be 1.0923x faster indexed-properties-in-objects 2.9641+-0.1250 2.9552+-0.0927 infer-closure-const-then-mov-no-inline 3.7647+-0.1142 ^ 3.5157+-0.0226 ^ definitely 1.0708x faster infer-closure-const-then-mov 19.2256+-1.1681 ^ 17.5574+-0.3873 ^ definitely 1.0950x faster infer-closure-const-then-put-to-scope-no-inline 11.7342+-0.3066 11.5922+-0.0797 might be 1.0122x faster infer-closure-const-then-put-to-scope 22.9222+-1.3242 ? 23.0011+-0.9666 ? infer-closure-const-then-reenter-no-inline 49.6650+-1.7602 48.7602+-0.9652 might be 1.0186x faster infer-closure-const-then-reenter 23.1630+-1.9191 ! 124.7979+-2.0891 ! definitely 5.3878x slower infer-constant-global-property 32.1585+-2.2670 31.5799+-1.6037 might be 1.0183x faster infer-constant-property 2.7290+-0.0548 2.7266+-0.0185 infer-one-time-closure-ten-vars 12.1161+-0.2151 ? 12.6298+-1.0080 ? might be 1.0424x slower infer-one-time-closure-two-vars 11.9877+-0.2690 11.9412+-0.1669 infer-one-time-closure 11.6693+-0.2053 ? 11.8276+-0.3301 ? might be 1.0136x slower infer-one-time-deep-closure 21.5544+-1.5390 ? 22.0714+-1.2043 ? might be 1.0240x slower inline-arguments-access 1.4097+-0.0432 ! 4.2397+-0.0864 ! definitely 3.0076x slower inline-arguments-aliased-access 1.8209+-0.2001 ! 4.2587+-0.0750 ! definitely 2.3388x slower inline-arguments-local-escape 12.7026+-0.2234 ^ 4.4391+-0.1869 ^ definitely 2.8615x faster inline-get-scoped-var 4.5551+-0.0941 ^ 4.1508+-0.0218 ^ definitely 1.0974x faster inlined-put-by-id-transition 10.3675+-0.3588 10.3073+-0.2461 int-or-other-abs-then-get-by-val 4.9668+-0.0507 ? 6.2390+-3.2740 ? might be 1.2561x slower int-or-other-abs-zero-then-get-by-val 17.4902+-0.9697 16.9183+-0.5334 might be 1.0338x faster int-or-other-add-then-get-by-val 4.2985+-0.0321 ? 4.3237+-0.1038 ? int-or-other-add 5.3547+-0.1037 5.3397+-0.0584 int-or-other-div-then-get-by-val 4.1884+-0.0670 ? 4.2417+-0.0260 ? might be 1.0127x slower int-or-other-max-then-get-by-val 4.3757+-0.0501 ? 4.3853+-0.0215 ? int-or-other-min-then-get-by-val 5.1460+-1.6010 4.5995+-0.4096 might be 1.1188x faster int-or-other-mod-then-get-by-val 3.9473+-0.1702 3.8833+-0.0650 might be 1.0165x faster int-or-other-mul-then-get-by-val 3.9844+-0.0575 ? 4.0071+-0.0312 ? int-or-other-neg-then-get-by-val 4.6301+-0.0308 ? 4.7502+-0.2201 ? might be 1.0259x slower int-or-other-neg-zero-then-get-by-val 17.9000+-0.9966 ^ 16.6512+-0.1864 ^ definitely 1.0750x faster int-or-other-sub-then-get-by-val 4.5255+-0.2517 4.3795+-0.0919 might be 1.0333x faster int-or-other-sub 3.4812+-0.0196 ? 3.5120+-0.0687 ? int-overflow-local 4.2854+-0.0426 ? 4.2913+-0.0189 ? Int16Array-alloc-long-lived 50.2827+-1.9775 48.8760+-0.8779 might be 1.0288x faster Int16Array-bubble-sort-with-byteLength 22.7097+-1.9971 20.7474+-0.6605 might be 1.0946x faster Int16Array-bubble-sort 24.7115+-2.6363 21.9732+-0.6674 might be 1.1246x faster Int16Array-load-int-mul 1.4602+-0.0139 ? 1.4648+-0.0182 ? Int16Array-to-Int32Array-set 56.7767+-1.4325 ^ 53.0566+-1.5584 ^ definitely 1.0701x faster Int32Array-alloc-large 24.4917+-0.9664 24.4274+-0.8844 Int32Array-alloc-long-lived 56.1503+-1.6227 ? 57.5162+-1.5649 ? might be 1.0243x slower Int32Array-alloc 3.8315+-0.8220 3.7863+-0.6750 might be 1.0120x faster Int32Array-Int8Array-view-alloc 7.2299+-0.7711 6.9867+-0.2527 might be 1.0348x faster int52-spill 6.6330+-0.2100 6.4417+-0.0747 might be 1.0297x faster Int8Array-alloc-long-lived 47.6756+-1.7751 46.9175+-1.7998 might be 1.0162x faster Int8Array-load-with-byteLength 3.3774+-0.1238 ? 3.3810+-0.0553 ? Int8Array-load 3.3066+-0.0587 ? 3.3416+-0.0492 ? might be 1.0106x slower integer-divide 11.3978+-0.2216 ! 11.7187+-0.0352 ! definitely 1.0281x slower integer-modulo 2.0420+-0.0674 ? 2.0611+-0.1029 ? large-int-captured 8.5994+-1.3890 ^ 5.5730+-0.1213 ^ definitely 1.5430x faster large-int-neg 16.5614+-0.8017 ? 16.6049+-0.6922 ? large-int 15.6742+-1.5687 15.3462+-0.7727 might be 1.0214x faster logical-not 4.5735+-0.0982 4.5268+-0.0395 might be 1.0103x faster lots-of-fields 13.6404+-1.2769 13.4590+-0.5453 might be 1.0135x faster make-indexed-storage 3.0646+-0.0957 2.9508+-0.1725 might be 1.0385x faster make-rope-cse 4.9275+-0.5908 4.4522+-0.0762 might be 1.1067x faster marsaglia-larger-ints 35.8543+-0.7562 ? 36.0967+-0.8798 ? marsaglia-osr-entry 23.4738+-0.5318 ? 23.8000+-1.3627 ? might be 1.0139x slower max-boolean 2.4821+-0.0370 ? 2.5269+-0.1122 ? might be 1.0181x slower method-on-number 17.1829+-0.4269 16.8915+-0.1512 might be 1.0173x faster min-boolean 2.4972+-0.0212 ? 2.5048+-0.0758 ? minus-boolean-double 3.1705+-0.0860 ? 3.2501+-0.3001 ? might be 1.0251x slower minus-boolean 2.3386+-0.0546 ? 2.3494+-0.1351 ? misc-strict-eq 38.9413+-2.4304 ? 38.9895+-2.4499 ? mod-boolean-double 11.0275+-0.1635 10.9366+-0.1813 mod-boolean 7.7996+-0.0422 7.7971+-0.0443 mul-boolean-double 3.6990+-0.0359 ? 3.7956+-0.1064 ? might be 1.0261x slower mul-boolean 2.9364+-0.1520 2.8542+-0.0350 might be 1.0288x faster neg-boolean 3.1689+-0.0551 3.1625+-0.0525 negative-zero-divide 0.4055+-0.1207 0.3531+-0.0329 might be 1.1482x faster negative-zero-modulo 0.3599+-0.0149 0.3544+-0.0194 might be 1.0155x faster negative-zero-negate 0.3284+-0.0124 ? 0.3399+-0.0274 ? might be 1.0349x slower nested-function-parsing 22.2062+-0.8507 ! 36.9431+-1.3168 ! definitely 1.6636x slower new-array-buffer-dead 2.7512+-0.0415 2.7432+-0.0275 new-array-buffer-push 7.2080+-0.6826 ? 7.3595+-0.9622 ? might be 1.0210x slower new-array-dead 12.5413+-0.1278 ? 12.7923+-0.3363 ? might be 1.0200x slower new-array-push 4.0565+-0.4159 3.8265+-0.1089 might be 1.0601x faster number-test 3.0179+-0.0353 2.9963+-0.0453 object-closure-call 5.7078+-0.1180 5.5578+-0.0478 might be 1.0270x faster object-test 3.1122+-0.0334 3.0842+-0.0548 obvious-sink-pathology-taken 146.0320+-1.8495 ? 146.3914+-3.8174 ? obvious-sink-pathology 140.3960+-2.8491 ? 141.1462+-2.6685 ? obviously-elidable-new-object 36.3606+-2.1978 35.4606+-1.8065 might be 1.0254x faster plus-boolean-arith 2.5093+-0.0611 ? 2.6129+-0.1631 ? might be 1.0413x slower plus-boolean-double 3.2774+-0.1586 3.1650+-0.0453 might be 1.0355x faster plus-boolean 2.3748+-0.0584 ? 2.3961+-0.0458 ? poly-chain-access-different-prototypes-simple 3.3625+-0.0624 3.2787+-0.0394 might be 1.0256x faster poly-chain-access-different-prototypes 2.8865+-0.0305 ^ 2.6314+-0.0793 ^ definitely 1.0969x faster poly-chain-access-simpler 3.3075+-0.0442 ^ 3.2541+-0.0086 ^ definitely 1.0164x faster poly-chain-access 2.7977+-0.0873 ^ 2.5788+-0.0462 ^ definitely 1.0849x faster poly-stricteq 57.6060+-1.9568 ? 59.4076+-2.2812 ? might be 1.0313x slower polymorphic-array-call 1.2631+-0.1295 ? 1.3162+-0.1771 ? might be 1.0420x slower polymorphic-get-by-id 3.4470+-0.8080 3.1343+-0.0329 might be 1.0998x faster polymorphic-put-by-id 29.0297+-2.4427 28.6517+-2.0893 might be 1.0132x faster polymorphic-structure 14.7771+-0.2421 ? 16.1304+-1.6455 ? might be 1.0916x slower polyvariant-monomorphic-get-by-id 9.2043+-1.3697 8.5014+-0.3233 might be 1.0827x faster proto-getter-access 10.1055+-0.2506 9.9733+-0.0874 might be 1.0133x faster put-by-id-replace-and-transition 8.6346+-0.4310 8.4671+-0.1200 might be 1.0198x faster put-by-id-slightly-polymorphic 2.8078+-0.0235 ? 2.8565+-0.0335 ? might be 1.0174x slower put-by-id 13.5484+-0.4511 13.3976+-0.5546 might be 1.0113x faster put-by-val-direct 0.5607+-0.0135 ? 0.5751+-0.0244 ? might be 1.0257x slower put-by-val-large-index-blank-indexing-type 6.3488+-1.0038 ? 6.3765+-1.0027 ? put-by-val-machine-int 2.6763+-0.2907 2.5453+-0.0506 might be 1.0515x faster rare-osr-exit-on-local 14.9933+-0.2606 ? 15.1348+-0.7003 ? register-pressure-from-osr 21.6321+-0.2933 21.6286+-0.3161 setter 5.1772+-0.0533 ? 5.9417+-0.8346 ? might be 1.1477x slower simple-activation-demo 25.8335+-1.4460 ? 26.1601+-1.4448 ? might be 1.0126x slower simple-getter-access 12.9294+-0.2766 12.6761+-0.1743 might be 1.0200x faster simple-poly-call-nested 7.9867+-0.2172 ? 8.0399+-0.2049 ? simple-poly-call 1.3571+-0.1280 1.3274+-0.0821 might be 1.0224x faster sin-boolean 24.5295+-1.5857 22.9034+-1.6771 might be 1.0710x faster sinkable-new-object-dag 71.0970+-2.5572 ? 75.0895+-11.2712 ? might be 1.0562x slower sinkable-new-object-taken 54.9471+-2.0170 52.6344+-3.3101 might be 1.0439x faster sinkable-new-object 38.5524+-0.4996 ? 39.7959+-1.3177 ? might be 1.0323x slower slow-array-profile-convergence 2.8319+-0.1449 2.7590+-0.2002 might be 1.0265x faster slow-convergence 3.2898+-0.2575 3.2085+-0.0662 might be 1.0253x faster sparse-conditional 1.1044+-0.0272 ? 1.1242+-0.0638 ? might be 1.0179x slower splice-to-remove 17.6886+-1.7977 ? 18.0361+-1.5652 ? might be 1.0196x slower string-char-code-at 15.9563+-0.1496 ? 16.1126+-0.3471 ? string-concat-object 2.5448+-0.2547 2.3940+-0.0789 might be 1.0630x faster string-concat-pair-object 2.3102+-0.0462 ? 2.4920+-0.3354 ? might be 1.0787x slower string-concat-pair-simple 11.2515+-0.4730 ? 11.3640+-0.3183 ? string-concat-simple 11.3278+-0.2604 ? 11.6975+-0.3836 ? might be 1.0326x slower string-cons-repeat 8.8104+-0.8822 8.3778+-1.2087 might be 1.0516x faster string-cons-tower 7.8871+-0.5937 ? 8.8715+-1.1701 ? might be 1.1248x slower string-equality 17.3897+-0.3051 ? 17.5713+-0.7308 ? might be 1.0104x slower string-get-by-val-big-char 7.3069+-0.5896 7.1968+-0.1837 might be 1.0153x faster string-get-by-val-out-of-bounds-insane 3.8836+-0.1897 3.7209+-0.0718 might be 1.0437x faster string-get-by-val-out-of-bounds 5.2902+-0.1587 5.2415+-0.1578 string-get-by-val 3.3165+-0.0381 ? 3.3197+-0.0375 ? string-hash 2.0101+-0.0237 ? 2.0215+-0.0759 ? string-long-ident-equality 14.6682+-0.7678 14.6016+-0.9477 string-out-of-bounds 15.0221+-0.4184 ? 15.0715+-0.2482 ? string-repeat-arith 32.4701+-2.8863 ? 32.7882+-3.3844 ? string-sub 66.7207+-3.4135 64.1823+-4.1428 might be 1.0395x faster string-test 3.0544+-0.1758 2.9148+-0.0557 might be 1.0479x faster string-var-equality 30.3318+-0.7438 ? 30.9028+-1.7960 ? might be 1.0188x slower structure-hoist-over-transitions 2.4830+-0.0744 ? 2.5499+-0.0550 ? might be 1.0270x slower substring-concat-weird 38.3948+-1.4746 38.3127+-0.9350 substring-concat 40.9347+-1.0875 ? 41.4057+-1.7997 ? might be 1.0115x slower substring 46.1167+-1.8244 46.0829+-1.0231 switch-char-constant 2.7697+-0.1437 2.7017+-0.0406 might be 1.0252x faster switch-char 7.0078+-0.9817 ? 7.0490+-0.9419 ? switch-constant 8.0015+-0.1495 ? 8.2244+-0.3612 ? might be 1.0279x slower switch-string-basic-big-var 15.5976+-1.3407 ? 15.7041+-1.3879 ? switch-string-basic-big 15.2166+-1.7843 ? 15.5303+-1.7179 ? might be 1.0206x slower switch-string-basic-var 15.5915+-1.6979 15.4572+-1.6058 switch-string-basic 14.4169+-1.7513 14.2412+-1.3330 might be 1.0123x faster switch-string-big-length-tower-var 20.4764+-1.3866 ? 20.7707+-1.7496 ? might be 1.0144x slower switch-string-length-tower-var 15.3137+-1.4212 15.0702+-1.4293 might be 1.0162x faster switch-string-length-tower 14.1902+-1.5969 13.9610+-1.7949 might be 1.0164x faster switch-string-short 13.1134+-1.5352 ? 13.2250+-1.4575 ? switch 11.9987+-0.4909 11.9448+-0.1919 tear-off-arguments-simple 1.9683+-0.1093 ! 3.2880+-0.0646 ! definitely 1.6705x slower tear-off-arguments 2.7358+-0.0353 ! 4.4778+-0.0407 ! definitely 1.6368x slower temporal-structure 13.3691+-0.7634 12.3902+-0.4092 might be 1.0790x faster to-int32-boolean 13.7756+-0.3323 13.6317+-0.1372 might be 1.0106x faster undefined-property-access 385.6533+-4.8905 ? 386.9056+-5.9248 ? undefined-test 3.0427+-0.0402 3.0312+-0.0808 unprofiled-licm 23.2606+-0.9986 ? 23.4653+-1.4669 ? varargs-call 15.4898+-1.3615 15.3334+-1.0986 might be 1.0102x faster varargs-construct-inline 27.8765+-1.2195 ^ 22.2918+-1.3329 ^ definitely 1.2505x faster varargs-construct 51.5201+-1.4490 ^ 31.3664+-0.6072 ^ definitely 1.6425x faster varargs-inline 8.4744+-0.3846 ! 9.2543+-0.2335 ! definitely 1.0920x slower varargs-strict-mode 14.9556+-0.1343 ^ 9.6023+-0.1573 ^ definitely 1.5575x faster varargs 15.7198+-1.4440 ^ 9.7655+-0.3076 ^ definitely 1.6097x faster weird-inlining-const-prop 2.3235+-0.2193 ? 2.3667+-0.1607 ? might be 1.0186x slower <geometric> 8.4303+-0.0396 ! 8.5720+-0.0204 ! definitely 1.0168x slower TipOfTree VarOffset AsmBench: bigfib.cpp 499.3285+-2.8319 493.5529+-3.0913 might be 1.0117x faster cray.c 436.9455+-4.2079 431.3705+-3.0127 might be 1.0129x faster dry.c 497.9394+-23.2759 482.9404+-8.5413 might be 1.0311x faster FloatMM.c 725.3165+-0.7614 ? 725.8792+-1.9852 ? gcc-loops.cpp 4258.0122+-9.5249 4257.1238+-12.0468 n-body.c 986.7055+-2.9771 984.8636+-2.6517 Quicksort.c 441.3482+-3.6962 ? 443.2793+-8.3154 ? stepanov_container.cpp 3609.7836+-67.0806 3600.6063+-69.8671 Towers.c 270.1456+-8.1850 268.4962+-4.2877 <geometric> 805.2250+-5.2589 799.8830+-4.2311 might be 1.0067x faster TipOfTree VarOffset CompressionBench: huffman 388.7556+-2.1066 ^ 354.4066+-1.0055 ^ definitely 1.0969x faster arithmetic-simple 404.0950+-4.0124 403.0195+-5.4503 arithmetic-precise 306.4482+-3.6261 302.3495+-4.6740 might be 1.0136x faster arithmetic-complex-precise 300.6848+-5.1185 ? 302.2732+-2.8260 ? arithmetic-precise-order-0 438.1735+-8.2073 432.4716+-7.5129 might be 1.0132x faster arithmetic-precise-order-1 338.0214+-3.4332 333.1646+-9.0123 might be 1.0146x faster arithmetic-precise-order-2 385.5922+-4.7846 ^ 373.7564+-6.3989 ^ definitely 1.0317x faster arithmetic-simple-order-1 434.3572+-4.2106 429.5890+-8.4369 might be 1.0111x faster arithmetic-simple-order-2 487.7524+-4.2977 479.7894+-10.7648 might be 1.0166x faster lz-string 332.5707+-18.8302 325.8505+-5.1327 might be 1.0206x faster <geometric> 377.1053+-2.4834 ^ 369.2898+-2.8252 ^ definitely 1.0212x faster TipOfTree VarOffset TipOfTree VarOffset Geomean of preferred means: <scaled-result> 64.0066+-0.1690 ^ 63.5146+-0.2574 ^ definitely 1.0077x faster
Created attachment 249210 [details] started work on 32-bit
Created attachment 249217 [details] almost done with 32-bit Just a few more DFG 32-bit opcodes and this patch is complete.
Created attachment 249219 [details] so close to done I just need to write the code for the super-annoying CreateScopedArguments/CreateOutOfBadArguments slow call argument marshaling for platforms with fewer arguments registers.
Created attachment 249240 [details] the patch BOOM. It's ready for review.
Attachment 249240 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/ValueRecovery.h:30: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111: The parameter name "i" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:43: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318: Should have only a single space after a punctuation in a comment. [whitespace/comments] [5] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72: The parameter name "i" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76: The parameter name "globalObject" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:36: The parameter name "reg" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:37: The parameter name "reg" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:40: The parameter name "origin" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:863: Use 'WTF::move()' instead of 'std::move()'. [runtime/wtf_move] [4] ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:881: Use 'WTF::move()' instead of 'std::move()'. [runtime/wtf_move] [4] ERROR: Source/JavaScriptCore/runtime/JSGlobalObject.cpp:118: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/OutOfBandArguments.h:53: The parameter name "structure" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/GenericArgumentsInlines.h:130: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261: The parameter name "]" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:621: The parameter name "pattern" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:52: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2535: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.cpp:82: Use 'WTF::move()' instead of 'std::move()'. [runtime/wtf_move] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384: Multi line control clauses should use braces. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4482: When wrapping a line, only indent 4 spaces. [whitespace/indent] [3] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4570: Use 'WTF::move()' instead of 'std::move()'. [runtime/wtf_move] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630: The parameter name "locker" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631: The parameter name "locker" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 61 in 249 files If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 249243 [details] compiling on more platforms than ever!
EFL build can be fixed easily on x86_64: (all JSC stress tests pass) - Source/JavaScriptCore/runtime/GenericOffset.h needs a limits.h include - Source/JavaScriptCore/CMakeLists.txt needs runtime/ScopeOffset.cpp too I'll check the ARM Linux build and test soon.
Created attachment 249245 [details] even more build fixes
Attachment 249245 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/ValueRecovery.h:30: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/ScopedArguments.h:111: The parameter name "i" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:43: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318: Should have only a single space after a punctuation in a comment. [whitespace/comments] [5] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:72: The parameter name "i" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.h:76: The parameter name "globalObject" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:36: The parameter name "reg" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:37: The parameter name "reg" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsUtilities.h:40: The parameter name "origin" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:863: Use 'WTF::move()' instead of 'std::move()'. [runtime/wtf_move] [4] ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:881: Use 'WTF::move()' instead of 'std::move()'. [runtime/wtf_move] [4] ERROR: Source/JavaScriptCore/runtime/JSGlobalObject.cpp:118: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/OutOfBandArguments.h:53: The parameter name "structure" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/GenericArgumentsInlines.h:130: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261: The parameter name "]" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:621: The parameter name "pattern" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:52: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2535: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] ERROR: Source/JavaScriptCore/runtime/ScopedArgumentsTable.cpp:82: Use 'WTF::move()' instead of 'std::move()'. [runtime/wtf_move] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384: Multi line control clauses should use braces. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4482: When wrapping a line, only indent 4 spaces. [whitespace/indent] [3] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4570: Use 'WTF::move()' instead of 'std::move()'. [runtime/wtf_move] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630: The parameter name "locker" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:630: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631: The parameter name "locker" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/runtime/SymbolTable.h:631: The parameter name "vm" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 61 in 249 files If any of these errors are false positives, please file a bug against check-webkit-style.
Current set of x86-32 failures: ** The following JSC stress test failures have been introduced: internal-js-tests.yaml/Octane/box2d.js.default-ftl internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-no-access-inlining internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-no-simple-opt internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-osr-validation internal-js-tests.yaml/Octane/box2d.js.ftl-no-cjit-validate internal-js-tests.yaml/Octane/box2d.js.no-cjit-no-access-inlining internal-js-tests.yaml/V8v7/raytrace.js.default-ftl internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-no-access-inlining internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-no-simple-opt internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-osr-validation internal-js-tests.yaml/V8v7/raytrace.js.ftl-no-cjit-validate internal-js-tests.yaml/V8v7/raytrace.js.no-cjit-no-access-inlining regress/script-tests/varargs-construct-inline.js.dfg-eager regress/script-tests/varargs-construct-inline.js.dfg-eager-no-cjit-validate regress/script-tests/varargs-construct-inline.js.ftl-eager regress/script-tests/varargs-construct-inline.js.ftl-eager-no-cjit regress/script-tests/varargs-construct-inline.js.ftl-no-cjit-no-inline-validate v8-v6/v8-raytrace.js.always-trigger-copy-phase v8-v6/v8-raytrace.js.default v8-v6/v8-raytrace.js.default-ftl v8-v6/v8-raytrace.js.dfg-eager v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate v8-v6/v8-raytrace.js.ftl-eager v8-v6/v8-raytrace.js.ftl-eager-no-cjit v8-v6/v8-raytrace.js.ftl-no-cjit-no-inline-validate v8-v6/v8-raytrace.js.ftl-no-cjit-validate v8-v6/v8-raytrace.js.no-cjit-validate-phases v8-v6/v8-raytrace.js.no-llint
Created attachment 249249 [details] very latest Totally works on x86-64, mostly works on x86-32, probably won't build yet on the ARMs.
Attachment 249249 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318: Should have only a single space after a punctuation in a comment. [whitespace/comments] [5] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261: The parameter name "]" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384: Multi line control clauses should use braces. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 35 in 251 files If any of these errors are false positives, please file a bug against check-webkit-style.
(In reply to comment #98) > Created attachment 249249 [details] > very latest > > Totally works on x86-64, mostly works on x86-32, probably won't build yet on > the ARMs. Only a small patch was needed for this version to make ARM Thumb2 Linux happy: @@ -497,6 +513,13 @@ return registerForIndex[index]; } + static GPRReg toArgumentRegister(unsigned index) + { + ASSERT(index < numberOfArgumentRegisters); + static const GPRReg registerForIndex[numberOfArgumentRegisters] = { argumentGPR0, argumentGPR1, argumentGPR2, argumentGPR3 }; + return registerForIndex[index]; + } + static unsigned toIndex(GPRReg reg) { ASSERT(reg != InvalidGPRReg);
(In reply to comment #100) With this buildfix there are only 8 failures on ARM Thumb2 Linux: ** The following JSC stress test failures have been introduced: regress/script-tests/varargs-construct-inline.js.dfg-eager regress/script-tests/varargs-construct-inline.js.dfg-eager-no-cjit-validate v8-v6/v8-raytrace.js.always-trigger-copy-phase v8-v6/v8-raytrace.js.default v8-v6/v8-raytrace.js.dfg-eager v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate v8-v6/v8-raytrace.js.no-cjit-validate-phases v8-v6/v8-raytrace.js.no-llint Results for JSC stress tests: 8 failures found.
Are these worth investigating? call-spread-apply 16.3509+-0.5089 ! 31.5406+-1.6610 ! definitely 1.9290x slower call-spread-call 6.1589+-0.1679 ! 25.1263+-1.5951 ! definitely 4.0797x slower destructuring-arguments 5.1739+-0.0185 ! 16.8056+-0.7282 ! definitely 3.2482x slower direct-arguments-getbyval 0.9358+-0.0600 ! 1.2183+-0.0840 ! definitely 1.3019x slower infer-closure-const-then-reenter 23.1630+-1.9191 ! 124.7979+-2.0891 ! definitely 5.3878x slower inline-arguments-access 1.4097+-0.0432 ! 4.2397+-0.0864 ! definitely 3.0076x slower inline-arguments-aliased-access 1.8209+-0.2001 ! 4.2587+-0.0750 ! definitely 2.3388x slower tear-off-arguments-simple 1.9683+-0.1093 ! 3.2880+-0.0646 ! definitely 1.6705x slower tear-off-arguments 2.7358+-0.0353 ! 4.4778+-0.0407 ! definitely 1.6368x slower
Comment on attachment 249245 [details] even more build fixes View in context: https://bugs.webkit.org/attachment.cgi?id=249245&action=review Stopped half way through as i have to do other things :-( > Source/JavaScriptCore/bytecode/BytecodeKills.h:129 > + uintptr_t m_word; could you make this a union instead of just having casts? It will save the bitwise_cast ugliness and make the code generally clearer
Comment on attachment 249249 [details] very latest Attachment 249249 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.appspot.com/results/5895858029592576 New failing tests: js/dom/const.html
Created attachment 249257 [details] Archive of layout-test-results from ews104 for mac-mavericks-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews104 Port: mac-mavericks-wk2 Platform: Mac OS X 10.9.5
Comment on attachment 249249 [details] very latest Attachment 249249 [details] did not pass mac-ews (mac): Output: http://webkit-queues.appspot.com/results/6510621394731008 New failing tests: js/dom/const.html
Created attachment 249258 [details] Archive of layout-test-results from ews100 for mac-mavericks The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews100 Port: mac-mavericks Platform: Mac OS X 10.9.5
(In reply to comment #101) > (In reply to comment #100) > > With this buildfix there are only 8 failures on ARM Thumb2 Linux: > > ** The following JSC stress test failures have been introduced: > regress/script-tests/varargs-construct-inline.js.dfg-eager > > regress/script-tests/varargs-construct-inline.js.dfg-eager-no-cjit-validate > v8-v6/v8-raytrace.js.always-trigger-copy-phase > v8-v6/v8-raytrace.js.default > v8-v6/v8-raytrace.js.dfg-eager > v8-v6/v8-raytrace.js.dfg-eager-no-cjit-validate > v8-v6/v8-raytrace.js.no-cjit-validate-phases > v8-v6/v8-raytrace.js.no-llint > > Results for JSC stress tests: > 8 failures found. Same failures on ARM traditional, and it seems bug141193 will gone away with this patch.
(In reply to comment #102) > Are these worth investigating? > > call-spread-apply 16.3509+-0.5089 ! > 31.5406+-1.6610 ! definitely 1.9290x slower > call-spread-call 6.1589+-0.1679 ! > 25.1263+-1.5951 ! definitely 4.0797x slower > destructuring-arguments 5.1739+-0.0185 ! > 16.8056+-0.7282 ! definitely 3.2482x slower > direct-arguments-getbyval 0.9358+-0.0600 ! > 1.2183+-0.0840 ! definitely 1.3019x slower > infer-closure-const-then-reenter 23.1630+-1.9191 ! > 124.7979+-2.0891 ! definitely 5.3878x slower > inline-arguments-access 1.4097+-0.0432 ! > 4.2397+-0.0864 ! definitely 3.0076x slower > inline-arguments-aliased-access 1.8209+-0.2001 ! > 4.2587+-0.0750 ! definitely 2.3388x slower > tear-off-arguments-simple 1.9683+-0.1093 ! > 3.2880+-0.0646 ! definitely 1.6705x slower > tear-off-arguments 2.7358+-0.0353 ! > 4.4778+-0.0407 ! definitely 1.6368x slower From what I remember, these tests don't make it to FTL (don't run long enough, coverage, etc) and test arguments elimination. We expect those tests to slow down, since the new arguments elimination in DFG is intended just for handling foo.apply(bar, arguments). But, I will look at those some more to make sure it's nothing horrible.
Created attachment 249267 [details] more fixes 32-bit should now be completely fixed (the bug was a simple typo in emitCall()).
Attachment 249267 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318: Should have only a single space after a punctuation in a comment. [whitespace/comments] [5] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261: The parameter name "]" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384: Multi line control clauses should use braces. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 35 in 251 files If any of these errors are false positives, please file a bug against check-webkit-style.
(In reply to comment #106) > Comment on attachment 249249 [details] > very latest > > Attachment 249249 [details] did not pass mac-ews (mac): > Output: http://webkit-queues.appspot.com/results/6510621394731008 > > New failing tests: > js/dom/const.html Should be an easy fix. I remember there were a couple of const-related places where it felt like I was making an arbitrary decision. Probably I decided wrong, somewhere. What's weird is that this test is part of js/dom. It shouldn't be. I'll fix that.
Comment on attachment 249267 [details] more fixes Attachment 249267 [details] did not pass mac-ews (mac): Output: http://webkit-queues.appspot.com/results/5119339753635840 New failing tests: js/dom/const.html
Created attachment 249286 [details] Archive of layout-test-results from ews100 for mac-mavericks The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews100 Port: mac-mavericks Platform: Mac OS X 10.9.5
Comment on attachment 249267 [details] more fixes Attachment 249267 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.appspot.com/results/6130520010260480 New failing tests: js/dom/const.html
Created attachment 249287 [details] Archive of layout-test-results from ews106 for mac-mavericks-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-mavericks-wk2 Platform: Mac OS X 10.9.5
Created attachment 249313 [details] more fixes ARM64, ARMv7, x86-32, and x86-64 should all work. js/const is still regressed. I still haven't looked at it in detail, but at least it's not a DOM test anymore.
Created attachment 249342 [details] the patch Passes all tests on all platforms.
Attachment 249342 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:206: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:237: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:298: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:318: Should have only a single space after a punctuation in a comment. [whitespace/comments] [5] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261: The parameter name "]" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384: Multi line control clauses should use braces. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 35 in 251 files If any of these errors are false positives, please file a bug against check-webkit-style.
Comment on attachment 249342 [details] the patch View in context: https://bugs.webkit.org/attachment.cgi?id=249342&action=review r=me with issues. I need a nap now. Does object allocation sinking work for function objects? If not, I think we want a follow-up bug for that, since bytecode used to sink those allocations through conditional logic on the stack. I won't defend the old way of doing this, but I will say it's worth some speed on Octane. > Source/JavaScriptCore/bytecode/BytecodeKills.h:92 > + Vector<unsigned>* vector = new Vector<unsigned>(); This is a leak. KillSet needs a destructor to delete m_word if & 1. Also might be nice to isolate the encode/decode of m_word into helper functions: isEmpty(), isSingleItem(), singleItem(), setSingleItem(), setVector(), vector(). > Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2824 > -bool CodeBlock::isCaptured(VirtualRegister operand, InlineCallFrame* inlineCallFrame) const I will not miss this function. > Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2850 > -int CodeBlock::framePointerOffsetToGetActivationRegisters(int machineCaptureStart) Nor this one. > Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:-1919 > - if (m_codeBlock->usesArguments() && m_codeBlock->numParameters() != 1 && !isStrictMode()) { I will not miss this code. > Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:331 > + void transform() Would be nice to transform GetById(node, "callee") as well, to support anonymous functions that recurse by way of arguments.callee. Perhaps this is rare, though. > Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-111 > -#if CPU(ARM64) > - m_jit.pushToSave(scratch1); > - m_jit.pushToSave(scratch2); > -#else > m_jit.push(scratch1); > m_jit.push(scratch2); > -#endif A comment and a CRASH macro in MacroAssemblerARM64.h indicate that we need this special pushToSave behavior on ARM64. Why is it OK to remove this? > Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-146 > -#if CPU(ARM64) > - m_jit.pushToSave(scratch); > -#else Ditto. > Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4641 > +void SpeculativeJIT::compilePutToArguments(Node* node) Do we need some write barrier action here? > Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:850 > +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction) Do we need some write barrier action here? > Source/JavaScriptCore/jit/JITPropertyAccess.cpp:821 > +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction) Do we need some write barrier action here? > Source/JavaScriptCore/runtime/ArgumentsMode.h:31 > +enum ArgumentsMode { Let's use enum class here. > Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:35 > +// function. It only comes into play it the arguments aren't also lifted into the activation. "play it" => "play if" > Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:38 > +// If they were then accesses to the arguments would resolve to a ScopeOffset and not a > +// CapturedArgumentsOffset. > +class CapturedArgumentsOffset : public GenericOffset<CapturedArgumentsOffset> { I'm confused by this name. Usually, "captured" means "it's in the activation". But here it means "it's not in the activation". I guess by "captured" you meant "captured by the arguments object". I think this offset is always an offset into a DirectArguments object. Right? If so, I suggest calling this "DirectArgumentsOffset". I think that would help disambiguate the capturing. > Source/JavaScriptCore/runtime/OutOfBandArguments.h:41 > +class OutOfBandArguments : public JSNonFinalObject { How about calling this CopiedArguments or ClonedArguments or SnapshottedArguments or StrictArguments? "Out of band" didn't really speak to me because I don't normally think of any kind of arguments as being in-band, and in strict mode, these arguments are not really out of band. > Source/JavaScriptCore/runtime/ScopedArguments.h:40 > +class ScopedArguments : public GenericArguments<ScopedArguments> { How about calling this CapturedArguments on IndirectArguments or AliasedArguments? We use "scope" in get_from_scope and put_to_scope to mean "a subclass of JSScope". But "scoped arguments" is a bit of an awkward phrase, partly because all arguments exist in some lexical scope and so there are no non-scoped arguments. I like "captured" because it's more specific about what triggered this behavior (a function that captured an argument), or I like "indirect" because it's the opposite of "direct" and it conveys that we forward requests somewhere else (even though we don't specify where), or I like "aliased" because it conveys sharing between the named reference and the indexed reference. > Source/JavaScriptCore/runtime/VarOffset.h:36 > +enum VarKind : uint8_t { enum class > Source/JavaScriptCore/runtime/VarOffset.h:40 > + CapturedArgumentKind Same comment about the term "captured" here. Can we call this DirectArgumentKind?
(In reply to comment #120) > Comment on attachment 249342 [details] > the patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=249342&action=review > > r=me with issues. I need a nap now. > > Does object allocation sinking work for function objects? If not, I think we > want a follow-up bug for that, since bytecode used to sink those allocations > through conditional logic on the stack. I won't defend the old way of doing > this, but I will say it's worth some speed on Octane. > > > Source/JavaScriptCore/bytecode/BytecodeKills.h:92 > > + Vector<unsigned>* vector = new Vector<unsigned>(); > > This is a leak. KillSet needs a destructor to delete m_word if & 1. Good catch! > > Also might be nice to isolate the encode/decode of m_word into helper > functions: isEmpty(), isSingleItem(), singleItem(), setSingleItem(), > setVector(), vector(). I'll try that. > > > Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2824 > > -bool CodeBlock::isCaptured(VirtualRegister operand, InlineCallFrame* inlineCallFrame) const > > I will not miss this function. > > > Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2850 > > -int CodeBlock::framePointerOffsetToGetActivationRegisters(int machineCaptureStart) > > Nor this one. > > > Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:-1919 > > - if (m_codeBlock->usesArguments() && m_codeBlock->numParameters() != 1 && !isStrictMode()) { > > I will not miss this code. > > > Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:331 > > + void transform() > > Would be nice to transform GetById(node, "callee") as well, to support > anonymous functions that recurse by way of arguments.callee. Perhaps this is > rare, though. I will add a FIXME and file a bug. I agree that this is worthwhile. (I plan to make all new FIXMEs reference a bug.) > > > Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-111 > > -#if CPU(ARM64) > > - m_jit.pushToSave(scratch1); > > - m_jit.pushToSave(scratch2); > > -#else > > m_jit.push(scratch1); > > m_jit.push(scratch2); > > -#endif > > A comment and a CRASH macro in MacroAssemblerARM64.h indicate that we need > this special pushToSave behavior on ARM64. Why is it OK to remove this? Because this is 32_64 code, and so it'll never ARM64. > > > Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp:-146 > > -#if CPU(ARM64) > > - m_jit.pushToSave(scratch); > > -#else > > Ditto. Ditto. > > > Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4641 > > +void SpeculativeJIT::compilePutToArguments(Node* node) > > Do we need some write barrier action here? FixupPhase says: case PutClosureVar: case PutToArguments: { fixEdge<KnownCellUse>(node->child1()); insertStoreBarrier(m_indexInBlock, node->child1(), node->child2()); break; } So, this is fine. > > > Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:850 > > +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction) > > Do we need some write barrier action here? It's a bug! I'll fix. > > > Source/JavaScriptCore/jit/JITPropertyAccess.cpp:821 > > +void JIT::emit_op_put_to_arguments(Instruction* currentInstruction) > > Do we need some write barrier action here? Ditto. > > > Source/JavaScriptCore/runtime/ArgumentsMode.h:31 > > +enum ArgumentsMode { > > Let's use enum class here. OK. > > > Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:35 > > +// function. It only comes into play it the arguments aren't also lifted into the activation. > > "play it" => "play if" OK. > > > Source/JavaScriptCore/runtime/CapturedArgumentsOffset.h:38 > > +// If they were then accesses to the arguments would resolve to a ScopeOffset and not a > > +// CapturedArgumentsOffset. > > +class CapturedArgumentsOffset : public GenericOffset<CapturedArgumentsOffset> { > > I'm confused by this name. Usually, "captured" means "it's in the > activation". But here it means "it's not in the activation". > > I guess by "captured" you meant "captured by the arguments object". Right. > > I think this offset is always an offset into a DirectArguments object. > Right? Correct. > If so, I suggest calling this "DirectArgumentsOffset". I think that > would help disambiguate the capturing. OK. > > > Source/JavaScriptCore/runtime/OutOfBandArguments.h:41 > > +class OutOfBandArguments : public JSNonFinalObject { > > How about calling this CopiedArguments or ClonedArguments or > SnapshottedArguments or StrictArguments? > > "Out of band" didn't really speak to me because I don't normally think of > any kind of arguments as being in-band, and in strict mode, these arguments > are not really out of band. Maybe SnapshottedArguments is the best. > > > Source/JavaScriptCore/runtime/ScopedArguments.h:40 > > +class ScopedArguments : public GenericArguments<ScopedArguments> { > > How about calling this CapturedArguments on IndirectArguments or > AliasedArguments? If we get rid of the term CapturedArgumentsOffset, the notion of "capture" doesn't really come into play anymore. IndirectArguments doesn't say why it's indirect. AliasedArguments is not quite right, since DirectArguments are also aliased - just they are aliased to the stack not to the scope. I actually think that ScopedArguments is the best name - more on that below. > > We use "scope" in get_from_scope and put_to_scope to mean "a subclass of > JSScope". I actually think we use it to mean "in the scope". It's "get_from_scope" because the value is in the scope. For this reason, ScopedArguments makes sense to me. I would agree with your argument if I had called it "ArgumentsScope" - clearly that's wrong, since this object isn't a scope. But "Scoped" here is used to describe the way the arguments are actually stored when we use this object, and in that regard, it's an accurate description - the arguments *are* in a subclass of JSScope. > But "scoped arguments" is a bit of an awkward phrase, partly > because all arguments exist in some lexical scope and so there are no > non-scoped arguments. I like "captured" because it's more specific about > what triggered this behavior (a function that captured an argument), or I > like "indirect" because it's the opposite of "direct" and it conveys that we > forward requests somewhere else (even though we don't specify where), or I > like "aliased" because it conveys sharing between the named reference and > the indexed reference. Hmmm. I think that of your proposed names, I like CapturedArguments the best, but I don't like it as much as ScopedArguments. I think I understand why you don't like ScopedArguments - the word "scope" means lexical scope and so using the term to describe arguments is a tautology. But, after bytecode generation the word "scope" is only used to mean that the value is in the heap. In this patch we use the word "scope" this way in a bunch of places including: - ScopeOffset, as opposed to VirtualRegister (aka StackOffset after I do the renaming), means that it's in the heap in a scope. - VarOffset::isScope() means that it's in the heap in a scope. Prior to this patch we already used the word "scope" this way: - get_from_scope doesn't broadly mean that the variable is in a lexical scope; it means specifically that the variable is in the heap, in a scope object. For that reason, ScopedArguments feels consistent with the way we usually use the word "scope": a variable is "scoped" or "in a scope" when it is in a scope object that is allocated in the heap. Do you buy this argument for the name ScopedArguments? > > > Source/JavaScriptCore/runtime/VarOffset.h:36 > > +enum VarKind : uint8_t { > > enum class OK. > > > Source/JavaScriptCore/runtime/VarOffset.h:40 > > + CapturedArgumentKind > > Same comment about the term "captured" here. Can we call this > DirectArgumentKind? Yup, that makes sense.
> For that reason, ScopedArguments feels consistent with the way we usually > use the word "scope": a variable is "scoped" or "in a scope" when it is in a > scope object that is allocated in the heap. > > Do you buy this argument for the name ScopedArguments? Yeah, I'm OK with this.
OK, so the renamings will be like so: What the patch previously called CapturedArgumentsOffset/CapturedArgumentKind will now be called DirectArgumentsOffset/DirectArgumentKind. What the patch previously called OutOfBandArguments will now be called ArgumentsSnapshot. This is because I like the name SnapshottedArguments, but I don't like using the word "snapshot" as a verb and then making it past tense. It's awkward to say.
(In reply to comment #123) > OK, so the renamings will be like so: > > What the patch previously called > CapturedArgumentsOffset/CapturedArgumentKind will now be called > DirectArgumentsOffset/DirectArgumentKind. > > What the patch previously called OutOfBandArguments will now be called > ArgumentsSnapshot. This is because I like the name SnapshottedArguments, > but I don't like using the word "snapshot" as a verb and then making it past > tense. It's awkward to say. No, this feels even weirder. I'm going with ClonedArguments.
Created attachment 249464 [details] including ggaren's feedback
Created attachment 249470 [details] rebased, added more tests This is probably the one that will land.
Attachment 249470 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:712: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:107: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:113: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:208: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:239: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:300: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:320: Should have only a single space after a punctuation in a comment. [whitespace/comments] [5] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:45: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:46: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:47: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:48: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:49: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:697: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:173: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp:253: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:275: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:282: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:261: The parameter name "]" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/bytecode/BytecodeKills.h:63: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4384: Multi line control clauses should use braces. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4669: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4672: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4673: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4674: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4676: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4681: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4698: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4699: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4700: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4702: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4708: More than one command on the same line [whitespace/newline] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:155: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:171: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:196: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:207: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 35 in 262 files If any of these errors are false positives, please file a bug against check-webkit-style.
Landed in http://trac.webkit.org/changeset/181993
Fixes: http://trac.webkit.org/changeset/181994 http://trac.webkit.org/changeset/181995
More fixes http://trac.webkit.org/changeset/181997 http://trac.webkit.org/changeset/181998
Anotehr fix http://trac.webkit.org/changeset/182001
This patch is still appearing to fail some tests. Those failures don't reproduce locally. The issue is that we need to rm -rf WebKitBuild on all of the bots.
I'm seeing test failures in trunk. I didn't see them before landing. Investigating...
Anotehr fix http://trac.webkit.org/changeset/182004
Looks like this broke some perf tests. I'm looking into it. Running Dromaeo/jslib-modify-prototype.html (65 of 144) error: Dromaeo/jslib-modify-prototype.html Both operands to ICmp instruction are not of the same type! %128 = icmp eq i64 %127, i8 0 LLVM fatal error: Broken function found, compilation aborted! 1 0x11c57323c llvmCrash(char const*) 2 0x11cba947c llvm::report_fatal_error(llvm::Twine const&, bool) 3 0x11cba93cc llvm::report_fatal_error(char const*, bool) 4 0x11cb83139 (anonymous namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&) 5 0x11cb68d4c llvm::FPPassManager::runOnFunction(llvm::Function&) 6 0x11cb68f3b llvm::FPPassManager::runOnModule(llvm::Module&) 7 0x11cb693d6 llvm::legacy::PassManagerImpl::run(llvm::Module&) 8 0x11cb699ed llvm::legacy::PassManager::run(llvm::Module&) 9 0x11ca60d2b llvm::MCJIT::emitObject(llvm::Module*) 10 0x11ca60f14 llvm::MCJIT::generateCodeForModule(llvm::Module*) 11 0x11ca610c8 llvm::MCJIT::finalizeObject() 12 0x11ca8f3b3 LLVMGetPointerToGlobal 13 0x113913472 JSC::FTL::compile(JSC::FTL::State&, JSC::DFG::Safepoint::Result&) 14 0x1138741a3 JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&) 15 0x113873731 JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&, JSC::DFG::ThreadData*) 16 0x1138faa43 JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*) 17 0x113c7a8f3 WTF::threadEntryPoint(void*) 18 0x113c7adaf WTF::wtfThreadEntryPoint(void*) 19 0x7fff85ad7899 _pthread_body 20 0x7fff85ad772a _pthread_struct_init 21 0x7fff85adbfc9 thread_start
(In reply to comment #135) > Looks like this broke some perf tests. I'm looking into it. > > > Running Dromaeo/jslib-modify-prototype.html (65 of 144) > error: Dromaeo/jslib-modify-prototype.html > Both operands to ICmp instruction are not of the same type! > %128 = icmp eq i64 %127, i8 0 > LLVM fatal error: Broken function found, compilation aborted! > 1 0x11c57323c llvmCrash(char const*) > 2 0x11cba947c llvm::report_fatal_error(llvm::Twine const&, bool) > 3 0x11cba93cc llvm::report_fatal_error(char const*, bool) > 4 0x11cb83139 (anonymous > namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&) > 5 0x11cb68d4c llvm::FPPassManager::runOnFunction(llvm::Function&) > 6 0x11cb68f3b llvm::FPPassManager::runOnModule(llvm::Module&) > 7 0x11cb693d6 llvm::legacy::PassManagerImpl::run(llvm::Module&) > 8 0x11cb699ed llvm::legacy::PassManager::run(llvm::Module&) > 9 0x11ca60d2b llvm::MCJIT::emitObject(llvm::Module*) > 10 0x11ca60f14 llvm::MCJIT::generateCodeForModule(llvm::Module*) > 11 0x11ca610c8 llvm::MCJIT::finalizeObject() > 12 0x11ca8f3b3 LLVMGetPointerToGlobal > 13 0x113913472 JSC::FTL::compile(JSC::FTL::State&, > JSC::DFG::Safepoint::Result&) > 14 0x1138741a3 > JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&) > 15 0x113873731 JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&, > JSC::DFG::ThreadData*) > 16 0x1138faa43 JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*) > 17 0x113c7a8f3 WTF::threadEntryPoint(void*) > 18 0x113c7adaf WTF::wtfThreadEntryPoint(void*) > 19 0x7fff85ad7899 _pthread_body > 20 0x7fff85ad772a _pthread_struct_init > 21 0x7fff85adbfc9 thread_start Pretty sure it's this: https://bugs.webkit.org/show_bug.cgi?id=143098
Looks like this broke inspector-protocol/debugger/setBreakpoint-dfg-and-modify-local.html on Windows: https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/r181993%20(50642)/results.html
(In reply to comment #137) > Looks like this broke > inspector-protocol/debugger/setBreakpoint-dfg-and-modify-local.html on > Windows: > https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/ > r181993%20(50642)/results.html I'm tracking the investigation of this Windows crash here: https://bugs.webkit.org/show_bug.cgi?id=143109
Landed in http://trac.webkit.org/changeset/182023
(In reply to comment #139) > Landed in http://trac.webkit.org/changeset/182023 I mean, I landed a fix for an expedia crash in that revision.
*** Bug 137357 has been marked as a duplicate of this bug. ***
Looks like this also caused the performance test Speedometer/Full.html to crash sometimes on the GTK port. Reported on bug 143261.
This patch passes all stress tests on Win32, but seems to cause an empty message view, when trying to view messages on www.hotmail.com. Is this the case on Mac 32/64 bit as well?
(In reply to comment #143) > This patch passes all stress tests on Win32, but seems to cause an empty > message view, when trying to view messages on www.hotmail.com. Is this the > case on Mac 32/64 bit as well? FYI, there's a bug that was introduced in r181993 that may cause similar symptoms. That bug is being tracked in https://bugs.webkit.org/show_bug.cgi?id=143407.
*** Bug 139827 has been marked as a duplicate of this bug. ***
*** Bug 139524 has been marked as a duplicate of this bug. ***
*** Bug 140097 has been marked as a duplicate of this bug. ***