<div dir="ltr">FWIW, there are also a few bugs open that I have on my list and one of them may overlap with this failure.<div><br></div><div>To answer your question, Roman, no, not planning to turn on enable-mssa-loop-dependency just yet, especially with open bugs. Unfortunately, since the coverage in the unit tests is fairly low, changes to the passes that used to preserve MemorySSA are likely to introduce new bugs if they are not tested with the option enabled.</div><div>Current plan is to solve the bugs that came in this week and get more coverage in the unit tests.</div><div><br></div><div>Best,</div><div>Alina</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 21, 2019 at 7:36 AM Alina Sbirlea <<a href="mailto:alina.sbirlea@gmail.com">alina.sbirlea@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Taking a look today.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 21, 2019, 3:55 AM Maxim Kazantsev <<a href="mailto:max.kazantsev@azul.com" target="_blank">max.kazantsev@azul.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="RU">
<div class="gmail-m_-7733637975689130697m_4436187576422240661WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hi again,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Actually I’m in a little harsh about that. Tomorrow is my last day at Azul, and then I’ll be not available for a week or so due to a move.
</span><span lang="EN-US" style="font-family:Wingdings">J</span><span lang="EN-US"> I’ve added my personal email to be able to continue this discussion after that.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I tried using MSSA->applyUpdates to solve this (the comment claims that it’s the exactly the way how it should work). For some reason, I am hitting the same assert on almost all tests
 where I try it. Here is the patch I tried (with some extra debug messages): <a href="https://reviews.llvm.org/D58500" rel="noreferrer" target="_blank">
