diff options
author | Han-Chung Wang <hanhan0912@gmail.com> | 2023-12-20 10:35:12 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-20 10:35:12 -0800 |
commit | b33a131c828437efff36179458562e62774da881 (patch) | |
tree | 6743dcba04e91d65113d40d7835d55e571661065 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | e7bd673681481a6bcf999936acc3707113078dad (diff) | |
download | llvm-b33a131c828437efff36179458562e62774da881.zip llvm-b33a131c828437efff36179458562e62774da881.tar.gz llvm-b33a131c828437efff36179458562e62774da881.tar.bz2 |
[mlir][arith] Add support for expanding arith.maxnumf/minnumf ops. (#75989)
The maxnum/minnum semantics can be found at
https://llvm.org/docs/LangRef.html#llvm-minnum-intrinsic.
The revision also updates function names in lit tests to match op name.
Take arith.maxnumf as example:
```
func.func @maxnumf(%lhs: f32, %rhs: f32) -> f32 {
%result = arith.maxnumf %lhs, %rhs : f32
return %result : f32
}
```
will be expanded to
```
func.func @maxnumf(%lhs: f32, %rhs: f32) -> f32 {
%0 = arith.cmpf ugt, %lhs, %rhs : f32
%1 = arith.select %0, %lhs, %rhs : f32
%2 = arith.cmpf uno, %lhs, %lhs : f32
%3 = arith.select %2, %rhs, %1 : f32
return %3 : f32
}
```
Case 1: Both LHS and RHS are not NaN; LHS > RHS
In this case, `%1` is LHS. `%3` and `%1` have the same value, so `%3` is
LHS.
Case 2: LHS is NaN and RHS is not NaN
In this case, `%2` is true, so `%3` is always RHS.
Case 3: LHS is not NaN and RHS is NaN
In this case, `%0` is true and `%1` is LHS. `%2` is false, so `%3` and
`%1` have the same value, which is LHS.
Case 4: Both LHS and RHS are NaN:
`%1` and RHS are all NaN, so the result is still NaN.
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions