Accurate static estimators for program optimization
PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation
Scalar replacement in the presence of conditional control flow
Software—Practice & Experience
Optimal code motion: theory and practice
ACM Transactions on Programming Languages and Systems (TOPLAS)
Register promotion in C programs
Proceedings of the ACM SIGPLAN 1997 conference on Programming language design and implementation
Complete removal of redundant expressions
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Register promotion by sparse partial redundancy elimination of loads and stores
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Advanced compiler design and implementation
Advanced compiler design and implementation
Load-reuse analysis: design and evaluation
Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
Design, implementation, and evaluation of optimizations in a just-in-time compiler
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
ABCD: eliminating array bounds checks on demand
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Field analysis: getting useful and low-cost interprocedural information
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
A study of devirtualization techniques for a Java Just-In-Time compiler
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Partial redundancy elimination for access path expressions
Software—Practice & Experience - Special issue on aliasing in object-oriented systems
Effective null pointer check elimination utilizing hardware trap
ASPLOS IX Proceedings of the ninth international conference on Architectural support for programming languages and operating systems
OS and compiler considerations in the design of the IA-64 architecture
ASPLOS IX Proceedings of the ninth international conference on Architectural support for programming languages and operating systems
A dynamic optimization framework for a Java just-in-time compiler
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Effective sign extension elimination
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
The Java Language Specification
The Java Language Specification
Bytecode fetch optimization for a Java interpreter
Proceedings of the 10th international conference on Architectural support for programming languages and operating systems
Array Data Flow Analysis for Load-Store Optimizations in Superscalar Architectures
LCPC '95 Proceedings of the 8th International Workshop on Languages and Compilers for Parallel Computing
Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
Eliminating Virtual Function Calls in C++ Programs
ECCOP '96 Proceedings of the 10th European Conference on Object-Oriented Programming
Unified Analysis of Array and Object References in Strongly Typed Languages
SAS '00 Proceedings of the 7th International Symposium on Static Analysis
Path Profile Guided Partial Redundancy Elimination Using Speculation
ICCL '98 Proceedings of the 1998 International Conference on Computer Languages
Partial Redundancy Elimination Driven by a Cost-Benefit Analysis
ICCSSE '97 Proceedings of the 8th Israeli Conference on Computer-Based Systems and Software Engineering
Overview of the IBM Java just-in-time compiler
IBM Systems Journal
Instruction combining for coalescing memory accesses using global code motion
MSP '04 Proceedings of the 2004 workshop on Memory system performance
A new idiom recognition framework for exploiting hardware-assist instructions
Proceedings of the 12th international conference on Architectural support for programming languages and operating systems
Fault-safe code motion for type-safe languages
Proceedings of the 6th annual IEEE/ACM international symposium on Code generation and optimization
Local redundant polymorphism query elimination
Proceedings of the 8th International Conference on the Principles and Practice of Programming in Java
Idiom recognition framework using topological embedding
ACM Transactions on Architecture and Code Optimization (TACO)
Hi-index | 0.00 |
We present a new memory access optimization for Java to perform aggressive code motion for speculatively optimizing memory accesses by applying partial redundancy elimination (PRE) techniques. First, to reduce as many barriers as possible and to enhance code motion, we perform alias analysis to identify all the regions in which each object reference is not aliased. Secondly, we find all the possible barriers. Finally, we perform code motions in three steps. For the first step, we apply a non-speculative PRE algorithm to move load instructions and their following instructions in the backwards direction of the control flow graph. For the second step, we apply a speculative PRE algorithm to move some of them aggressively before the conditional branches. For the third step, we apply our modified version of a non-speculative PRE algorithm to move store instructions in the forward direction of the control flow graph and to even move some of them after the merge points. We implemented our new algorithm in our production-level Java just-in-time compiler. Our experimental results show that our speculative algorithm improves the average (maximum) performance by 13.1% (90.7%) for jBYTEmark and 1.4% (4.4%) for SPECjvm98 over the fastest algorithm previously described, while it increases the average (maximum) compilation time by 0.9% (2.9%) for both benchmark suites.