<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 class="gmail-lang-cpp gmail-prettyprint gmail-prettyprinted"><code><span class="gmail-pun">;</span><span class="gmail-pln"> </span><span class="gmail-str"><label></span><span class="gmail-pun">:</span><span class="gmail-lit">9</span><span class="gmail-pun">:</span><span class="gmail-pln">                                      </span><span class="gmail-pun">;</span><span class="gmail-pln"> preds </span><span class="gmail-pun">=</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">7</span><span class="gmail-pln">
  </span><span class="gmail-pun">%</span><span class="gmail-lit">10</span><span class="gmail-pln"> </span><span class="gmail-pun">=</span><span class="gmail-pln"> fadd </span><span class="gmail-typ">float</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">5</span><span class="gmail-pun">,</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">8</span><span class="gmail-pln">
  </span><span class="gmail-pun">%</span><span class="gmail-lit">11</span><span class="gmail-pln"> </span><span class="gmail-pun">=</span><span class="gmail-pln"> fmul </span><span class="gmail-typ">float</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">5</span><span class="gmail-pun">,</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">8</span><span class="gmail-pln">
  </span><span class="gmail-pun">%</span><span class="gmail-lit">12</span><span class="gmail-pln"> </span><span class="gmail-pun">=</span><span class="gmail-pln"> fadd </span><span class="gmail-typ">float</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">10</span><span class="gmail-pun">,</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">11</span><span class="gmail-pln">
  </span><span class="gmail-pun">%</span><span class="gmail-lit">13</span><span class="gmail-pln"> </span><span class="gmail-pun">=</span><span class="gmail-pln"> fdiv </span><span class="gmail-typ">float</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">5</span><span class="gmail-pun">,</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">8</span><span class="gmail-pln">
  </span><span class="gmail-pun">%</span><span class="gmail-lit">14</span><span class="gmail-pln"> </span><span class="gmail-pun">=</span><span class="gmail-pln"> fadd </span><span class="gmail-typ">float</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">13</span><span class="gmail-pun">,</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">12</span><span class="gmail-pln">
  br label </span><span class="gmail-pun">%</span><span class="gmail-lit">15</span><span class="gmail-pln">

</span><span class="gmail-pun">;</span><span class="gmail-pln"> </span><span class="gmail-str"><label></span><span class="gmail-pun">:</span><span class="gmail-lit">15</span><span class="gmail-pun">:</span><span class="gmail-pln">                                     </span><span class="gmail-pun">;</span><span class="gmail-pln"> preds </span><span class="gmail-pun">=</span><span class="gmail-pln"> </span><span class="gmail-pun">%</span><span class="gmail-lit">9</span><span class="gmail-pln">
  br label </span><span class="gmail-pun">%</span><span class="gmail-lit">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 class="gmail-pun">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>