Bug 124464 - Infer constant global variables
Summary: Infer constant global variables
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords:
Depends on: 124465 124539 124609
Blocks: 124630
  Show dependency treegraph
 
Reported: 2013-11-16 21:34 PST by Filip Pizlo
Modified: 2013-11-20 10:56 PST (History)
10 users (show)

See Also:


Attachments
sort of a beginning (6.94 KB, patch)
2013-11-17 23:55 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more (8.01 KB, patch)
2013-11-18 00:00 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
slowly... (15.45 KB, patch)
2013-11-18 17:48 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (50.94 KB, patch)
2013-11-18 22:14 PST, Filip Pizlo
buildbot: commit-queue-
Details | Formatted Diff | Diff
thingy (51.94 KB, patch)
2013-11-19 10:29 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (74.45 KB, patch)
2013-11-19 13:03 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
llvm patch (3.96 KB, patch)
2013-11-19 14:17 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (74.68 KB, patch)
2013-11-19 15:49 PST, Filip Pizlo
sam: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Filip Pizlo 2013-11-16 21:34:57 PST
We currently infer constant globals if they are functions, but fail to do so in the general case.  No good reason for that.
Comment 1 Filip Pizlo 2013-11-17 23:55:32 PST
Created attachment 217173 [details]
sort of a beginning
Comment 2 Filip Pizlo 2013-11-18 00:00:51 PST
Created attachment 217174 [details]
a bit more
Comment 3 Filip Pizlo 2013-11-18 17:48:37 PST
Created attachment 217258 [details]
slowly...
Comment 4 Filip Pizlo 2013-11-18 22:14:24 PST
Created attachment 217271 [details]
the patch
Comment 5 Build Bot 2013-11-18 22:57:57 PST
Comment on attachment 217271 [details]
the patch

Attachment 217271 [details] did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/26978022
Comment 6 Filip Pizlo 2013-11-19 10:29:56 PST
Created attachment 217311 [details]
thingy

Backing up before I rationalize something a bit more.
Comment 7 Filip Pizlo 2013-11-19 11:10:04 PST
It looks like I'll need to make some LLVM changes to expose CreateFence().
Comment 8 Filip Pizlo 2013-11-19 13:03:01 PST
Created attachment 217321 [details]
the patch
Comment 9 Filip Pizlo 2013-11-19 14:17:45 PST
Created attachment 217331 [details]
llvm patch
Comment 10 Filip Pizlo 2013-11-19 14:48:37 PST
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
"Old" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159352)
"TipOfTree" at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r159462)
"ConstInfer" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159462)

Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark
iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
with 95% confidence intervals in milliseconds.

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
SunSpider:
   3d-cube                                            7.5813+-0.0837            7.5099+-0.0311     !      8.0305+-0.0473        ! definitely 1.0593x slower
   3d-morph                                           8.9693+-0.0773     ?      9.0832+-0.0468     ^      8.8333+-0.0716          might be 1.0154x faster
   3d-raytrace                                        9.3453+-0.1951            9.3084+-0.2097            9.2695+-0.1789        
   access-binary-trees                                2.0006+-0.0151     ?      2.0066+-0.0088     ?      2.0191+-0.0160        ?
   access-fannkuch                                    7.9737+-0.1271     ?      7.9968+-0.0505     ?      8.0239+-0.0523        ?
   access-nbody                                       4.2408+-0.0152     ?      4.2599+-0.0158            4.2448+-0.0077        ?
   access-nsieve                                      5.0098+-0.0427     ?      5.0181+-0.0657            5.0146+-0.0393        ?
   bitops-3bit-bits-in-byte                           1.8453+-0.0204            1.8403+-0.0065     ?      1.8439+-0.0036        
   bitops-bits-in-byte                                7.2328+-0.0973     ?      7.2968+-0.0873     ?      7.3406+-0.0594        ? might be 1.0149x slower
   bitops-bitwise-and                                 2.9072+-0.0579     ?      2.9211+-0.0444     ?      2.9477+-0.0186        ? might be 1.0139x slower
   bitops-nsieve-bits                                 4.6191+-0.0317            4.5737+-0.0568     ?      4.6064+-0.0060        
   controlflow-recursive                              3.1574+-0.0176            3.1478+-0.0491     ?      3.1495+-0.0435        
   crypto-aes                                         5.5183+-0.0647            5.4801+-0.0254     ?      5.5083+-0.0861        
   crypto-md5                                         3.1918+-0.0427            3.1348+-0.0207     ?      3.2146+-0.0775        ?
   crypto-sha1                                        3.0005+-0.0786            2.9676+-0.0145     ?      2.9740+-0.0120        
   date-format-tofte                                 11.5722+-0.1942           11.4873+-0.1753           11.3636+-0.1770          might be 1.0184x faster
   date-format-xparb                                  8.6253+-0.0927            8.6029+-0.0709            8.5321+-0.0821          might be 1.0109x faster
   math-cordic                                        4.6024+-0.0415     ?      4.6132+-0.0826     ^      3.8967+-0.0121        ^ definitely 1.1811x faster
   math-partial-sums                                 10.2597+-0.0483     ?     10.2802+-0.0635     ?     10.3371+-0.0742        ?
   math-spectral-norm                                 2.7435+-0.0104            2.7283+-0.0116     ?      2.7320+-0.0075        
   regexp-dna                                        12.9838+-0.1186     ?     13.0205+-0.1752           12.9385+-0.1526        
   string-base64                                      5.5151+-0.0479            5.4973+-0.0372     ?      5.5889+-0.2107        ? might be 1.0134x slower
   string-fasta                                      10.6524+-0.1175           10.5616+-0.0848           10.5153+-0.1090          might be 1.0130x faster
   string-tagcloud                                   14.9815+-0.1459     ?     15.1071+-0.1295           15.0956+-0.0787        ?
   string-unpack-code                                30.2962+-0.0994           30.1338+-0.3907     ?     30.3429+-0.5461        ?
   string-validate-input                              6.8886+-0.0420     ?      6.9186+-0.0404            6.9142+-0.0520        ?

   <arithmetic> *                                     7.5275+-0.0222            7.5191+-0.0283            7.5107+-0.0268          might be 1.0022x faster
   <geometric>                                        6.0345+-0.0145            6.0255+-0.0184            6.0085+-0.0167          might be 1.0043x faster
   <harmonic>                                         4.9277+-0.0134            4.9171+-0.0147            4.9031+-0.0139          might be 1.0050x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
