Performing runtime alias analysis in a dynamic binary translator (DBT)
is difficult due to incomplete control-flow information and the high
complexity of accurate alias analysis. Whole-program profiling,
however, shows that the vast majority of memory references do not
alias. The current technique used in DBTs to disambiguate memory
references, instruction inspection, is too simple and can only
disambiguate one-third of potential aliases. To address the problem
of effective memory disambiguation while keeping a tight bound on the
analysis overhead, we propose an efficient heuristic algorithm that
strategically selects key memory dependences to disambiguate with
runtime checks. These checks have little runtime overhead and, in the
common case where aliasing does not occur, enable aggressive
optimizations, particularly scheduling to be performed. We demonstrate
that a small number of checks, inserted with a low overhead analysis,
can approach optimal scheduling, where all false memory dependences
are removed.