Bug 72709 - DFG JIT fails speculation on InstanceOf if the base is not an object
Summary: DFG JIT fails speculation on InstanceOf if the base is not an object
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Nobody
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2011-11-18 03:25 PST by Filip Pizlo
Modified: 2011-11-18 17:00 PST (History)
0 users

See Also:


Attachments
the patch (11.95 KB, patch)
2011-11-18 03:31 PST, Filip Pizlo
ggaren: 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 2011-11-18 03:25:48 PST
Patch forthcoming.
Comment 1 Filip Pizlo 2011-11-18 03:26:02 PST
rdar://problem/10468892
Comment 2 Filip Pizlo 2011-11-18 03:31:45 PST
Created attachment 115779 [details]
the patch

Seems like a 1% win on V8 using the V8 harness:



[pizlo@nitroflex benchmarks] /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc run.js 
Richards: 10855
DeltaBlue: 7207
Crypto: 16171
RayTrace: 9333
EarleyBoyer: 10527
RegExp: 2252
Splay: 8964
----
Score (version 6): 8207
[pizlo@nitroflex benchmarks] /Volumes/Data/pizlo/senary/OpenSource/WebKitBuild/Release/jsc run.js 
Richards: 10862
DeltaBlue: 7247
Crypto: 16377
RayTrace: 9268
EarleyBoyer: 10851
RegExp: 2270
Splay: 8997
----
Score (version 6): 8271
[pizlo@nitroflex benchmarks] irb
>> 8271/8207.0
=> 1.00779822103083
>> quit
[pizlo@nitroflex benchmarks] irb
>> 10851/10527.0
=> 1.03077799943004
>> quit


Seems neutral according to my harness, running on 3 different machines.
Comment 3 Filip Pizlo 2011-11-18 14:46:33 PST
This ends up being a much bigger deal on 32-64:



Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
"TipOfTree32" at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100733)
"FixInstanceOf32" at /Volumes/Data/pizlo/senary/OpenSource/WebKitBuild/Release/jsc (r100733)

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

                                           TipOfTree32           FixInstanceOf32                                 
SunSpider:
   3d-cube                               11.0565+-0.0299    ^    10.9706+-0.0216       ^ definitely 1.0078x faster
   3d-morph                              13.2514+-0.0265         13.2316+-0.0434       
   3d-raytrace                           12.1318+-0.0743    ^    11.9606+-0.0105       ^ definitely 1.0143x faster
   access-binary-trees                    2.2790+-0.0137          2.2753+-0.0140       
   access-fannkuch                       10.4670+-0.0196         10.4511+-0.0317       
   access-nbody                           6.8477+-0.0034    ?     6.8616+-0.0438       ?
   access-nsieve                          3.7028+-0.0046    ?     3.7084+-0.0062       ?
   bitops-3bit-bits-in-byte               1.5467+-0.0237          1.5414+-0.0256       
   bitops-bits-in-byte                    6.0429+-0.0211          6.0359+-0.0215       
   bitops-bitwise-and                     4.6970+-0.0295          4.6806+-0.0102       
   bitops-nsieve-bits                     8.1776+-0.0088    ?     8.1850+-0.0094       ?
   controlflow-recursive                  3.8011+-0.0085    ?     3.8234+-0.0388       ?
   crypto-aes                            11.3316+-0.0411         11.2732+-0.0304       
   crypto-md5                             3.9076+-0.0214    ?     3.9386+-0.0328       ?
   crypto-sha1                            3.2138+-0.0117          3.2057+-0.0163       
   date-format-tofte                     14.4072+-0.3327         14.2207+-0.1071         might be 1.0131x faster
   date-format-xparb                     14.6767+-0.0894    ^    14.0995+-0.0918       ^ definitely 1.0409x faster
   math-cordic                           12.0391+-0.0448         12.0278+-0.0305       
   math-partial-sums                     15.0837+-0.0323    ^    14.9921+-0.0081       ^ definitely 1.0061x faster
   math-spectral-norm                     3.2535+-0.0042          3.2525+-0.0133       
   regexp-dna                            14.7461+-0.0388    !    14.8953+-0.0641       ! definitely 1.0101x slower
   string-base64                          5.4465+-0.0255    ?     5.4520+-0.0296       ?
   string-fasta                          11.6805+-0.0770         11.6651+-0.0407       
   string-tagcloud                       17.8951+-0.1342         17.6676+-0.1127         might be 1.0129x faster
   string-unpack-code                    28.6359+-0.1221    ?    28.6707+-0.0910       ?
   string-validate-input                  7.6607+-0.0558          7.6206+-0.0340       

   <arithmetic> *                         9.5377+-0.0206    ^     9.4887+-0.0193       ^ definitely 1.0052x faster
   <geometric>                            7.6546+-0.0178          7.6278+-0.0204         might be 1.0035x faster
   <harmonic>                             5.8857+-0.0224          5.8754+-0.0272         might be 1.0018x faster

                                           TipOfTree32           FixInstanceOf32                                 