LongSpider:
   3d-cube                                         2208.5469+-10.1600        2207.7935+-8.1583     !   2769.1203+-30.4995       ! definitely 1.2538x slower
   3d-morph                                        1546.5802+-6.5961         1543.5007+-1.0351     ^   1519.0914+-5.9873        ^ definitely 1.0181x faster
   3d-raytrace                                     1503.7377+-5.3149     ?   1504.7897+-11.1490    ?   1513.4263+-19.8767       ?
   access-binary-trees                             2215.9966+-14.9400        2209.4778+-10.7930        2209.2583+-8.5827        
   access-fannkuch                                  653.9927+-0.4076     ?    654.2470+-3.6295     ?    659.2461+-8.8497        ?
   access-nbody                                    1505.8125+-3.4616     ?   1512.2844+-18.8562        1504.7269+-1.6181        
   access-nsieve                                   1561.2185+-6.2901         1557.5055+-3.7414     ?   1563.1943+-4.0083        ?
   bitops-3bit-bits-in-byte                         121.7315+-0.1725          121.7066+-0.4761     ?    121.9833+-1.0209        ?
   bitops-bits-in-byte                              635.8265+-3.1425     ?    638.8021+-1.7354     ?    638.8499+-2.9275        ?
   bitops-nsieve-bits                              1051.2815+-4.8944     ?   1052.2355+-2.7466     ^   1048.1606+-0.9262        
   controlflow-recursive                           1452.7735+-4.7519     !   1464.9510+-2.5374         1464.4229+-1.7238        ! definitely 1.0080x slower
   crypto-aes                                      1665.1899+-8.3563     ?   1682.7131+-19.1745    ^   1647.7121+-2.8481        ^ definitely 1.0106x faster
   crypto-md5                                      1200.9325+-2.5537         1197.4833+-2.2498     ^   1186.1542+-1.5801        ^ definitely 1.0125x faster
   crypto-sha1                                     1663.0278+-5.5067     ?   1667.5052+-8.9946     ^   1613.5453+-4.7960        ^ definitely 1.0307x faster
   date-format-tofte                               1187.3284+-16.8142        1161.6964+-10.9893        1157.6568+-9.2259        ^ definitely 1.0256x faster
   date-format-xparb                               1512.9535+-51.5596        1501.5062+-52.5362        1485.5623+-15.0973         might be 1.0184x faster
   math-cordic                                     1808.6301+-12.5379        1804.8007+-9.9435     ^   1469.4609+-53.3881       ^ definitely 1.2308x faster
   math-partial-sums                               1309.2595+-5.1149     ?   1310.7026+-1.4511         1309.5820+-2.5635        ?
   math-spectral-norm                              1828.2603+-2.3347     ?   1831.1875+-6.4539         1827.5618+-1.3406        
   string-base64                                    513.6710+-1.4356          512.7414+-1.6932     ^    508.0153+-1.6576        ^ definitely 1.0111x faster
   string-fasta                                    1035.2658+-4.8885     ?   1037.3973+-3.9902         1032.8390+-6.1095        
   string-tagcloud                                  381.2720+-2.4586     ?    383.9449+-2.0300          382.6807+-1.0434        ?

   <arithmetic>                                    1298.3313+-2.5344         1298.1351+-2.5999     ?   1301.4659+-3.3516        ? might be 1.0024x slower
   <geometric> *                                   1114.3807+-1.7775         1114.3791+-1.6315     ^   1110.2069+-2.4871          might be 1.0038x faster
   <harmonic>                                       802.4670+-0.8326     ?    802.7785+-0.6887          799.8547+-2.3720          might be 1.0033x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
V8Spider:
   crypto                                            79.3744+-0.2632           79.2608+-0.2209     ?     79.5256+-0.2844        ?
   deltablue                                        100.8797+-0.5382     ?    101.0357+-0.4396     ^     98.5235+-0.3692        ^ definitely 1.0239x faster
   earley-boyer                                      71.4267+-0.4203     ?     71.5787+-0.5025           70.9482+-0.3267        
   raytrace                                          40.4904+-0.1631     ?     40.9313+-0.6841           40.2924+-0.2402        
   regexp                                            99.0975+-0.3517     ?     99.5562+-0.7468     ^     98.3817+-0.2380        ^ definitely 1.0073x faster
   richards                                         113.8366+-0.4246     ?    114.4113+-1.0426     ^    109.0323+-1.5296        ^ definitely 1.0441x faster
   splay                                             45.9952+-0.3511           45.8373+-0.4730     ?     46.7443+-1.0395        ? might be 1.0163x slower

   <arithmetic>                                      78.7286+-0.1475     ?     78.9445+-0.1767     ^     77.6354+-0.3407        ^ definitely 1.0141x faster
   <geometric> *                                     73.8801+-0.1265     ?     74.0804+-0.2001     ^     73.1665+-0.3721        ^ definitely 1.0098x faster
   <harmonic>                                        68.7419+-0.1296     ?     68.9426+-0.2819           68.3704+-0.4320          might be 1.0054x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
