<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 12, 2016 at 7:09 PM, Daniel Berlin <span dir="ltr"><<a href="mailto:dberlin@dberlin.org" target="_blank">dberlin@dberlin.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">There are about 5 starting since 2007.  You have to be careful, most focus on finding "equivalence among variables in the program".<div><br></div><div>IE they are trying to find equivalence among *variables* and not among the set of *subexpressions in the program*.</div><div><br></div><div>That is, they are useful for redundancy elimination. The will tell you "this instruction and that instruction are equal".</div><div><br></div><div>But you can imagine sub-expressions that, if they were reassociated/forward propagated, would be equivalent.</div><div><br></div><div>The one i've seen implemented for real was "An Efficient SSA-Based Algorithm for Complete Global Value Numbering" by Nie and Cheng.</div><div><br></div><div>There is also, for example, </div><div><a href="http://link.springer.com/chapter/10.1007/978-3-319-26529-2_4" target="_blank">http://link.springer.com/<wbr>chapter/10.1007/978-3-319-<wbr>26529-2_4</a><br></div><div><br></div></div></blockquote><div><br></div><div>and</div><div><a href="http://dl.acm.org/citation.cfm?id=2555120">http://dl.acm.org/citation.cfm?id=2555120</a></div><div><br></div></div></div></div>