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

    <tr>
        <th>Summary</th>
        <td>
            Issue with Transformation Increasing Poisonous Behavior in `log10f_powf` Function within `log-pow.ll` for %x = 0.0 and %y = 1.0
        </td>
    </tr>

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

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

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

<pre>
    There is an possible issue with a transformation in the `log10f_powf` function within the `llvm-project/llvm/test/Transforms/InstCombine/log-pow.ll` file, particularly when handling the case where `%x = 0.0` and `%y = 1.0`. Additionally, similar issues might also exist in the `log_pow` function within the same file.

In this specific test case, the transformation of the `log10f_powf` function appears to introduce more "poison" values in the transformed code compared to the original, especially when `%x` is `0.0` and `%y` is `1.0`.


## Original Code:
```llvm
define float @log10f_powf(float %x, float %y) {
  %pow = call fast float @powf(float %x, float %y)
  %log = call fast float @llvm.log10.f32(float %pow)
 ret float %log
}
```
## Transformed Code:
```llvm
define float @log10f_powf(float %x, float %y) {
  %log1 = call fast float @llvm.log10.f32(float %x)
  %mul = fmul fast float %log1, %y
  ret float %mul
}
```

While the original code produces a single "poison" value at the `%log` operation due to the undefined behavior of `llvm.log10.f32` with 0.0.

In the transformed code, `llvm.log10.f32` is directly called with `%x` (0.0) as the argument. This direct call with 0.0 leads to immediate undefined behavior, resulting in a "poison" value for `%log1`. This "poison" value is then used in the multiplication operation `%mul = fmul fast float %log1, %y`, potentially propagating the "poison" effect and making `%mul` a poison value.

As a result, the transformed code introduces an additional "poison" value and makes the "Target more poisonous than the Source". This transformation propagates the undefined behavior to the final result in `%mul`, thereby increasing the scope and impact of the "poisonous" behavior.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8Vk2P4zYM_TXKhdjAUTL5OOSwO4MAc2qBBuixYCzaVitLhiRvNv31BSU7cTJZTHspMAhGMvX4-ERSxBB0bYn24uWbeHmbYR8b5_fnC9q_G3Szk1OX_bEhT6ADoIXOhaBPhpehJzjr2ABC9GhD5XyLUTsL2kJsCMS6MK5eFNUfnTtXYl1A1dsyWfC5iZX53n7pvPuTyijkgZdCHiIFXh1H7CDk4d2G-Orak7bEhq7-0rnz3JgErg0J-Qod-qjL3qA3Fzg3ZKFBq4y2dfJXYiDe9sm1kC8_QCzfoJgXDIJWDduXtL1I23P4qpRm5mjMhZ0E3WqDPssQoNV1EwFNcEA_dIj3EnD8Pws_YEuJ-lwUb6L4mn_f-aMOEDoqdaVLYDESdXbO5x4kd9VnkmPXEfoA0YG20TvVlwStYxmk7JwOzgop4TsaDmhgd_VCCkqnCErXduhJMQwbOK9rbdEwLUpsWaEs-yAvs9CBVx81vn0bhJ6KMPzKpZBL-GVwBK9OkViOH9dF_ks5k7YUVdoSVMZhBLG600Nuh22mJV_huroIuQOx-ZYhgLc6d04ZUKIxUGGIN8jPsSY4xtU_w2HS88RvXi3lFJET5oriKd7QjauH0DdvDxrc6XWc3Nz_JRmf---x_rjXq-1Nwqj4nylGxmcOyftw4k6ctjefiJN-f2-0obv0zcnd5aoIgBC0rc2z0gCMY6UNt7EuwHXkcx2qnsbS6G3WVcGJGvyunecqHYSfSLEuchst5sXHHvCxBJMAz0B0AKU9ldFc0gWQyriTMhRyyzUod4AhgaOv-5ZsnMOxuZ7P1zdyAkOocttoW1Ia47PQmJWn0JvIfVZbwGfaVc7fhFukxpr8PjHViaCFPpAau1HL8J3R5dDzrqpnzH-bOWz8Cp2LZGNuV513HdYYxzfijg9VFYvCXavFv9jk6i51M8immffdDX7lTMqqfGjbY0O99uL0vOL1mXmaepkChZHkEX1NMXfxbOx6_ohZr99c70sSUg4yP7wZY9QD3pN8HTK5SiWSA-G7mMY_BObpdAFtS08YRhVD6bpMWrcdlvH6SI2RuT5wcKO7QbuZ2i_VbrnDGe0Xm2K1W61XxXbW7E9qIeWL3G0lbsqqqrbFEtWSikJhhcs1zvReFnJVLBaLYrVYyu38ZbOj7anaLl6wKEu1E6uCWtRmnqrH-XqW3u_9ZrORq5nBE5mQRiEpLZ3z4y6k5MnI79OUcurrwN1MhxhuKFFHQ_v320h0vFf6_SbMr9dr-jaqnBV9eLcPD7NCtpiOO1xLk-klP6uTuWXWe7NvYuwC9355EPJQ69j0p3np2tuY9TB85YFGyEPS5J8AAAD__0eaOkc">