<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 25, 2017 at 9:18 AM, bryant via Phabricator <span dir="ltr"><<a href="mailto:reviews@reviews.llvm.org" target="_blank">reviews@reviews.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">bryant added a comment.<br>
<span class=""><br>
In <a href="https://reviews.llvm.org/D29046#653835" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D29046#653835</a>, @dberlin wrote:<br>
<br>
> An example where spliceabove is broken:<br>
><br>
>   MemoryUse(0)<br>
>   use(a)<br>
>   2= MemoryDef(1)<br>
>   store b<br>
>   3 = MemoryDef(2)<br>
>   store a<br>
><br>
><br>
> Splice store a above use a produces:<br>
><br>
>   3 = MemoryDef(0)<br>
>   store a<br>
>   MemoryUse(3)<br>
>   use(a)<br>
>   2= MemoryDef(1)<br>
>   store b<br>
><br>
><br>
><br>
> This would work in SSA, because you would just have two variables live at the same time.<br>
>  However, it does not work for MemorySSA, because only one variable may be live at a time, and therefore, you need to update downwards as well.<br>
><br>
> The only cases where the effects are truly local is when you splice into the middle of a block that has defs above or below you.<br>
<br>
<br>
</span>This isn't of much consequence, but I wanted to point out that your example already violates the pre-conditions to spliceMemoryAccessAbove:<br></blockquote><div><br></div><div>Right, but the last one isn't actually verified, and only mentioned at all in the TODO :)</div><div><br></div><div>The only reason the store/store case doesn't break right now is because we don't do pruned SSA anymore. If we go back to it (which we could now that the updater handles it), i can break it even with defs :)</div><div><br></div><div><br></div></div></div></div>