<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylVcuO2yAU_Rp7gxLZOH5k4cVk0kpdtIs-1hUGEtMhYAFOmr_vBduJPRN1KlVCMZd7OBwuB9Jodq2jIhlbso-Spyjboa8_vkTZE5KSotXJGdFJHmX731Xxs9isVijKnlGEcztMYJxKYjg6a8FQtEmo1E3DTYSrCG9HzhF4EOqOc9w6AInUc9EIPyNRbCL85MNuFipNpCA2DGOghIFeXYQCknI3MHPlzBUUDxHy0DORoHOPpCZsYHrDD7RHhappUmOQJA2XPi-17ubSQ3zntxfhaItEhXoFu_Jkt6m9MpzQljSSoyjfTVOQRycLpCRAssini7ztpHDrdIHADxB4gcgeILJbYfL9fFszrbPdzUdn4InqDoSKzU7vtubNAHMdQr28JUuXZI8qM4fjf4VPCu5wSqT8m0OXhG_U-nh2_E6D38FNo9FeeQu_Z67XcoeBhX27VgT7-m9YKN8N7hnVhZP04Xx8KNI8lS5S6aNZ3tp3X0yLr6U486CAMDZtFcb9pOSdG1NOHnv1sITf7y0f76RFtoeNCOU0AtBkryIIa3qHTuSKXMsVajgaj4wz1FzRQUup4QU4-jQaJ6JVlH2YcEMQChV6ocJj1-93SI8TwepCrZciQR001nME6vwqh15RJ7SCc3VXL9po1lPQIxRqneusPz_8EZrhZ8Evdi3l-bTW5ghD-6qohifo0goQ0lsO_IpqYzh1qNPWrZg-CUUU5Qhun9UKtrfQFLM6Y9tsS2LSu1abWokXQePeyHq5_lG4tm_WVJ8g8CLGz6oz-hcsB6GwtucWOnm23SZxW1csYYw2h2bblLgsyaEgDBc8yTfbAm-qNA7nbGv_oGGs-AUFCuiDc-L_VyBqnGDfcJqnRVaui5LnZcWToqzyLKcEbi0_ESFvVY1NHSib_mghKYV195LHxFq4fpwHwaDQCSd5_elW8c_wvsF_0TcxGXD0jfeUN0gc9NVB3B8rBA-2>53990</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Incorrect MachineSink into clobbering loop
        </td>
    </tr>

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

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

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

<pre>
    ```
; RUN: llc -mtriple=x86_64-- < %s
declare void @clobber()

define void @test(i1 %c, i64* %p, i64* noalias %p2) nounwind {
entry:
  %val = load i64, i64* %p, align 8
  br label %loop

loop:
  switch i8 undef, label %unreachable [
    i8 0, label %latch
    i8 1, label %split.1
    i8 2, label %split.2
    i8 3, label %split.3
  ]

unreachable:
  unreachable

split.3:
  br i1 %c, label %clobber, label %sink

split.1:
  br label %latch

split.2:
  br label %latch

clobber:
  call void @clobber()
  br label %sink

sink:
  store i64 %val, i64* %p2, align 8
  br label %latch

latch:
  %phi = phi i64 [ 0, %sink ], [ 0, %split.2 ], [ 1, %split.1 ], [ 0, %loop ]
  %phi.live = add i64 %phi, 0
  br label %loop
}
```

The load is sunk into `split.3`, but may then be clobbered by following the split.3 -> clobber -> sink -> latch -> loop -> split.3 chain.

This is due to the functionality introduced in https://reviews.llvm.org/D86864, which uses incorrect post-dominance reasoning.


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyNVE2P2yAQ_TX2ZZTIxp85-LC7aaUe2kM_zhXGJKYlYBmcNP--A7YTezfqVrISBt483gwPat1cqyCPpi_aB9FTkDzD1x9fguQJpGSwOdledJIHyf5Pmf_M080GguQFApKZMaHhTNKew1mLBoI0YlLXNe8DUgZkN3FOwINQd5zlxiJIxI6LBeQFRJ4G5MmF3SJUmkpBjZ8mSIkTg7oIhSTF88jMle2vqHiMwEHPVKLOPUhNm5HpDT_SHhWUc1Ldg6Q1l25dat0tpfv4zm8uwrIWRAmDwqoc2S11UD2nrKW15BBkz3MKOHS0QkqKJKv1eLVuOinsNl4hyAMEWSGSB4jk1phsvyxroXVR3XJ2AZ6p7kDs2OL0bnveDLDUIdTvt2TxmuxRZ5Zw8r_wWcEdzqiU_3LomvCNWhcvjt9q9Du6aTLaK2-R98z1Wu44sbJv1wpvX_fvN8qeR_dM6vxJunA5PzZpuRSvluJHWc7ad1_Mm2-lOHOvgDbNXCrOu6TonRtTzB579bD43-8tn-6kATNgIUJZDQia7ZV7YfVg4USvYFuuoOYwHRlvoL7CQUup8QU4umWYEmETJB9m3Bj4RvmR7_A0dPWOy1MiWl2o7VokqsOvGTigOrfLYVDMCq3wXO3Vie51MzDUIxS01nbGnR_5iF_Pz4JfzFbK82mr-yNO7cu8HJ-gSytQyGA48ium-54zC502dtPok1BUMQ54-4xWWN5KU9hUSbNLdjS0wkpefbqlf8bLig_rNzF3c2qCa5CrNhx6Wa01HoVth3rL9AkDJ3T623S9_oWcGApjBm5wkCW7XRS2VVpkh4LFNC1o3uR1kde7XZrlacriuNxxFnovmMo9eoQofgFPgWN0VygqEhH3kTiL86TY5gXPipJHeVFmScYo3kt-okLe-hb2lZdUD0eDi1IYe29qSI3BC8a53w756WBb3VdK_BYs9BtXXvhf2df5qw">