[libclc] Improve __clc_min/max/clamp implementation (#172599)
Replace __clc_max/min with __clc_fmax/fmin in __clc_clamp. FP
__clc_min/max/clamp now lowers to @llvm.minimumnum/@llvm.maximumnum, and
integer clamp lowers to @llvm.umin/@llvm.umax. This reduce fcmp+select
chains and improving codegen. Example change to amdgcn--amdhsa.bc:
```
in function _Z5clamphhh:
> %4 = icmp ugt i8 %0, %2
%4 = tail call noundef i8 @llvm.umax.i8(i8 %0, i8 %1)
> %6 = select i1 %4, i8 %2, i8 %5
> ret i8 %6
< %5 = tail call noundef i8 @llvm.umin.i8(i8 %2, i8 %4)
< ret i8 %5
in function _Z5clampddd:
in block %3 / %3:
> %4 = fcmp ogt double %0, %2
> %5 = fcmp olt double %0, %1
> %6 = select i1 %5, double %1, double %0
> %7 = select i1 %4, double %2, double %6
> ret double %7
< %4 = tail call noundef double @llvm.maximumnum.f64(double %0, double %1)
< %5 = tail call noundef double @llvm.minimumnum.f64(double %4, double %2)
< ret double %5
```