https://reviews.llvm.org/D58500</a><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">The failure on test
</span><span lang="EN-US" style="font-size:10pt;font-family:"Courier New";color:black">test/Transforms/LoopSimplifyCFG/lcssa.ll</span><span lang="EN-US"> happens in the very first function when we do updates at all (handleDeadExits).
 We accumulate updates corresponding to edges we add/remove. Then, we apply these updates to DTUpdater, and DT is able to pass verification after that (that means the updates are correct). But when we then try to apply the same set up updates to MSSAU, it fails
 with the assertion:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">opt: /home/mkazantsev/work/llvm/llvm/lib/Analysis/MemorySSAUpdater.cpp:848: void llvm::MemorySSAUpdater::applyInsertUpdates(llvm::ArrayRef<llvm::cfg::Update<llvm::BasicBlock*>
 >, llvm::DominatorTree&, const llvm::GraphDiff<llvm::BasicBlock*, false>*): Assertion `DT.dominates(NewIDom, PrevIDom) && "New idom should dominate old idom"' failed.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I am not familiar with the ways how MSSA works at all, and I don’t understand why this assert is there and if it is possible to live without it. I also wasn’t able to find a method that
 would do full “recalculation” as a temporary fix for that. </span><span lang="EN-US" style="font-family:Wingdings">L</span><span lang="EN-US"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I’ve committed the test that Roman has provided as XFAIL. Alina, could you please take a look into my debug patch above? Maybe you’ll have some insights what is missing there. Is there
 a way to fully recalculate MSSAU until we find a way to make it efficiently?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">If there is no good solution for that, I can only propose to turn off terminator folding when we need to update MSSAU (which would be a bad thing to do).<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">--Max<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> <a href="mailto:rtereshin@apple.com" rel="noreferrer" target="_blank">rtereshin@apple.com</a> <<a href="mailto:rtereshin@apple.com" rel="noreferrer" target="_blank">rtereshin@apple.com</a>>
<br>
<b>Sent:</b> Thursday, February 21, 2019 3:51 PM<br>
<b>To:</b> Maxim Kazantsev <<a href="mailto:max.kazantsev@azul.com" rel="noreferrer" target="_blank">max.kazantsev@azul.com</a>>; Alina Sbirlea <<a href="mailto:alina.sbirlea@gmail.com" rel="noreferrer" target="_blank">alina.sbirlea@gmail.com</a>><br>
<b>Cc:</b> <a href="mailto:dberlin@dberlin.org" rel="noreferrer" target="_blank">dberlin@dberlin.org</a>; llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank">llvm-commits@lists.llvm.org</a>>; <a href="mailto:asbirlea@google.com" rel="noreferrer" target="_blank">asbirlea@google.com</a><br>
<b>Subject:</b> Re: [llvm] r353911 - [LoopSimplifyCFG] Re-enable const branch folding by default<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Yes, I saw her reply too (Hi Alina!). No rush, unless MemorySSA is forced on for loop passes (-enable-mssa-loop-dependency=true) it doesn’t break anything I’m aware of.<u></u><u></u></p>
<div>
<p class="MsoNormal">I noticed the problem because I’m working on a change to LoopRotate, which is also supposed to preserve MemorySSA, so while testing that part I hit a few failures not related to my changes.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I can just ignore them for time being or force -enable-loop-simplifycfg-term-folding off for testing.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Also, I’m not going to be available for at least 10 hours (time zones).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thank you,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Roman<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">P.S. I’m also having difficulties with updating MemorySSA properly. Looks like MemorySSAUpdater contains rather per-case high level APIs, which can for instance handle a BB being split or merged into its necessarily unique predecessor.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">What I’m doing is more like SplitBlockAndInsertIfThen, which creates a new BB with 2 predecessors. MemorySSAUpdater::applyUpdates crashes with assert(AddedBlockSet.size() == 1 && "Can only handle adding one predecessor to a new block.”)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">if I try updating all edges in one call, or seemingly finishes fine if I do them one by one, but then MemorySSA verifier complains on an incomplete MemoryPhi, which makes me think applyUpdates didn’t really do the right thing anyway.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">What surprised me the most is that MemorySSA::createMemoryPhi is a private member function. After some running in circles I think I found a way to update MemorySSA properly, but I had to make MemorySSA::createMemoryPhi<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">and MemorySSA::getWritableBlockDefs public for that for a time being (locally).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Not sure if I’m missing something, or there is a valid problem with APIs here. Maybe
<b>Alina</b> could give us some insight about that?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Roman<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"><br>
<br>
<u></u><u></u></p>
<blockquote style="margin-top:5pt;margin-bottom:5pt">
<div>
<p class="MsoNormal">On Feb 21, 2019, at 12:23 AM, Maxim Kazantsev <<a href="mailto:max.kazantsev@azul.com" rel="noreferrer" target="_blank">max.kazantsev@azul.com</a>> wrote:<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal"><span lang="EN-US">Hi Roman,</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">As Alina has pointed out, we do MSSA update wrong in general in this patch. I’m going to prepare a fix in ~3 hours from now. I’ll send it to you for review when it’s ready.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">--Max</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
</div>
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<div>
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"><span lang="EN-US"> </span></span><span lang="EN-US"><a href="mailto:rtereshin@apple.com" rel="noreferrer" target="_blank">rtereshin@apple.com</a> <<a href="mailto:rtereshin@apple.com" rel="noreferrer" target="_blank">rtereshin@apple.com</a>><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
<b>Sent:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>Thursday, February 21, 2019 2:41 PM<br>
<b>To:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>Maxim Kazantsev <<a href="mailto:max.kazantsev@azul.com" rel="noreferrer" target="_blank">max.kazantsev@azul.com</a>><br>
<b>Cc:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>Alina Sbirlea <<a href="mailto:alina.sbirlea@gmail.com" rel="noreferrer" target="_blank">alina.sbirlea@gmail.com</a>>;
<a href="mailto:dberlin@dberlin.org" rel="noreferrer" target="_blank">dberlin@dberlin.org</a>; llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank">llvm-commits@lists.llvm.org</a>>;
<a href="mailto:asbirlea@google.com" rel="noreferrer" target="_blank">asbirlea@google.com</a><br>
<b>Subject:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>Re: [llvm] r353911 - [LoopSimplifyCFG] Re-enable const branch folding by default</span><u></u><u></u></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">Hi Max,<span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">Thank you for replying so quickly!<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">I’ve applied the change locally and the original IR module I used to bugpoint the reproducer I’ve sent you earlier failed anyway, this time for a different reason.<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">I can’t send the module as it is for IP reasons, but here’s another bugpoint from the same source (with some manual tidying up):<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal">define void @main(i32* %a, i32* %b) {<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">entry:<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  br label %for.body<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">for.body:<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  %i = phi i32 [ 0, %entry ], [ %i.inc, %latch ]<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  br label %<a href="http://switch.bb" rel="noreferrer" target="_blank">switch.bb</a><u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><a href="http://switch.bb" rel="noreferrer" target="_blank">switch.bb</a>:<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  switch i2 1, label %default [<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">    i2 1, label %case<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  ]<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">case:<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  br label %latch<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">default:<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  unreachable<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">latch:<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  store i32 %i, i32* %a<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  store i32 %i, i32* %b<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  %i.inc = add nsw i32 %i, 1<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  %exitcond = icmp eq i32 %i.inc, 4<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  br i1 %exitcond, label %exit, label %for.body<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">exit:<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  ret void<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal">./bin/opt -loop-simplifycfg loop-simplifycfg-term-folding-AND-mssa-loop-dependency-2.ll -enable-mssa-loop-dependency=true -verify-memoryssa=true -enable-loop-simplifycfg-term-folding=true -S -o -<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">Assertion failed: (dominates(MD, U) && "Memory Def does not dominate it's uses"), function verifyDomination, file ../lib/Analysis/MemorySSA.cpp, line 1912.<u></u><u></u></p>
</div>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">If I don’t apply <a href="https://reviews.llvm.org/rL354547" rel="noreferrer" target="_blank"><span style="color:purple">https://reviews.llvm.org/rL354547</span></a> it fails the same way the previous reproducer did, so I guess this test is strictly better. Sorry for overbugpointing
 the first time around!<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">Roman<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><br>
<br>
<br>
<u></u><u></u></p>
</div>
<blockquote style="margin-top:5pt;margin-bottom:5pt">
<div>
<div>
<p class="MsoNormal">On Feb 20, 2019, at 10:12 PM, Alina Sbirlea <<a href="mailto:alina.sbirlea@gmail.com" rel="noreferrer" target="_blank"><span style="color:purple">alina.sbirlea@gmail.com</span></a>> wrote:<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal">Are you sure your update is complete?<br>
It should theoretically match the DT update, i.e. include insert edges not just the delete. All updates should be done together using the same list of updates used for DT, and an up to date DT (see MSSAU->applyUpdates(DTUpdates, DT)).<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal">On Wed, Feb 20, 2019 at 9:53 PM Maxim Kazantsev via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank"><span style="color:purple">llvm-commits@lists.llvm.org</span></a>> wrote:<u></u><u></u></p>
</div>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><span lang="EN-US">Should be fixed by<span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><a href="https://reviews.llvm.org/rL354547" rel="noreferrer" target="_blank"><span style="color:purple">https://reviews.llvm.org/rL354547</span></a></span><u></u><u></u></p>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><b><span lang="EN-US">From:</span></b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"><span lang="EN-US"> </span></span><span lang="EN-US">Maxim Kazantsev<span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
<b>Sent:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>Thursday, February 21, 2019 11:49 AM<br>
<b>To:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>'<a href="mailto:rtereshin@apple.com" rel="noreferrer" target="_blank"><span style="color:purple">rtereshin@apple.com</span></a>' <<a href="mailto:rtereshin@apple.com" rel="noreferrer" target="_blank"><span style="color:purple">rtereshin@apple.com</span></a>><br>
<b>Cc:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank"><span style="color:purple">llvm-commits@lists.llvm.org</span></a>>;<span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><a href="mailto:dberlin@dberlin.org" rel="noreferrer" target="_blank"><span style="color:purple">dberlin@dberlin.org</span></a>;<span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><a href="mailto:asbirlea@google.com" rel="noreferrer" target="_blank"><span style="color:purple">asbirlea@google.com</span></a><br>
<b>Subject:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>RE: [llvm] r353911 - [LoopSimplifyCFG] Re-enable const branch folding by default</span><u></u><u></u></p>
</div>
</div>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"> <u></u><u></u></p>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><span lang="EN-US">Hi Roman,</span><u></u><u></u></p>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><span lang="EN-US">Thanks for notification! I’ll fix it asap.</span><u></u><u></u></p>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><span lang="EN-US">--Max</span><u></u><u></u></p>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><span lang="EN-US"> </span><u></u><u></u></p>
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"><b><span lang="EN-US">From:</span></b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"><span lang="EN-US"> </span></span><span lang="EN-US"><a href="mailto:rtereshin@apple.com" rel="noreferrer" target="_blank"><span style="color:purple">rtereshin@apple.com</span></a><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><<a href="mailto:rtereshin@apple.com" rel="noreferrer" target="_blank"><span style="color:purple">rtereshin@apple.com</span></a>><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
<b>Sent:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>Thursday, February 21, 2019 10:25 AM<br>
<b>To:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>Maxim Kazantsev <<a href="mailto:max.kazantsev@azul.com" rel="noreferrer" target="_blank"><span style="color:purple">max.kazantsev@azul.com</span></a>><br>
<b>Cc:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank"><span style="color:purple">llvm-commits@lists.llvm.org</span></a>>;<span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><a href="mailto:dberlin@dberlin.org" rel="noreferrer" target="_blank"><span style="color:purple">dberlin@dberlin.org</span></a>;<span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><a href="mailto:asbirlea@google.com" rel="noreferrer" target="_blank"><span style="color:purple">asbirlea@google.com</span></a><br>
<b>Subject:</b><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>Re: [llvm] r353911 - [LoopSimplifyCFG] Re-enable const branch folding by default</span><u></u><u></u></p>
</div>
</div>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal"> <u></u><u></u></p>
<div>
<div>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal" style="margin-bottom:12pt"><span style="font-size:10pt">Hi Max,<br>
<br>
Looks like this doesn’t collaborate with MemorySSA very well:<br>
<br>
./bin/opt -loop-simplifycfg loop-simplifycfg-term-folding-AND-mssa-loop-dependency.ll -enable-mssa-loop-dependency=true -verify-memoryssa=true -enable-loop-simplifycfg-term-folding=true -S -o -<br>
Assertion failed: (find(predecessors(&B), Phi->getIncomingBlock(I)) != pred_end(&B) && "Incoming phi block not a block predecessor"), function verifyDefUses, file ../lib/Analysis/MemorySSA.cpp, line 1947.<br>
<br>
The IR is:<br>
<br>
define void @main() {<br>
entry:<br>
  br label %for.body<br>
<br>
for.body:                                         ; preds = %exit, %entry<br>
  br label %<a href="http://switch.bb/" rel="noreferrer" target="_blank"><span style="color:purple">switch.bb</span></a><br>
<br>
<a href="http://switch.bb/" rel="noreferrer" target="_blank"><span style="color:purple">switch.bb</span></a>:                                        ; preds = %for.body<br>
  switch i2 1, label %<a href="http://default.bb/" rel="noreferrer" target="_blank"><span style="color:purple">default.bb</span></a><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span>[<br>
    i2 1, label %<a href="http://case.bb/" rel="noreferrer" target="_blank"><span style="color:purple">case.bb</span></a><br>
  ]<br>
<br>
<a href="http://case.bb/" rel="noreferrer" target="_blank"><span style="color:purple">case.bb</span></a>:                                          ; preds = %switch<br>
  br label %exit<br>
<br>
<a href="http://default.bb/" rel="noreferrer" target="_blank"><span style="color:purple">default.bb</span></a>:                                       ; preds = %switch<br>
  unreachable<br>
<br>
exit:                                             ; preds = %<a href="http://case.bb/" rel="noreferrer" target="_blank"><span style="color:purple">case.bb</span></a><br>
  call void @foo()<br>
  br label %for.body<br>
}<br>
<br>
declare void @foo()<br>
<br>
<br>
Thanks,<br>
Roman</span><u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="gmail-m_-7733637975689130697m_4436187576422240661xmsonormal" style="margin-bottom:12pt"><span style="font-size:10pt"><br>
<br>
> On Feb 12, 2019, at 10:12 PM, Max Kazantsev via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank"><span style="color:purple">llvm-commits@lists.llvm.org</span></a>> wrote:<br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
> Author: mkazantsev<br>
> Date: Tue Feb 12 22:12:48 2019<br>
> New Revision: 353911<br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
> URL:<span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=353911&view=rev" rel="noreferrer" target="_blank"><span style="color:purple">http://llvm.org/viewvc/llvm-project?rev=353911&view=rev</span></a><br>
> Log:<br>
> [LoopSimplifyCFG] Re-enable const branch folding by default<br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
> Known underlying bugs have been fixed, intensive fuzz testing did not<br>
> find any new problems. Re-enabling by default. Feel free to revert if<br>
> it causes any functional failures.<br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
> Modified:<br>
>    llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp<br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
> Modified: llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp<br>
> URL:<span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp?rev=353911&r1=353910&r2=353911&view=diff" rel="noreferrer" target="_blank"><span style="color:purple">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp?rev=353911&r1=353910&r2=353911&view=diff</span></a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp (original)<br>
> +++ llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp Tue Feb 12 22:12:48 2019<br>
> @@ -41,7 +41,7 @@ using namespace llvm;<br>
> #define DEBUG_TYPE "loop-simplifycfg"<br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
> static cl::opt<bool> EnableTermFolding("enable-loop-simplifycfg-term-folding",<br>
> -                                       cl::init(false));<br>
> +                                       cl::init(true));<br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
> STATISTIC(NumTerminatorsFolded,<br>
>           "Number of terminators folded to unconditional branches");<br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank"><span style="color:purple">llvm-commits@lists.llvm.org</span></a><br>
><span class="gmail-m_-7733637975689130697m_4436187576422240661apple-converted-space"> </span><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank"><span style="color:purple">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</span></a></span><u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<p class="MsoNormal">_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank"><span style="color:purple">llvm-commits@lists.llvm.org</span></a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank"><span style="color:purple">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</span></a><u></u><u></u></p>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>

</blockquote></div>
</blockquote></div>