<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">