<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/142242>142242</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Empty basic blocks with unconditional branches aren't eliminated
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ashivaram23
      </td>
    </tr>
</table>

<pre>
    The following function calculates `a && b`:

```llvm
define i1 @a_and_b(i1 %a) {
start:
  br i1 %a, label %a_is_true, label %a_or_b_is_false

a_is_true:
  %b = call i1 @get_b()
 br i1 %b, label %end, label %a_or_b_is_false

a_or_b_is_false:
  br label %end

end:
  %retval = phi i1 [ true, %a_is_true ], [ false, %a_or_b_is_false ]
  ret i1 %retval
}

declare i1 @get_b()
```

No `-O3` pass is able to remove the `a_or_b_is_false` block, resulting in more assembly instructions than needed:

```nasm
_a_and_b:
  push rbx
  test dil, 1
  je LBB0_2
  mov bl, 1
  call _get_b
  test al, 1
  jne LBB0_3
LBB0_2:
  xor ebx, ebx
LBB0_3:
  mov eax, ebx
  pop rbx
 ret
```

Instead, the function should become something like

```llvm
define i1 @a_and_b(i1 %a) {
start:
  br i1 %a, label %a_is_true, label %end

a_is_true:
  %b = tail call i1 @get_b()
  br label %end

end:
  %retval = phi i1 [ false, %start ], [ %b, %a_is_true ]
  ret i1 %retval
}
```

and generate x86 instructions like this:

```nasm
_a_and_b:
  test dil, 1
  jne _get_b
  xor eax, eax
 ret
```

That should mostly happen in SimplifyCFGPass. I think the fix could be as simple as removing the check for `BB->phis().empty()` in `CanRedirectPredsOfEmptyBBToSucc` in Transforms/Utils/Local.cpp. A comment there says "There must be phis in BB, otherwise BB will be merged into Succ directly," but that's not always true.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVU-P4rgT_TTmUmoUHBLgkEOne_hppNFvRju9Z1R2CuJpx45sB5pvv7ITaJh_Gu1lJSRw_FzvVfk9gt6rgyGqWFGz4nmGQ2itq9C36ogOO57PhG3O1UtLsLda25MyB9gPRgZlDUjUctAYyAMrMwTGS8ZLEKzMWP7IsvQps_Gj9bFj2WNDe2UI1ALYMsMdmmYnGF_HNS-Q8Q2wVc2yRx_QhbEKgHBwBTyBRkE6rXbK74Ib6Lun1u1E3Nqj9jTKeIdOJRkvBLD8OTahJzkHCkkM45uIubKKu_pkmj_hu3_43shdnYSNP95VOQpH1Ela36qkoKjh0uVt18CK5_SsqGFkuQDuuBMsFncUpoZGjsi-eh41NCQ1OvrpIK5XOEL_b-NtP3zOWZlBj96D8oBCEwQLjjp7JAgtJUt8N4UyA6GtfI1CHflBh-gnZaCzjgC9p07oMyjjgxuSxzyEFg0YooaaH01l0EdT7S5GmsbYD74FJ97SIpAP0CgdSRfpyTeCT3Wd7XhadfYI4mY3GWI3juB6Hm-Pm-l8zrLHqdBE_GYdkHiLWEr0E27ajlSEN9sAve0vSh2FH6f90fhAmBwXh3rNnm_toBsQJG1H4G1HoY3D1OqV_qvkXR3967QFVPo3kfv3AbkNQOrgNh2XDP-Qnt_H4v4m0DRwIEMOA8Hbury3aZw7hFb5PzbpT3xp6NZ4yUyTW_DXDnlpMVzs0Fkf9Bla7HsyMVhfVddrtT8_bf_3Bb2fw8co0ryOZlJvICcbAXrwEZx-pRhHO0WYbEm-wt66GOm6fmD5hz42mm5tTl0fztMNllnkZGX2hOYvapQjGb44avzn_YcIq-sX-3WQcgK-ODR-b13nGd_-HZSO35-sRD2XfT-HR5C268iEKMMReDx7YJy_pFU3-BCFRy2xWl3HSdkIPSlPUNdwUlpHSEfuQA0oEyxEfhil6TPjT4xzEEOkwMD4yoOxMe6nyBV9Mp81Vd5s8g3OqFqslutyucmX2ayt9o1cLUhsxGqxWZHEPSe5Wu9XJa4pK9fZTFU840VW5BnPi2KZzZdLLpocsVg3zWZBOVtm1KHS8xjRuXWHmfJ-oGqx5HzJZykJPr2cOTd0grTLOI_valfFQw9iOHi2zLTywb-XCSpoqtLMQaBXcvzf9XBSoYXBSGsaFY2LGoRDI1vygI4M46sApFWnDAZqZoPTVRtCn2zNt4xvDyq0g5hL2zG-TX8t49dD7-w3koHxbZIZ73Lq41jxfwIAAP__wNCPuw">