<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Inline</div><div class=""><br class=""></div><div class="">George</div><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 26, 2015, at 1:05 PM, Daniel Berlin <<a href="mailto:dberlin@dberlin.org" class="">dberlin@dberlin.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">George, given that, can you just build constexpr handling (it's not as easy as you think) as a separate funciton and have it use it in the right places?<br class=""></div></div></blockquote>Will do. :)</div><div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class="">FWIW, my current list of CFLAA issues is:<br class=""><br class="">1. Unknown values (results from ptrtoint, incoming pointers, etc)  are not treated as unknown. These should be done through graph edge (so that they can be one way, otherwise, you will unify everything :P)</div></div></blockquote><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="">2. Constexpr handling</div></div></div></blockquote><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="">^^^ These are correctness issues. I'm pretty sure there are a few more but i haven't finished auditing</div><div class="">3. In a number of places we treat non-pointers as memory-locations and unify them with pointers. This introduces a lot of spurious aliasing.<span style="line-height:1.5;font-size:13.1999998092651px" class=""> </span></div><div class="">4. More generally, we induce a lot of spurious aliasing through things at different dereference levels.  In these cases, one may to the other, but, for example, if we have a foo***, and a foo* (and neither pointers to unknown things or escapes), the only way for foo *** to alias foo* is if there is a graph path with two dereferences between them.</div><div class="">We seem to get this wrong sometimes.</div></div></div></blockquote>Agreed on all four. Though naturally it should be fixed, I’d like to see how much of an issue #4 ends up being when we properly deal with #3.</div><div><br class=""></div><div><blockquote type="cite" class=""><div class=""><br class=""><div class="gmail_quote">On Sun Jan 25 2015 at 6:44:07 PM Chandler Carruth <<a href="mailto:chandlerc@google.com" class="">chandlerc@google.com</a>> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class=""><div class="gmail_extra"><br class=""><div class="gmail_quote">On Sun, Jan 25, 2015 at 6:37 PM, George Burgess IV <span dir="ltr" class=""><<a href="mailto:george.burgess.iv@gmail.com" target="_blank" class="">george.burgess.iv@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">> <span style="font-size:12.8000001907349px" class="">Fixing that still gives a wrong result, i haven't started to track down what *else* is going on here.</span><div class=""><span style="font-size:12.8000001907349px" class=""><br class=""></span></div></span><div class=""><span style="font-size:12.8000001907349px" class="">Running with the attached diff + a modified buildGraphFrom to handle the constexpr GEPs, we seem to flag everything in test2.ll (conservatively) correctly.</span></div><div class=""><span style="font-size:12.8000001907349px" class=""><br class=""></span></div><div class=""><span style="font-size:12.8000001907349px" class="">Is `store` the only place we can expect to see these constexpr analogs, or is just about anywhere fair game?</span></div></blockquote></div><br class=""></div></div><div dir="ltr" class=""><div class="gmail_extra">Any Value can be a ConstantExpr, so all operands to instructions are fair game.</div></div>
</blockquote></div>
</div></blockquote></div><br class=""></body></html>