Octane and V8v7:
   encrypt                                           0.46902+-0.00046          0.46806+-0.00059          0.46792+-0.00505       
   decrypt                                           8.60616+-0.00626          8.59894+-0.00786    ?     8.64715+-0.11283       ?
   deltablue                                x2       0.58615+-0.00501          0.58236+-0.00305    ^     0.56392+-0.00403       ^ definitely 1.0394x faster
   earley                                            0.87403+-0.00909          0.86953+-0.00715          0.86162+-0.00475         might be 1.0144x faster
   boyer                                            12.56312+-0.06080    ?    12.70696+-0.24141         12.53532+-0.09966       
   raytrace                                 x2       4.44842+-0.06187    ?     4.53637+-0.09862          4.43155+-0.09923       
   regexp                                   x2      33.63696+-0.16438         33.51237+-0.09800         33.39958+-0.07642       
   richards                                 x2       0.31403+-0.00635          0.31118+-0.00390    ^     0.29358+-0.00309       ^ definitely 1.0697x faster
   splay                                    x2       0.64415+-0.00503          0.64315+-0.00874          0.63162+-0.00327       ^ definitely 1.0198x faster
   navier-stokes                            x2      10.93590+-0.00572    ?    10.94940+-0.01488         10.94629+-0.00590       ?
   closure                                           0.42789+-0.00235          0.42606+-0.00052    ?     0.42676+-0.00104       
   jquery                                            6.14190+-0.04089          6.11014+-0.00842    ?     6.11918+-0.01048       
   gbemu                                    x2      71.19315+-0.95637    ?    71.64433+-0.31485    ?    72.47514+-0.54996       ? might be 1.0180x slower
   mandreel                                 x2     182.77830+-0.26305    ^   181.49099+-0.66291    ^   145.13108+-0.50201       ^ definitely 1.2594x faster
   pdfjs                                    x2     101.86309+-0.26855        101.52660+-0.40274        101.48690+-0.36967       
   box2d                                    x2      34.84515+-0.16878    ?    34.85743+-0.25357         34.53703+-0.22502       

V8v7:
   <arithmetic>                                      7.72772+-0.02293    ?     7.73207+-0.02275    ^     7.69032+-0.01526         might be 1.0049x faster
   <geometric> *                                     2.44827+-0.00726    ?     2.44869+-0.00556    ^     2.40499+-0.00681       ^ definitely 1.0180x faster
   <harmonic>                                        0.93820+-0.00646          0.93356+-0.00395    ^     0.90321+-0.00410       ^ definitely 1.0387x faster

Octane including V8v7:
   <arithmetic>                                     35.06049+-0.08146         34.97262+-0.06440    ^    32.18659+-0.04976       ^ definitely 1.0893x faster
   <geometric> *                                     6.99855+-0.01221          6.99482+-0.00952    ^     6.80158+-0.01376       ^ definitely 1.0290x faster
   <harmonic>                                        1.32181+-0.00817          1.31542+-0.00487    ^     1.27824+-0.00527       ^ definitely 1.0341x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
Kraken:
   ai-astar                                          493.555+-0.803            493.079+-0.678      ?     496.481+-4.734         ?
   audio-beat-detection                              236.974+-1.660            236.352+-1.442      ?     237.680+-1.282         ?
   audio-dft                                         300.754+-9.631            296.825+-3.154      ?     298.421+-3.875         
   audio-fft                                         144.772+-0.348            144.446+-0.149      ^     143.160+-0.185         ^ definitely 1.0113x faster
   audio-oscillator                                  245.129+-0.457            244.730+-0.364            244.720+-0.538         
   imaging-darkroom                                  289.926+-0.598            289.726+-0.542            289.652+-0.556         
   imaging-desaturate                                158.437+-0.198      ?     158.633+-0.580            158.540+-0.203         ?
   imaging-gaussian-blur                             430.918+-1.207      ^     417.353+-0.287      ^     366.696+-0.580         ^ definitely 1.1751x faster
   json-parse-financial                               79.861+-0.290      !      80.649+-0.285             80.114+-0.562         ?
   json-stringify-tinderbox                          106.614+-0.972            105.990+-0.430      !     109.098+-0.297         ! definitely 1.0233x slower
   stanford-crypto-aes                                90.734+-0.746             90.059+-0.455      ?      90.062+-0.692         
   stanford-crypto-ccm                               101.463+-0.902            100.082+-1.085      ?     100.494+-1.456         
   stanford-crypto-pbkdf2                            262.603+-9.591            261.817+-3.564      ?     265.266+-1.668         ? might be 1.0101x slower
   stanford-crypto-sha256-iterative                  115.328+-0.548      ?     115.616+-0.414      ?     116.147+-0.428         ?

   <arithmetic> *                                    218.362+-1.025      ^     216.811+-0.269      ^     214.038+-0.385         ^ definitely 1.0202x faster
   <geometric>                                       185.824+-0.652      ^     184.921+-0.227      ^     183.901+-0.254         ^ definitely 1.0105x faster
   <harmonic>                                        159.246+-0.417            158.743+-0.238            158.693+-0.275           might be 1.0035x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
