<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylVF1vmzAU_TXwYhWBCSF54CFpVm1vlbY9VwZfwJOxmW2Spr9-1yZJaSdtnRYR8PXH8TnnXrvW_Fx9BYjyHemdGy02IvqAT6d5raVLtOkwesF_afrHwnDzGKWHKN1d3ut0fqQ8DnMXh1YoIEctOIlWqdLcQkQ3Yr2K6I4ozaRgFr8NG91kAFuTwjXkZIQDreSZRLTgemBCRfSeiOw24wWMhmfnx2vGI7olUbmfNwXlzNmTDxEh1mmExj1JFkDmzd8AI49Okc11RW38VlfoeyJZDdLHok1cD-p9Hyi-NOI6C4388C_K92Q0wC22Dh52VnEh5JiQpGFS3qyEZ-G8kzm9WZIFF2ieX1dNygBrelZLeEfPE_4Xdn-h9-pw-kGHDbgg5cKrPCwJcmgkQ0Bu9ZPE2viTaq85zHmalGID8CfGuVnYML-Zc0bUkwMbhmYV5R5RkMlkVIA7CYW73Lhcy3mJ860H0gpj3UWzRtuJ7fUkOamBgBSDUMwBRmfkD8ly8Wd9giMYbwfWx5xPp8ks6sFOtYWfExq7TJx3_Yh9lhy-fkrIfc9UJ1QXAJbTEIdh3TLV9L495xhtDjTnxUsqj9g5DbjyjEjCEnxqaNhkISCP2jrMnZeijTOAZLWygoOxb6qKlpZYGJlByUEHrhRINiFfFGHqjBr9gcf039QyVKQ7w4Y7Bybs4OWE0dlHLJfSXWV74qQ1eiBsHOUZp76Voa0VXoQBGVx3-vfrC5EEnGzir6XLHXbI6Lpcx7zK-TbfsphNrtemOtlBW7DxZGT17goUrp_qpNEDBuF-mz93KOYHND5_wtoJLDaKfJOmcV9lkPHNpmnL7bblGVAoWJbynLWrmm6KvI3DFWKrqNhHlAbQfNdgujDynr126tFhXb2gVZgFP1oc4v9nKCqaUnyyPC3wnydrWOdsBe2al3W2oq0_cHh-5c252FQBsp46i4NSWPdqa8wwF50CCIKQoRNOhgBziDH5vizXS-61P6qbUDm-BPxpvhX8fMKuRwqlx0FAFdj_AvoyEKA>53800</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [DSE] Unreachable terminator (exit call) prevents store elimination
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:core,
            llvm:optimizations
      </td>
    </tr>

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

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

<pre>
    See: https://godbolt.org/z/7rhP5rdrP

```llvm
define void @nodse(i64* noalias nocapture noundef writeonly %domain, i1 noundef zeroext %bad) {
entry:
  store i64 1, i64* %domain, align 8
  br i1 %bad, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  tail call void @exit(i32 noundef 1) #3
  unreachable

if.end:                                           ; preds = %entry
  store i64 0, i64* %domain, align 8
  ret void
}

declare dso_local void @exit(i32 noundef) local_unnamed_addr #3

attributes #3 = { noreturn nounwind }
```

The first store of 1 should be eliminated by dse.

However, the call to exit/subsequent unreachable prevents DSE. Changing the unreachable to a branch to if.end restores DSE.

Presumably this is because the postdominatortree considers unreachable's separate exit points. In any case, a call to a program-terminating call shouldn't prevent DSE from applying.

Possibly related to: https://reviews.llvm.org/D12676
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVE1zmzAQ_TVw0cSDhQH7wMGOm2lvmUl7zkhoAXWE5ErCjvPruxK2Q9KZNvXIoK99eu_tIm7EuX4CSPIt6b0_OOwk9AFbZwQ3yi-M7XD0iv_K9o-FFfYxyfZJtr08y2xqSh2HaUpAKzWQo5GCJKtMG-EgoWtZrhK6JdowJZnDd8MOfrSAvVFjDDlZ6cFodSYJLYQZmNQJvSdyedvxCtbAiw_rnImEbkhS7aZDQXt7DuTjiBDnDULjmWQZQabD3wEjj06T9TWC23DUFfqeKMZBhbFsF74H_XEOtJgbcd2FRn76l-Q7crAgHPb2AXZScSHkmVSkYUrdrIQX6YOTOb1Zsowu0Dy_Ro3aAmt6xhV8oBcI_w-7f9B7czj7pMMWfJRy4VXt5wQFNIohoHDmWWFt_E110Bz3PI9aswHEMxPCzmyYnsx7K_nowcWlSUW1QxRkMlod4U5S4yk3LtdynuN874G00jp_0WzQduJ6MypBOBBQcpCaecDRGfnDYh781ZzgCDbYgfUx5dMbMol6cCN38GtEY-eJC64fcc6R_dOXBbnvme6k7iLAfBviMKxbpps-9Kcco82R5hQ8p_KIk-OAkWdEko5g49Cw0UFEPhjnMXdBirHeApI12kkB1r2rKlo54uDALEqOOjBSItkF-aYJ02fUGD54TP9NLUNFprNsuPNg4wlBTlydfMRyqfxVdiBOWmsGwg4Hdcat72UY52QQYUFF17358_pCJAkntwjX0uUO2y9pWZWpqHOxyTcs9dIrqJNih8clxZ78mDt7oWlCVa2jyMA2FN4tN1MxXLMvjU5Hq-oPt6j0_cgXjRlwEK_I6XWHfvyEJpSAdG4Eh50iX2dZ2tfFhq2bMuOcNnTdLvOC8Spv2WpN-YZuVkUabyEXmCeURtB82yAXHAXb3ybNwSO510jOhdVin8qaZhTbMs8K_OeLEsqcraAtRcWXK9qGLw4_YHWzLrV1pMzHzuGiks6_-ZoyTEanIRoZ8Nnoe2PrkxuMA5dGdXWU9hsnwPqO">