<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Perhaps, you'd need to also check that the block %15 has only one predecessor and has no other users?</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Posting the error message might help.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 6, 2020 at 8:17 PM Charitha Saumya via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</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="ltr"><p>Hi,<br></p><p>I want to remove a redundant unconditional branch from a Function. In the following example I want to remove <code>br label %26</code> and merge them to a single basic block.</p>

<pre><code><span>;</span><span> </span><span><label></span><span>:</span><span>9</span><span>:</span><span>                                      </span><span>;</span><span> preds </span><span>=</span><span> </span><span>%</span><span>7</span><span>
  </span><span>%</span><span>10</span><span> </span><span>=</span><span> fadd </span><span>float</span><span> </span><span>%</span><span>5</span><span>,</span><span> </span><span>%</span><span>8</span><span>
  </span><span>%</span><span>11</span><span> </span><span>=</span><span> fmul </span><span>float</span><span> </span><span>%</span><span>5</span><span>,</span><span> </span><span>%</span><span>8</span><span>
  </span><span>%</span><span>12</span><span> </span><span>=</span><span> fadd </span><span>float</span><span> </span><span>%</span><span>10</span><span>,</span><span> </span><span>%</span><span>11</span><span>
  </span><span>%</span><span>13</span><span> </span><span>=</span><span> fdiv </span><span>float</span><span> </span><span>%</span><span>5</span><span>,</span><span> </span><span>%</span><span>8</span><span>
  </span><span>%</span><span>14</span><span> </span><span>=</span><span> fadd </span><span>float</span><span> </span><span>%</span><span>13</span><span>,</span><span> </span><span>%</span><span>12</span><span>
  br label </span><span>%</span><span>15</span><span>

</span><span>;</span><span> </span><span><label></span><span>:</span><span>15</span><span>:</span><span>                                     </span><span>;</span><span> preds </span><span>=</span><span> </span><span>%</span><span>9</span><span>
  br label </span><span>%</span><span>26<br><br></span></code></pre><p>I tried to do this as follow but ended up getting runtime error. Can someone help?</p><p>Thanks</p><p>Charitha<br></p>

<code><span>for(auto it1 = F.begin(); it1 != F.end(); it1++){<br>    BasicBlock& bb = *it1;<br>    auto BI = dyn_cast<BranchInst>(bb.getTerminator());<br>    if(BI && BI->isUnconditional() && bb.size() == 1){<br><br>        for (BasicBlock *pred : predecessors(&bb)) {<br>            auto predBI = dyn_cast<BranchInst>(pred->getTerminator());<br>            if(predBI && predBI->isUnconditional()){<br>                    predBI->setSuccessor(0, bb.getSingleSuccessor());<br>                    BI->dropAllReferences();<br>                    BI->removeFromParent();<br>            }<br>        }<br>    } <br><br>}</span></code></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>