Dynamic elimination of overflow tests in a trace compiler

作者: Rodrigo Sol , Christophe Guillon , Fernando Magno Quintão Pereira , Mariza A. S. Bigonha

DOI: 10.1007/978-3-642-19861-8_2

关键词:

摘要: Trace compilation is a technique used by just-in-time (JIT) compilers such as TraceMonkey, the JavaScript engine in Mozilla Firefox browser. Contrary to traditional JIT machines, trace compiler works on only part of source program, normally linear path inside heavily executed loop. Because compiled during interpretation program has access runtime values. This observation gives possibility producing binary code specialized these In this paper we explore opportunity provide an analysis that removes unnecessary overflow tests from programs. Our optimization uses range show some operations cannot produce overflows. The size and space number instructions present input trace, it more effective than analyses, because have values known at execution time. We implemented our top Firefox's tested over 1000 scripts several industrial strength benchmarks, including 100 most visited webpages Alexa index. generate binaries either x86 or embedded microprocessor ST40-300. On average, eliminate 91.82% overflows programs TraceMonkey test suite. provides average reduction 8.83% ST40 6.63% x86. increases TraceMonkey's 2.53%.

参考文章(29)
Michael Franz, Andreas Gal, Efficient bytecode verification and compilation in a virtual machine University of California at Irvine. ,(2006)
Simon Cox, Michael Leuschel, Daniel Elphick, Partial evaluation of MATLAB generative programming and component engineering. pp. 344- 363 ,(2003) , 10.5555/954186.954207
Peter Sestoft, Neil D. Jones, Carsten K. Gomard, Partial evaluation and automatic program generation ,(1993)
Maxime Chevalier-Boisvert, Laurie Hendren, Clark Verbrugge, Optimizing MATLAB through just-in-time specialization compiler construction. pp. 46- 65 ,(2010) , 10.1007/978-3-642-11970-5_4
Mark Stephenson, Jonathan Babb, Saman Amarasinghe, Bidwidth analysis with application to silicon compilation Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation - PLDI '00. ,vol. 35, pp. 108- 120 ,(2000) , 10.1145/349299.349317
Ron Cytron, Jeanne Ferrante, Barry K. Rosen, Mark N. Wegman, F. Kenneth Zadeck, Efficiently computing static single assignment form and the control dependence graph ACM Transactions on Programming Languages and Systems. ,vol. 13, pp. 451- 490 ,(1991) , 10.1145/115372.115320
W.H. Harrison, Compiler Analysis of the Value Ranges for Variables IEEE Transactions on Software Engineering. ,vol. SE-3, pp. 243- 250 ,(1977) , 10.1109/TSE.1977.231133
Gregor Richards, Sylvain Lebresne, Brian Burg, Jan Vitek, An analysis of the dynamic behavior of JavaScript programs Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation - PLDI '10. ,vol. 45, pp. 1- 12 ,(2010) , 10.1145/1806596.1806598
John Aycock, A brief history of just-in-time ACM Computing Surveys. ,vol. 35, pp. 97- 113 ,(2003) , 10.1145/857076.857077
Jason R. C. Patterson, Accurate static branch prediction by value range propagation Proceedings of the ACM SIGPLAN 1995 conference on Programming language design and implementation - PLDI '95. ,vol. 30, pp. 67- 78 ,(1995) , 10.1145/207110.207117