## Value-Based Partial Redundancy Elimination

#### Abstract

Partial redundancy elimination (PRE) is a program transformation that identifies and eliminates expressions that are redundant on at least one (but not necessarily all) execution paths. Global value numbering (GVN) is a program analysis and transformation that identifies operations that compute the same value and eliminates operations that are redundant. A weakness of PRE is that it traditionally considers only expressions that are lexically equivalent. A weakness of GVN is that it traditionally considers only operations that are fully redundant. In this paper, we examine the work that has been done on PRE and GVN and present a hybrid algorithm that combines the strengths of each. The contributions of this work are a framework for thinking about expressions and values without source-level lexical constraints, a system of data-flow equations for determining insertion points, and a practical algorithm for extending a simple hash-based GVN for PRE. Our implementation subsumes GVN statically and, on most benchmarks, in terms of performance.

@inproceedings{VanDrunen+2004CC,
author = {VanDrunen, Thomas and Hosking, Antony L.},
title = {Value-Based Partial Redundancy Elimination},
booktitle = {International Conference on Compiler Construction},
series = {CC},
year = {2004},
pages = {167--184},
month = {March},