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

    <tr>
        <th>Summary</th>
        <td>
            Convert clamp into fmaxnum/fminnum pairs.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    test case

```cpp
float clamp(float a) 

  const float b = 255.0; 
  const float c = 0.0; 
 
  if(b < a) 
    return b; 
  if(a < c) 
    return c; 
 
  return a; 
}
```

clang compiles to
```asm
clamp:                                  // @clamp
 movi    d1, #0000000000000000
        fcmp    s0, #0.0
        mov w8, #1132396544                 // =0x437f0000
        fmov    s2, w8
 fcsel   s1, s1, s0, mi
        fcmp    s0, s2
        fcsel   s0, s2, s1, gt
        ret
```
but we could have something like
```asm
clamp:                                  // @clamp
// BB#0:                                // %entry
        adrp    x8, .LCPI0_0
        ldr     s1, [x8, :lo12:.LCPI0_0]
        fmov    s2, wzr
        fmaxnm  s0, s0, s2
        fminnm  s0, s0, s1
 ret
```

@sebpop  had a patch a while back https://reviews.llvm.org/D24033 that would do this. Since phabricator is deprecated i'll move the patch here.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0lM-O-jYQx5_GuYw2cuwEkkMOCwipUg-V-gDVxJkQd504sh3Y7dNX-QO7UHbVy89CNng-_s54vsLovT71RCXLdiw7RDiG1rqy1Q5rHT4wqmz9UQbyARR6YvzA-Os6b_jyUcOw7DTGYgBlsBuYyJdfyEQB64Htbv0GoGzvAyxIBUweQGRZzJl8jqgZ4XfAldMNE_mksf-aDADAURhdD9VX1ZnGmVZPafUkxRrCzxDbHh668LU1ymB_AmW7QRvyEOwDi767gd3A5Jz_58HEkYkjsJQvZ5bKOnvWU7ROmNgDE5I_jM_rTaNR3TCtnl_x-IHo7Bku-RpNEilkscnS9Nty5IG_p3LbPMk1SU25xKR2yddoozyZaXuueJ3ncjr9U7FePEZXnWv0pnYK96Sj8NSqagxwIVB2NDW0eCbwtqPQ6v4ERr_RL_Js3dztpvb_D5mriMioD-7j_m5Yu7lH77Nl8e_7P37jfz0YYWo3r0t3WLZbYCZfjU0Ek6-3Y9nhRwv_cY9hfO-7mwXPbep0_x8mWZnvnFnnlHuqBjsAtFgDwoBBtYBwabUhqFC9QRvC4Jlcm-rorOniY2POXWzdiYnjQaRcSggtBrjMTtcWQqt9DH_qXhEMLVZOKwzWgfZQ0-BIYaAaNBNbY6Z_BEFoaU3fkqN4KTCqS1kXssCIymTL07TYFEJGbSlRprjBplFYSC4KTEjklax40RRJU_NIl4KLlCc8E1IILmNVbPIkrdM8U0Utc2Ippw61uV0l0t6PVG63SZZHBisy_vpku3KCXqrx5FnKjfbhswNR0MFQubf9mdz6NIPug13MGzsmjrNFYwcDaufjaHSmvG_rSYd2rGJlJ3pSXpeXwdm_SQUmjnN1nonjXOC_AQAA__-6Eqqu">