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

    <tr>
        <th>Summary</th>
        <td>
            [CorrelatedPropagation] Miscompile: opt -passes=correlated-propagation produces unexpected UB on simple IR test
        </td>
    </tr>

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

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

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

<pre>
    This bug was found by Azul FuzzGen IR test generator and verified by alive2 tool.

See reproducer at: https://alive2.llvm.org/ce/z/8-bvRS

Source code:
```
; ModuleID = 'bugpoint-reduced-simplified.bc'
source_filename = "gen_01564"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
declare void @llvm.assume(i1 noundef) #0

define void @function_0(i64 %val_i64_6) {
entry_1:
  %val_i1_28 = icmp ule i64 %val_i64_6, undef
  %val_i1_33 = mul i1 %val_i1_28, %val_i1_28
  call void @llvm.assume(i1 %val_i1_33)
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
```
alive2 output:
```

----------------------------------------
define void @function_0(i64 %val_i64_6) {
%entry_1:
  %val_i1_28 = icmp ule i64 %val_i64_6, undef
  %val_i1_33 = mul i1 %val_i1_28, %val_i1_28
  assume i1 %val_i1_33
  ret void
}
=>
define void @function_0(i64 %val_i64_6) {
%entry_1:
  %val_i1_28 = icmp ule i64 %val_i64_6, undef
  %val_i1_33 = mul nsw nuw i1 %val_i1_28, %val_i1_28
  assume i1 %val_i1_33
  ret void
}
Transformation doesn't verify!

ERROR: Source is more defined than target

Example:
i64 %val_i64_6 = #x0000000000000000 (0)

Source:
i1 %val_i1_28 = #x1 (1)
i1 %val_i1_33 = #x1 (1)

Target:
i1 %val_i1_28 = #x1 (1)
i1 %val_i1_33 = poison
void = UB triggered!


Summary:
  0 correct transformations
  1 incorrect transformations
  0 failed-to-prove transformations
  0 Alive2 errors
```
How to reproduce:
Run opt with -passes=correlated-propagation : ```opt -S -passes=correlated-propagation source.ll 2>&1 >target.ll ```
Run alive2: ```alive-tv source.ll target.ll```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVltv4zYT_TX0y0CGRF0sP_jBWa-_bx8WLZzts0GJY5ldihR4seP8-oKSIl-2QQq0C7RGwIjSnMPhmSFnmLWiUYgrkj-RfDNj3h21WSkjlP3OLmxWaX5ZfTsKC5Vv4MwsHLRXHKoLrF-9hK1_ff0fKviyA4fWQYMKDXPaAFMcTmjEQWBvzqQ4IQWntZyTeEPi9TA-I4LBzmjuazTAHEnXcHSusyRdE7oldDtA51Ke2rk2DaHbGgndvhK6LaPqtHu-49Pe1Ai15hgIhi9FPP4N0_QJvmruJX7ZAEk3QOii8k2nhXKRweAIj6xoO9l7P69qQhcD1Pbs-4OQqFiLI5o2qPZxkhcZoXQwdMw06IAzxyS7aO_eTDFqSbrGqKOLmKTrlPZDmCb30_BUZP0QibeHQxlACS0jVYaH4g1TZNFzQsvH9Z0RnZzcfCmLfZFFXn1X-qwiKZR_iRrlJ9RVn61XtRNawdo5E0IBStdMyorV30Hpg0EEpe1F1aC0V2ehOJyFlAadNwpabLW5EFoKxeoarRWVxBbD1sEg42cjHBK6HBbkWEtmEE5acCBZ3EeaWetbDBRJvwTHA6FLIDSNb53leBDqCj2Mfu_jgCwyIDQ_MbkXRbYvevziaQCicuayT6Ykgck02dOyl0zUbQdeIvxI9AkGj36ApmkPbb0EkdxRBtDdfMQGWd_f-i3zJBiAQddjRikWm1tNmHNGVN6h7eUawr94-jkhhOvi98dsPPHau867d89iP0Z_8fc3Q05o_q-J-hBjeIzwB-FNNyT9_F9QQdkzKH_-qWp8M0zZgzYt628qrtEqQhduqDsXQpPbHPu82_2yC8k7VghhodUGYdCRgzsyBcO1eQd7YW0nr7XkUY7xbk1f4ocfEFrG04m9LU5XruRH3QNVeF0mE_ZBlffMRlGGHfwDS3RaWK2G70OWpRv47SnUlKZBg_xB4HGLvm2ZudykVgy1NgbrUI1uA2bfDBIQ6gOTGA5MSOSR01Fn9AnfN1wP1w4ao4390zvn__oMTl-7jsnXnVegOwdn4Y4QdcxatCTd9L5J5pCHtTvWDPkWcmliDrDo-WPQ0EDMpQQaTjItEiDp5yHtwtsHV4NHwz16t1r_KnKnG7qJ4oFhxlcpX6ZLNsNVUhTL5ZLmST47rsq0oljShC6qJEvighZZHNO4qCusclwUM7GiMaUJjWmSZWWazYuK5ekhy5ZVyRcxL0kWY8uEnDqzmbDW4ypfpnEyk6xCafvOklKFZ-g_hlYj38zMKmCiyjc2FD1hnb2yOOFk35J-mjT89SohyTfwVdhat53oz2Ufsg-FH2NtwSt86bB2yEMyh5CETg_fWtiZN3J13382wh19Na91S-g2eDn-C_y_Y-0I3fZ7s4Ru-73_EQAA___9z1dx">