V8:
   crypto                               117.8071+-0.4663    ?   118.0608+-0.5587       ?
   deltablue                            225.9921+-2.0347        225.3533+-0.7155       
   earley-boyer                         237.4998+-0.3201    ^   211.0544+-2.9183       ^ definitely 1.1253x faster
   raytrace                              82.8744+-0.4197    ?    83.1744+-0.4439       ?
   regexp                               156.3446+-0.2260    ^   154.9049+-0.2450       ^ definitely 1.0093x faster
   richards                             243.1000+-1.1683        242.1290+-1.0782       
   splay                                116.0900+-0.9075        115.6935+-1.7122       

   <arithmetic>                         168.5297+-0.3302    ^   164.3386+-0.5964       ^ definitely 1.0255x faster
   <geometric> *                        156.6193+-0.2530    ^   153.6933+-0.5753       ^ definitely 1.0190x faster
   <harmonic>                           144.8763+-0.2079    ^   143.1380+-0.5643       ^ definitely 1.0121x faster

                                           TipOfTree32           FixInstanceOf32                                 
Kraken:
   ai-astar                             987.4732+-1.8545    ?   987.9623+-1.4814       ?
   audio-beat-detection                 495.2940+-0.4341        495.0814+-0.8846       
   audio-dft                            476.3770+-2.1062    ?   476.9451+-2.4131       ?
   audio-fft                            325.9456+-0.1807    ?   326.1011+-0.2349       ?
   audio-oscillator                     602.9375+-2.5446        601.9519+-2.4284       
   imaging-darkroom                     522.2273+-4.5220    ?   523.4006+-4.6703       ?
   imaging-desaturate                  1203.9462+-1.6900    ?  1204.3335+-2.6716       ?
   imaging-gaussian-blur               1041.1411+-1.0568    ?  1041.4093+-1.3214       ?
   json-parse-financial                  90.6251+-0.1707    ?    90.8215+-0.1234       ?
   json-stringify-tinderbox             139.8089+-0.2583    ?   140.4707+-0.5278       ?
   stanford-crypto-aes                  165.6960+-0.7367    ?   165.7563+-0.4304       ?
   stanford-crypto-ccm                  157.1189+-0.4360    !   159.0179+-0.5495       ! definitely 1.0121x slower
   stanford-crypto-pbkdf2               316.5895+-0.6521    ?   316.8845+-0.2622       ?
   stanford-crypto-sha256-iterative     127.9855+-0.5210        127.8547+-0.2938       

   <arithmetic> *                       475.2261+-0.4900    ?   475.5708+-0.5859       ? might be 1.0007x slower
   <geometric>                          349.1768+-0.3579    ?   349.7284+-0.3707       ? might be 1.0016x slower
   <harmonic>                           253.9755+-0.3082    !   254.6060+-0.2736       ! definitely 1.0025x slower

                                           TipOfTree32           FixInstanceOf32                                 
All benchmarks:
   <arithmetic>                         171.9330+-0.1741    ^   171.3844+-0.2220       ^ definitely 1.0032x faster
   <geometric>                           37.4431+-0.0565    ^    37.2831+-0.0692       ^ definitely 1.0043x faster
   <harmonic>                            10.3961+-0.0387         10.3773+-0.0469         might be 1.0018x faster

                                           TipOfTree32           FixInstanceOf32                                 
Geomean of preferred means:
   <scaled-result>                       89.2062+-0.0913    ^    88.5165+-0.1512       ^ definitely 1.0078x faster
Comment 4 Geoffrey Garen 2011-11-18 15:28:18 PST
Comment on attachment 115779 [details]
the patch

r=-me
Comment 5 Filip Pizlo 2011-11-18 17:00:57 PST
Landed in http://trac.webkit.org/changeset/100829