Register allocation via graph coloring
Register allocation via graph coloring
Debugging via Run-Time Type Checking
FASE '01 Proceedings of the 4th International Conference on Fundamental Approaches to Software Engineering
Execution characteristics of SPEC CPU2000 benchmarks: Intel C++ vs. Microsoft VC++
ACM-SE 42 Proceedings of the 42nd annual Southeast regional conference
RCAT: A Performance Analysis Tool
Proceedings of the 19th IEEE international conference on Automated software engineering
Pin: building customized program analysis tools with dynamic instrumentation
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
Code coverage testing using hardware performance monitoring support
Proceedings of the sixth international symposium on Automated analysis-driven debugging
Efficient, transparent, and comprehensive runtime code manipulation
Efficient, transparent, and comprehensive runtime code manipulation
Effective sign extension elimination for java
ACM Transactions on Programming Languages and Systems (TOPLAS)
Analysis of redundancy and application balance in the SPEC CPU2006 benchmark suite
Proceedings of the 34th annual international symposium on Computer architecture
Practical escape analyses: how good are they?
Proceedings of the 3rd international conference on Virtual execution environments
Argus: online statistical bug detection
FASE'06 Proceedings of the 9th international conference on Fundamental Approaches to Software Engineering
Hi-index | 0.00 |
Compilers perform optimizations to improve application runtime performance, but they often fail to generate optimal code due to complicated interactions between optimizations and unforeseen interactions of optimizations with the target architecture. Although there exist performance monitoring tools that can collect CPU performance information via hardware event counters, compiler developers or performance analysts need to comprehensively interpret the information to infer deficiencies in compiler optimizations. This paper presents a tool that can identify potentially redundant computations relevant to specific compiler optimizations. In particular, our current implementation can identify redundant computations that match three patterns occurring in compiler generated native code: 1. redundant sign/zero extension, 2. redundant constant-spill, and 3. missing copy/constant propagation. Our tool adapts the Pin dynamic instrumentation framework to analyze program execution contexts at runtime and identify the redundant computations described above. We use this tool to report both locations and execution frequencies of redundant computations within the SPEC®CPU2006 benchmarks generated by two GCC compiler versions targeting IA-32 and Intel® 64 architectures. By effectively removing instrumentation that has become unnecessary, our tools runs at 19x the average execution time of these benchmarks. From this study, we are able to address how redundant computations are affected by different architectural features such as a number of registers and memory address size, and different compiler versions.