[webkit-reviews] review requested: [Bug 178312] [JSC][LLInt] Implement Polymorphic Inline Caches on op_get_by_id : [Attachment 323816] WIP - It starts

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Sat Oct 14 12:29:36 PDT 2017


Caio Lima <ticaiolima at gmail.com> has asked  for review:
Bug 178312: [JSC][LLInt] Implement Polymorphic Inline Caches on op_get_by_id
https://bugs.webkit.org/show_bug.cgi?id=178312

Attachment 323816: WIP - It starts

https://bugs.webkit.org/attachment.cgi?id=323816&action=review




--- Comment #1 from Caio Lima <ticaiolima at gmail.com> ---
Created attachment 323816

  --> https://bugs.webkit.org/attachment.cgi?id=323816&action=review

WIP - It starts

This Patch starts the implementation. I'm interested in collecting feedback
from you to keep working on it. My idea is to cache Structures using FIFO
policy, to be able to catch different call-sites of a function and optimize for
them (Probably I'm going to create a case for that). IMHO, this policy seems
very simple, but even with it, I could measure some improvements on benchmarks:

PS.: I collected following results running benchmarks with "JSC_useJIT=false"

Benchmark report for V8Spider, Octane, and Kraken on Caios-MacBook-Pro
(MacBookPro12,1).

VMs tested:
"baseline" at
/Users/caiolima/open_projects/WebKit/WebKitBaselineBuild/Release/jsc
"changes" at /Users/caiolima/open_projects/WebKit/WebKitBuild/Release/jsc

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.

						 baseline		  
changes 				     
V8Spider:
   crypto				    683.1670+-19.2621	 ?   
835.8115+-431.9966	? might be 1.2234x slower
   deltablue				   1362.3902+-27.2429	 ?  
1370.7209+-18.6387	 ?
   earley-boyer 			    659.4617+-399.6603	     
490.7356+-11.2124	  might be 1.3438x faster
   raytrace				    264.5184+-19.7043	 ?   
266.9626+-16.2422	?
   regexp				    148.3394+-3.1761	     
148.2460+-8.9221	
   richards				   1456.1012+-30.0906	    
1454.5450+-40.0814	 
   splay				    231.0293+-8.9334	 ^   
194.3757+-2.3684	^ definitely 1.1886x faster

   <geometric>				    496.4563+-34.7263	     
480.6935+-38.1704	  might be 1.0328x faster

						 baseline		  
changes 				     
Octane:
   encrypt				     4.29210+-0.08702	 ?    
4.32454+-0.08857       ?
   decrypt				    77.00315+-1.79384	 ?   
79.30127+-1.12004	? might be 1.0298x slower
   deltablue			    x2	     9.31920+-0.18430	      
9.13937+-0.25287	 might be 1.0197x faster
   earley				     7.89351+-2.62695	      
6.85874+-0.15562	 might be 1.1509x faster
   boyer				   117.29007+-1.82930	    
115.10083+-0.65218	   might be 1.0190x faster
   navier-stokes		    x2	    90.61067+-17.35486	     
80.68529+-2.79175	  might be 1.1230x faster
   raytrace			    x2	    45.02483+-0.48965	     
43.93484+-0.63733	  might be 1.0248x faster
   richards			    x2	     4.28244+-0.06543	      
4.25291+-0.08199       
   splay			    x2	     3.04093+-0.05215	 ^    
2.71874+-0.07910       ^ definitely 1.1185x faster
   regexp			    x2	    82.33913+-16.75664	     
71.77397+-5.44225	  might be 1.1472x faster
   pdfjs			    x2	   217.93367+-28.88964	    
207.78765+-3.79388	   might be 1.0488x faster
   mandreel			    x2	  2951.07356+-61.71802	   
2905.05659+-50.70337	    might be 1.0158x faster
   gbemu			    x2	   623.67314+-30.73659	 ?  
656.00748+-23.37269	 ? might be 1.0518x slower
   closure				     0.73940+-0.01035	 ?    
0.74472+-0.00569       ?
   jquery				    10.41921+-1.39356	      
9.88610+-0.63410	 might be 1.0539x faster
   box2d			    x2	   163.96675+-8.26118	    
161.95834+-3.38487	   might be 1.0124x faster
   zlib 			    x2	 13847.71583+-227.59617  ^
12545.11145+-496.99654	   ^ definitely 1.1038x faster
   typescript			    x2	  3462.74837+-54.67934	   
3430.36820+-66.78332	  

   <geometric>				    89.44004+-1.44483	 ^   
86.00409+-0.88517	^ definitely 1.0400x faster

Since it isn't possible to re-patch code on Interpreter, I'm using a loop and a
new "op_get_by_id_polymorphic" to handle cached cases and avoid slow paths on
property lookups.


More information about the webkit-reviews mailing list