JSRegress:
   adapt-to-double-divide                            22.8095+-0.1505     ?     22.8709+-0.0898           22.7246+-0.0576        
   aliased-arguments-getbyval                         0.9569+-0.0035     ?      0.9583+-0.0040     ?      0.9610+-0.0056        ?
   allocate-big-object                                2.6257+-0.0122     ?      2.6355+-0.0203     ?      2.6505+-0.0197        ?
   arity-mismatch-inlining                            0.9014+-0.0051     !      0.9143+-0.0045     ?      0.9195+-0.0037        ! definitely 1.0200x slower
   array-access-polymorphic-structure                 9.8793+-0.1233            9.7956+-0.0976            9.6965+-0.0683          might be 1.0188x faster
   array-nonarray-polymorhpic-access                 56.5963+-0.3435           56.5801+-0.2845           56.5191+-0.5028        
   array-with-double-add                              5.7004+-0.0203     ?      5.7645+-0.0450            5.7307+-0.0645        ?
   array-with-double-increment                        4.3179+-0.0080     ?      4.3217+-0.0067            4.3144+-0.0445        
   array-with-double-mul-add                          6.8268+-0.0732     ?      6.8446+-0.0989     ?      6.8777+-0.0278        ?
   array-with-double-sum                              8.0709+-0.0841            8.0460+-0.0683     ?      8.0838+-0.0964        ?
   array-with-int32-add-sub                          10.4845+-0.0753     ?     10.4955+-0.1392           10.3888+-0.0766        
   array-with-int32-or-double-sum                     8.0293+-0.0650     ?      8.0713+-0.0390     ?      8.1021+-0.0548        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    121.6957+-1.4001     ?    123.3762+-2.2197          121.0325+-0.9226        
   ArrayBuffer-DataView-alloc-long-lived             32.6782+-1.1266     ?     35.0164+-1.5221     ^     31.3492+-0.3938          might be 1.0424x faster
   ArrayBuffer-Int32Array-byteOffset                  8.9970+-0.0554            8.9814+-0.0882     ^      7.0346+-0.0562        ^ definitely 1.2790x faster
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    217.8981+-2.6617     ?    218.3701+-1.7238          218.1214+-1.0683        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    168.5089+-1.1312     ^    164.7660+-0.6732     !    170.2658+-1.4974        ? might be 1.0104x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    123.4058+-1.3980          122.0156+-1.8775     ?    123.2818+-1.6288        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     51.2541+-1.2028           50.9293+-0.2759           50.8625+-0.3620        
   ArrayBuffer-Int8Array-alloc-long-lived            31.0486+-0.8730           30.2025+-0.7521     !     31.4497+-0.2337        ? might be 1.0129x slower
   ArrayBuffer-Int8Array-alloc                       28.5149+-1.2063     ^     26.3635+-0.1041     !     28.4125+-0.2348        
   asmjs_bool_bug                                    11.4874+-0.1621     ^     11.1345+-0.1208     ^     10.1571+-0.0441        ^ definitely 1.1310x faster
   basic-set                                         21.4774+-0.1140     ?     21.5328+-0.1828           21.2973+-0.1971        
   big-int-mul                                        5.6153+-0.0685     ?      5.6580+-0.0600            5.6548+-0.0148        ?
   boolean-test                                       4.4679+-0.0143     ?      4.4759+-0.0308            4.4206+-0.0250        ^ definitely 1.0107x faster
   branch-fold                                        4.9567+-0.0230     ?      4.9804+-0.0379     ?      4.9953+-0.0376        ?
   cast-int-to-double                                14.2670+-0.1114     ?     14.4006+-0.0822     ^     12.4316+-0.0916        ^ definitely 1.1476x faster
   cell-argument                                     16.5912+-0.0568           16.5591+-0.1752     ?     16.6917+-0.1536        ?
   cfg-simplify                                       3.9697+-0.0101     ?      3.9732+-0.0088            3.9713+-0.0063        ?
   cmpeq-obj-to-obj-other                            14.0770+-0.5360           13.8792+-0.3308     ^     12.6677+-0.5365        ^ definitely 1.1113x faster
   constant-test                                      8.8220+-0.1096     ?      8.8606+-0.0727     ?      8.9553+-0.0678        ? might be 1.0151x slower
   DataView-custom-properties                       127.5100+-1.1530     ?    128.9706+-0.7854     ^    126.8262+-0.9501        
   delay-tear-off-arguments-strictmode                3.4911+-0.0175     ?      3.5350+-0.0519            3.5147+-0.0117        ?
   destructuring-arguments-length                   173.6541+-1.5129          171.3948+-1.8163     ?    175.2503+-2.6126        ?
   destructuring-arguments                            8.6912+-0.0485            8.6900+-0.1071     ?      8.7288+-0.0675        ?
   destructuring-swap                                 8.5404+-0.0830            8.5171+-0.0959     ?      8.5532+-0.1127        ?
   direct-arguments-getbyval                          0.8414+-0.0136            0.8344+-0.0068     ?      0.8534+-0.0128        ? might be 1.0144x slower
   double-pollution-getbyval                         11.1453+-0.1562           11.1355+-0.1023           11.1254+-0.0258        
   double-pollution-putbyoffset                       6.9511+-0.3597            6.8221+-0.0334     ?      6.8831+-0.0419        
   empty-string-plus-int                             11.1772+-0.1071     ^     10.8731+-0.0647     !     11.2000+-0.1055        ?
   emscripten-cube2hash                              52.3148+-0.7171           52.2263+-0.7355     ?     52.3375+-0.2488        ?
   emscripten-memops                               9272.6123+-24.9598        9237.0210+-24.3818    ?   9248.2187+-27.3342       
   external-arguments-getbyval                        2.0097+-0.0191            2.0077+-0.0169            2.0010+-0.0115        
   external-arguments-putbyval                        3.0306+-0.0193            3.0273+-0.0189     ?      3.0323+-0.0209        ?
   Float32Array-matrix-mult                           6.4246+-0.0876            6.4085+-0.0754     ?      6.4744+-0.1234        ?
   Float32Array-to-Float64Array-set                  95.2276+-0.6756     !     96.4917+-0.4695     !     98.5679+-0.7311        ! definitely 1.0351x slower
   Float64Array-alloc-long-lived                    110.3066+-0.7219          110.0045+-0.5300     ^    108.2763+-0.4682        ^ definitely 1.0188x faster
   Float64Array-to-Int16Array-set                   119.0735+-0.8367     ?    119.2173+-1.8576          116.9845+-1.2677          might be 1.0179x faster
   fold-double-to-int                                25.7797+-0.4649           25.6166+-0.2934           25.5552+-0.1057        
   for-of-iterate-array-entries                       8.5379+-0.0940     ?      8.6966+-0.1614            8.5934+-0.1708        ?
   for-of-iterate-array-keys                          3.5554+-0.0740            3.5348+-0.0272            3.5260+-0.0560        
   for-of-iterate-array-values                        3.0051+-0.0523     ?      3.0397+-0.0345            3.0097+-0.0528        ?
   function-dot-apply                                 3.1955+-0.0098     ?      3.1972+-0.0068     ?      3.2227+-0.0477        ?
   function-test                                      5.0523+-0.0641     ^      4.9176+-0.0453     !      5.0526+-0.0227        ?
   get-by-id-chain-from-try-block                     7.5673+-0.0823     ?      7.6058+-0.0605     ?      7.6149+-0.0410        ?
   get-by-id-proto-or-self                           23.4803+-0.3637           23.4063+-0.2953           23.2544+-0.2471        
   get-by-id-self-or-proto                           23.5496+-0.9241           23.4492+-1.0060     ?     24.2684+-0.7142        ? might be 1.0305x slower
   get_callee_monomorphic                             4.7384+-0.0339     ?      4.7886+-0.0647     ?      4.8417+-0.0300        ! definitely 1.0218x slower
   get_callee_polymorphic                             4.5383+-0.0136     ?      4.5824+-0.0440     ^      4.4976+-0.0113        ^ definitely 1.0091x faster
   HashMap-put-get-iterate-keys                      43.7997+-0.2355     ?     43.9359+-0.4241     !     47.0016+-0.6132        ! definitely 1.0731x slower
   HashMap-put-get-iterate                           59.8639+-0.3147     ?     60.3349+-0.2163     !     63.1178+-0.2390        ! definitely 1.0544x slower
   HashMap-string-put-get-iterate                    54.7833+-0.3399     ^     53.5820+-0.3141     !     55.1113+-0.1943        ?
   imul-double-only                                  17.7650+-0.0972     ?     18.2058+-0.8810           17.8960+-0.1375        ?
   imul-int-only                                     14.9201+-0.1461     ?     15.0726+-0.2349           15.0074+-0.1686        ?
   imul-mixed                                        22.2164+-0.0787           22.2125+-0.1353     ?     22.2378+-0.0952        ?
   in-four-cases                                     25.8585+-0.0996     ?     25.9142+-0.0835     ?     25.9268+-0.0613        ?
   in-one-case-false                                 12.2129+-0.0762     ?     12.3918+-0.1434           12.1671+-0.0902        
   in-one-case-true                                  12.2912+-0.1580           12.1615+-0.1118     ?     12.3350+-0.1530        ?
   in-two-cases                                      12.9584+-0.1227           12.9274+-0.1040     ?     13.0456+-0.1616        ?
   indexed-properties-in-objects                      4.6775+-0.0326            4.6458+-0.0552            4.6285+-0.0210          might be 1.0106x faster
   inline-arguments-access                            1.5420+-0.0306            1.5110+-0.0750     ?      1.5503+-0.0052        ?
   inline-arguments-local-escape                     22.4794+-0.0924           22.4316+-0.1565     !     22.9300+-0.2251        ! definitely 1.0200x slower
   inline-get-scoped-var                              6.9817+-0.1300     ?      7.1031+-0.0804            7.0540+-0.0898        ? might be 1.0104x slower
   inlined-put-by-id-transition                      15.1604+-0.2362     ?     15.3648+-0.2632           15.3573+-0.1664        ? might be 1.0130x slower
   int-or-other-abs-then-get-by-val                   9.8535+-0.1187     ?      9.8729+-0.0968     ^      9.3529+-0.0588        ^ definitely 1.0535x faster
   int-or-other-abs-zero-then-get-by-val             41.8238+-0.0771     ^     40.8356+-0.5288     !     41.9303+-0.1342        ?
   int-or-other-add-then-get-by-val                  10.8766+-0.0970           10.8547+-0.1525     ^      9.7009+-0.0782        ^ definitely 1.1212x faster
   int-or-other-add                                  11.1181+-0.0733     ?     11.1306+-0.0815           11.0026+-0.1055          might be 1.0105x faster
   int-or-other-div-then-get-by-val                   6.7571+-0.0298     ?      6.7624+-0.0332     ^      6.4475+-0.0244        ^ definitely 1.0480x faster
   int-or-other-max-then-get-by-val                   8.8592+-0.1091     ?      9.0039+-0.1708            8.9536+-0.1759        ? might be 1.0107x slower
   int-or-other-min-then-get-by-val                   7.7983+-0.0361     ?      7.8221+-0.0470     ^      7.1710+-0.0311        ^ definitely 1.0875x faster
   int-or-other-mod-then-get-by-val                   6.1808+-0.0999     ?      6.2244+-0.0917            6.0950+-0.0808          might be 1.0141x faster
   int-or-other-mul-then-get-by-val                   6.6563+-0.0667     ?      6.6813+-0.0714     ^      6.4414+-0.0213        ^ definitely 1.0334x faster
   int-or-other-neg-then-get-by-val                   8.4598+-0.0637            8.3860+-0.0962     ^      7.9227+-0.0761        ^ definitely 1.0678x faster
   int-or-other-neg-zero-then-get-by-val             42.0075+-0.1510     ^     40.3923+-0.8565     ?     46.9566+-11.2554       ? might be 1.1178x slower
   int-or-other-sub-then-get-by-val                  10.8664+-0.0825     ?     10.9820+-0.1399     ^     10.1188+-0.1351        ^ definitely 1.0739x faster
   int-or-other-sub                                   8.9281+-0.0765            8.8818+-0.0609     ^      8.0830+-0.0792        ^ definitely 1.1046x faster
   int-overflow-local                                 6.5183+-0.0940            6.4631+-0.0973     !      6.7037+-0.0804        ! definitely 1.0284x slower
   Int16Array-alloc-long-lived                       75.4744+-0.7306           75.3618+-0.4057     ^     72.7459+-0.2952        ^ definitely 1.0375x faster
   Int16Array-bubble-sort-with-byteLength            48.6752+-0.1248     ?     48.7386+-0.1274     !     49.0732+-0.1037        ! definitely 1.0082x slower
   Int16Array-bubble-sort                            48.1737+-0.1441           48.1617+-0.1452     !     48.5731+-0.1434        ! definitely 1.0083x slower
   Int16Array-load-int-mul                            2.0468+-0.0081     ?      2.0742+-0.0632            2.0624+-0.0064        ! definitely 1.0076x slower
   Int16Array-to-Int32Array-set                      95.0097+-0.7633     !     96.2925+-0.2024     ^     86.1640+-1.8124        ^ definitely 1.1027x faster
   Int32Array-alloc-huge-long-lived                 711.5034+-2.4485          709.2382+-2.7370     ?    709.3981+-2.6997        
   Int32Array-alloc-huge                            818.5805+-6.4183          815.7407+-6.3050     ?    819.4341+-7.2667        ?
   Int32Array-alloc-large-long-lived                971.9801+-8.8105          970.2190+-6.0441     ?    972.8456+-6.3963        ?
   Int32Array-alloc-large                            45.3736+-0.8574     ?     45.7057+-0.9674     ?     46.3219+-0.8697        ? might be 1.0209x slower
   Int32Array-alloc-long-lived                       83.7577+-0.5173     ?     84.1006+-0.4842     ^     80.9317+-0.8971        ^ definitely 1.0349x faster
   Int32Array-alloc                                   4.5118+-0.0145            4.5107+-0.0126     ?      4.5530+-0.0507        ?
   Int32Array-Int8Array-view-alloc                   15.0046+-0.0763           14.8880+-0.1027     !     15.1614+-0.0945        ? might be 1.0105x slower
   int52-spill                                       12.1899+-0.1115           12.0739+-0.1616           12.0577+-0.1328          might be 1.0110x faster
   Int8Array-alloc-long-lived                        71.9219+-0.4762           71.2560+-0.7434     ^     67.9194+-0.5820        ^ definitely 1.0589x faster
   Int8Array-load-with-byteLength                     5.0308+-0.0147     ?      5.0432+-0.0192     ?      5.0573+-0.0072        ! definitely 1.0053x slower
   Int8Array-load                                     5.0389+-0.0085     ?      5.0422+-0.0164     ?      5.0453+-0.0408        ?
   integer-divide                                    15.5134+-0.0828           15.5109+-0.1052     ?     15.6443+-0.1717        ?
   integer-modulo                                     1.9830+-0.0155     ?      1.9884+-0.0112     !      2.1223+-0.0189        ! definitely 1.0703x slower
   large-int-captured                                 9.1565+-0.1413            9.0936+-0.2129     ?      9.3506+-0.1847        ? might be 1.0212x slower
   large-int-neg                                     25.9457+-0.0932           25.9073+-0.1399     ?     25.9642+-0.2328        ?
   large-int                                         23.4918+-0.3344           23.3021+-0.1392           23.2450+-0.1887          might be 1.0106x faster
   lots-of-fields                                    11.1841+-0.0466     ^     10.9684+-0.0465     ?     10.9898+-0.0694        ^ definitely 1.0177x faster
   make-indexed-storage                               4.2448+-0.0381            4.2182+-0.0277            4.2048+-0.0927        
   make-rope-cse                                      5.9127+-0.0785     ?      6.0364+-0.1633            5.9099+-0.0787        
   marsaglia-larger-ints                            119.5746+-0.2439          119.4272+-0.3135          119.3517+-0.1495        
   marsaglia-osr-entry                               52.6655+-0.1362     ?     52.7665+-0.1263           52.7596+-0.1339        ?
   marsaglia                                        519.9486+-0.3890     ?    520.1472+-0.4219          520.0290+-0.8336        ?
   method-on-number                                  31.3616+-0.2276     !     33.0326+-0.5318           32.3031+-0.7358        ? might be 1.0300x slower
   negative-zero-divide                               0.4014+-0.0017     ?      0.4039+-0.0025     ?      0.4078+-0.0034        ! definitely 1.0159x slower
   negative-zero-modulo                               0.3864+-0.0058            0.3845+-0.0022     !      0.3883+-0.0014        ?
   negative-zero-negate                               0.3711+-0.0035            0.3701+-0.0028     ?      0.3861+-0.0266        ? might be 1.0404x slower
   nested-function-parsing-random                   394.2936+-2.2065     ^    382.4261+-0.9052     !    387.0992+-1.7549        ^ definitely 1.0186x faster
   nested-function-parsing                           48.0641+-0.1292     ?     48.1419+-0.6865     ?     48.6539+-0.9856        ? might be 1.0123x slower
   new-array-buffer-dead                              3.7805+-0.0159     ?      3.7904+-0.0185     ?      3.8066+-0.0122        ?
   new-array-buffer-push                             10.6692+-0.1125           10.6630+-0.0856           10.6608+-0.1611        
   new-array-dead                                    28.6384+-0.0571           28.5724+-0.0978     ?     28.7558+-0.3010        ?
   new-array-push                                     6.9297+-0.0737     ?      6.9979+-0.1872            6.9046+-0.0638        
   number-test                                        4.3827+-0.0093     ?      4.4104+-0.0230     ^      4.3152+-0.0360        ^ definitely 1.0157x faster
   object-closure-call                               13.2244+-0.0352     ?     13.3235+-0.0918     ?     13.3578+-0.0728        ! definitely 1.0101x slower
   object-test                                        4.8301+-0.0483     ?      4.8823+-0.0808     ^      4.7536+-0.0266        ^ definitely 1.0161x faster
   poly-stricteq                                     91.4213+-1.9449           90.5640+-1.4715     ^     80.0481+-0.1473        ^ definitely 1.1421x faster
   polymorphic-structure                             21.0641+-0.3284     ?     21.5131+-0.2462           21.2325+-0.2929        ?
   polyvariant-monomorphic-get-by-id                 11.9946+-0.0679     ?     12.0978+-0.0688           12.0496+-0.0444        ?
   put-by-id                                         19.2300+-0.3155     ?     19.8659+-0.3537           19.5487+-0.3045        ? might be 1.0166x slower
   put-by-val-large-index-blank-indexing-type   
                                                     11.1557+-0.2064           11.0030+-0.2285     ?     11.0335+-0.1093          might be 1.0111x faster
   rare-osr-exit-on-local                            20.3186+-0.0982     ?     20.3220+-0.1131           20.2770+-0.0823        
   register-pressure-from-osr                        31.3731+-0.2330     ?     31.6402+-0.1230     !     32.1539+-0.0923        ! definitely 1.0249x slower
   simple-activation-demo                            35.1986+-0.0749     ?     35.4050+-0.4254           35.1165+-0.1751        
   slow-array-profile-convergence                     3.9881+-0.0170     !      4.0482+-0.0174     ?      4.1407+-0.2274        ? might be 1.0383x slower
   slow-convergence                                   3.4239+-0.0147     ?      3.4753+-0.0691            3.4566+-0.0195        ?
   sparse-conditional                                 1.3478+-0.0128     ?      1.3496+-0.0097            1.3493+-0.0035        ?
   splice-to-remove                                  77.7670+-0.3664           77.2725+-0.2259     !     78.0687+-0.4646        ?
   stepanov_container                             11672.0730+-17.3851    ?  11876.1768+-283.0485      11669.5101+-26.4594       
   string-concat-object                               2.9955+-0.0198            2.9888+-0.0133     ?      3.0198+-0.0349        ?
   string-concat-pair-object                          2.9266+-0.0180     ?      2.9417+-0.0360            2.9052+-0.0238        
   string-concat-pair-simple                         17.4830+-0.3026           17.4476+-0.2843           17.2484+-0.2723          might be 1.0136x faster
   string-concat-simple                              17.1912+-0.3554     ?     17.5383+-0.3965           17.3712+-0.2868        ? might be 1.0105x slower
   string-cons-repeat                                10.4967+-0.0368     ?     10.5149+-0.0443           10.4768+-0.0551        
   string-cons-tower                                 10.9854+-0.0702     ?     11.0376+-0.0275           10.9743+-0.0464        
   string-equality                                   43.6187+-0.7293           43.5188+-0.4497     ?     43.6642+-0.4313        ?
   string-get-by-val-big-char                        13.6582+-0.0942           13.5103+-0.0766     !     13.7061+-0.0864        ?
   string-get-by-val-out-of-bounds-insane             5.9432+-0.1378     ?      6.0419+-0.0985     ?      6.0465+-0.1903        ? might be 1.0174x slower
   string-get-by-val-out-of-bounds                    5.3602+-0.0219            5.3499+-0.0094            5.3332+-0.0457        
   string-get-by-val                                  4.9161+-0.0171            4.9149+-0.0414            4.9079+-0.0190        
   string-hash                                        2.7689+-0.0077     ?      2.7837+-0.0311     ?      2.7851+-0.0224        ?
   string-long-ident-equality                        38.5721+-0.5298     ?     39.1669+-0.6131           38.8598+-0.6125        ?
   string-repeat-arith                               47.8751+-0.3645     ?     48.4335+-0.2590           48.1551+-0.1584        ?
   string-sub                                        96.3876+-0.3512     !     98.2543+-1.2782           97.9476+-0.5947        ! definitely 1.0162x slower
   string-test                                        4.3067+-0.0051     ?      4.3300+-0.0331            4.3106+-0.0224        ?
   string-var-equality                               71.4104+-0.4600           71.0679+-0.5971     !     86.6200+-2.0061        ! definitely 1.2130x slower
   structure-hoist-over-transitions                   3.4273+-0.0395            3.4067+-0.0169     ?      3.4085+-0.0142        
   switch-char-constant                               3.5009+-0.0163     ?      3.5265+-0.0462            3.5023+-0.0137        ?
   switch-char                                        8.2287+-0.0586            8.1844+-0.0332            8.1554+-0.0993        
   switch-constant                                    9.2414+-0.0707     ?      9.2938+-0.1167     ?      9.3430+-0.0889        ? might be 1.0110x slower
   switch-string-basic-big-var                       21.5836+-0.3059           21.2087+-0.0777     ^     20.3483+-0.1323        ^ definitely 1.0607x faster
   switch-string-basic-big                           21.6347+-0.0839     ?     21.6808+-0.0813           21.5644+-0.1032        
   switch-string-basic-var                           21.2091+-0.1139           21.1673+-0.3029     ^     20.2085+-0.0757        ^ definitely 1.0495x faster
   switch-string-basic                               22.9189+-0.7718     ?     23.4817+-0.4436     ^     22.3744+-0.4742          might be 1.0243x faster
   switch-string-big-length-tower-var                29.7823+-0.0485           29.7547+-0.1100     !     29.9882+-0.1151        ! definitely 1.0069x slower
   switch-string-length-tower-var                    23.5469+-0.0977     ?     23.5547+-0.1466     ^     21.6857+-0.1381        ^ definitely 1.0858x faster
   switch-string-length-tower                        17.4343+-0.1022           17.3812+-0.0517     ^     17.0125+-0.0733        ^ definitely 1.0248x faster
   switch-string-short                               17.4451+-0.1267           17.4094+-0.1002     ^     17.0320+-0.2299        ^ definitely 1.0243x faster
   switch                                            16.0402+-0.0932     ?     16.1979+-0.2580           16.0075+-0.1125        
   tear-off-arguments-simple                          2.1946+-0.0078     !      2.2119+-0.0076     ?      2.2132+-0.0143        ?
   tear-off-arguments                                 3.5564+-0.0615     ?      3.5693+-0.0662            3.5551+-0.0198        
   temporal-structure                                20.8821+-0.0995     ?     21.3279+-0.6023     ^     17.0827+-0.1299        ^ definitely 1.2224x faster
   to-int32-boolean                                  22.2426+-0.1258     ?     22.3091+-0.1139     ?     22.3962+-0.2149        ?
   undefined-test                                     4.5781+-0.0438            4.5747+-0.0055     ^      4.5161+-0.0440          might be 1.0137x faster
   weird-inlining-const-prop                          2.3110+-0.0615     ?      2.3185+-0.0396            2.2991+-0.0078        

   <arithmetic>                                     162.0756+-0.1220     ?    162.9221+-1.6519          161.7980+-0.2469          might be 1.0017x faster
   <geometric> *                                     14.7970+-0.0114     ?     14.8109+-0.0134     ^     14.7021+-0.0143        ^ definitely 1.0065x faster
   <harmonic>                                         5.6123+-0.0095     ?      5.6185+-0.0092     ?      5.6313+-0.0272        ? might be 1.0034x slower

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
All benchmarks:
   <arithmetic>                                     227.8166+-0.2694     ?    228.2682+-1.0498          227.3625+-0.3214          might be 1.0020x faster
   <geometric>                                       21.2910+-0.0124     ?     21.2961+-0.0158     ^     21.1125+-0.0131        ^ definitely 1.0085x faster
   <harmonic>                                         4.7970+-0.0113            4.7909+-0.0084     ^      4.7475+-0.0140        ^ definitely 1.0104x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
Geomean of preferred means:
   <scaled-result>                                   49.1013+-0.0476           49.0594+-0.0500     ^     48.5262+-0.0442        ^ definitely 1.0119x faster
Comment 11 Filip Pizlo 2013-11-19 15:49:38 PST
Created attachment 217347 [details]
the patch

Rebased and made some things a bit better.
Comment 12 Filip Pizlo 2013-11-19 21:47:03 PST
Landed in http://trac.webkit.org/changeset/159545
Comment 13 Dean Jackson 2013-11-20 10:41:22 PST
This has caused a couple of test breakages on WK1 release (at least)
e.g.
http://build.webkit.org/results/Apple%20Mavericks%20Release%20WK1%20(Tests)/r159568%20(1047)/results.html
Comment 14 Dean Jackson 2013-11-20 10:56:02 PST
Hopefully fixed in r159573