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

    <tr>
        <th>Summary</th>
        <td>
            [EarlyCSE] Optimization ignores specified floating point rounding mode
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          patrick-rivos
      </td>
    </tr>
</table>

<pre>
    Testcase:
```llvm ir
define float @test() {
  call void @llvm.set.rounding(i32 2)   ;; Round up
  %a = bitcast i32 1 to float           ;; 1e-45
  %b = bitcast i32 u0x3F800000 to float ;; 1.0
  %res = fadd float %a, %b
  ret float %res
}
```

The optimized version is:
```llvm ir
define float @test() {
  call void @llvm.set.rounding(i32 2)
  ret float 1.000000e+00
}
```

IIUC this ignores the specified rounding mode since it rounds down the result of the fadd.

Godbolt: https://godbolt.org/z/471Ph5EWP
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8k8Fy2ywQx58GXXasQYuw5YMOcRx9k9OXadPpGcHaopWFB5DT5Ok7YHucJpeeymjEwO5_l_3BqhDsfiJqmdwwuS3UHAfn26OK3uqfC29PLhS9M6_tM4WoVSAm7hjfMn7Hlvz8jePpANafdw3t7ESwG52KwGoeKUSGDcM1sNXm7AOg1TjCyVmTXJK-DBRL7-bJ2GnPsLECAZMIgIkNExv4kowwH68hGEoFTGyht-lcEZKkguguuW_jEqCiRS3fqftP6pn_El3D07jFuapL_k7rKWT1Thlz9UOpGN7nyFdPT_Fm9RQu4FbbDwQvy_x_HgjcMdqDfSMDJ_LBugls-LfcP1dQlRkMJ4Ybzv-mksfHb_cQBxvA7ieXkMWBIBxJ250lA9e0cHCGINhJE9h43g5g3MuUBZ7CPEZwu7xKxMv3Wf5zpndjZOIOhhiPmRN2DLv92VA6v2fYvTHs6lX1NMiH70-FaYVZi7UqqK1Wgjc1LldNMbTr2uham57WTS3lEiVvBNfLXkuNuha8sC1yrKuKS6zESjYlISkhBWqqmnUlidWcDsqOZabr_L6wIczUVpXkKyxG1dMYcrchTvQC2coQU_P5NokW_bwP6XpsiOEWJto45jZ9UH58vf_6wOQW_j8_FBXzG7lQvhHON5cIH52d4p_Ai9mP7QdiNg5zX2p3YNilxJdpcfTuB-nIsMvHDQy7Sz2nFn8HAAD__5Q4Qvc">