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

    <tr>
        <th>Summary</th>
        <td>
            AMDGPU mishandles canonicalize with ieee mode disabled
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AMDGPU,
            miscompilation
      </td>
    </tr>

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

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

<pre>
    With the IEEE mode bit disabled (i.e. shaders or any function with the `"amdgpu-ieee"="false"` attribute, the canonicalize intrinsic is not implemented correctly. No floating point instruction will quiet a signaling nan in this mode. We need to do something else to ensure a signaling nan is quieted.

```
; llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 < %s | FileCheck -check-prefix=GFX8 %s
; llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 < %s | FileCheck -check-prefix=GFX9 %s

; These do not quiet with ieee=0
; GFX8 v_mul_f32_e32 v0, 1.0, v0
; GFX9: v_max_f32_e32 v0, v0, v0
define float @canonicalize(float %x) "amdgpu-ieee"="false" {
 %result = call float @llvm.canonicalize.f32(float %x)
  ret float %result
}

; For gfx9 (and gfx8 without daz/ftz), maybe can do this:
; s_mov_b32 s4, 0x7fc00000
; v_max_f32_e64 v0, v0, s4

; The documentation pseudocode suggests this is biased to return src1
; if src0 is a nan.

; For gfx8, this will still not flush if daz/ftz is enabled. Probably
; need to do both:
; s_mov_b32 s4, 0x7fc00000
; v_max_f32_e64 v0, v0, s4
; v_mul_f32_e32 v0, 1.0, v0

```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VcFu4zYQ_Rr6MrDAkJJtHXTw2vGihxZ7aLG9BRQ5stilSJVDuU6-vqDkJM4usKfWkE2LeHoz82YepYjs2SM2rPrEquNKTakPsVGR0A-rNpjn5qtNPaQe4ZfHx0cYgkFobQJjSbUODTCxswUWQL0yGAlCBOWfoZu8TjZ4-Of1ebbhTAg1mPM4rS0iMiGYPDIhOuVovttwUClF204JmTjMj2nlg7daOfuCYH2K1pPVYAl8SGCH0eGAPqEBHWJEndxzAb8F6FxQyfozjMH6BNZTitNrSs7B35PFBAqyAMploFcerIfUW5rrLOArgkc0kAKYABQGTH1GoiPMm-hpivgjCS3saArG9_na8NvF90x-Auc0rIcU7eiQyWPWRPu1Gkz-9qRgPehxYvJ47q47LoHJAzBREbDtAU7W4aFH_Q3WOi_rMWJnr0weP5_-3M24_z1M_RZmifR7j4RZo9yTRdm573Ob5fG17jnBy9MwuadOiieUAi48N_qhmJfLHbBmcp-x6vod9vIONdhZj0urgZX8flaY2N32RXVlImf80-EDtv3E-D7DI9LkEjB5BK2ce-d37jIU90GKTorvA2USiJjgbXfhy6Vtj--anUKEc3fNie2UN_n_blYtTAmMemHi1KWXTCgOMKjndvZCFjlPKJOvPPQ0hMtTKwVQmaH8uu00z58b4E7ETflBRCo_tBBM0FM2k5ptMhJOJujseJrOZ6REizksQWsVLcaImKbogaJ-uDHZLt_xDFPZD8UPNe8Wc1tarEgp_-bR6dxEfSZ4qz-zoJ-PmgK-xNCq1j3f2O682YbU_4eSLJCfj-mdrVemkaaWtVph87Att3wnKlGv-qbbqpqXyCve7krV6m2FUtfSVLIWldqYlW0EFxWvHoTgpeB1wYUpq7o0pdJKKSVYyXFQ1hXz7IV4XlmiCZsHWW-EWDnVoqP5-BaiVfobesPkfv_r8fOXP_KMiwMTYrCkwzBaNzc2b1fHVWwy5bqdzpRH21Ki9yDJJofNQgODpV5545A-nsZvFl9eC6-vhNUUXdOnNM5DKk5MnM429VNb6DAwccpBbst6jOEv1ImJ01wWMXG6VXZpxL8BAAD__6y1E3Q">