diff options
author | Lewis Crawford <lcrawford@nvidia.com> | 2025-05-08 17:00:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-08 18:00:49 +0200 |
commit | 9c88b6d6898812c01c82a6d5ec991fb331aef015 (patch) | |
tree | b80f666a8c7068eabd101f98778a991f5f2aa26f /llvm/lib/Analysis/ConstantFolding.cpp | |
parent | 37fecfaa63eef7bd9dff9c16d74e61c99e3ce70a (diff) | |
download | llvm-9c88b6d6898812c01c82a6d5ec991fb331aef015.zip llvm-9c88b6d6898812c01c82a6d5ec991fb331aef015.tar.gz llvm-9c88b6d6898812c01c82a6d5ec991fb331aef015.tar.bz2 |
[ConstantFolding] Fold maximumnum and minimumnum (#138700)
Add constant-folding support for the maximumnum and minimumnum
intrinsics, and extend the tests to show the qnan vs snan behavior
differences between maxnum/maximum/maximumnum.
Diffstat (limited to 'llvm/lib/Analysis/ConstantFolding.cpp')
-rw-r--r-- | llvm/lib/Analysis/ConstantFolding.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index 5b329e2..412a0e8 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -1642,6 +1642,8 @@ bool llvm::canConstantFoldCallTo(const CallBase *Call, const Function *F) { case Intrinsic::maxnum: case Intrinsic::minimum: case Intrinsic::maximum: + case Intrinsic::minimumnum: + case Intrinsic::maximumnum: case Intrinsic::log: case Intrinsic::log2: case Intrinsic::log10: @@ -2930,6 +2932,8 @@ static Constant *ConstantFoldIntrinsicCall2(Intrinsic::ID IntrinsicID, Type *Ty, case Intrinsic::minnum: case Intrinsic::maximum: case Intrinsic::minimum: + case Intrinsic::maximumnum: + case Intrinsic::minimumnum: case Intrinsic::nvvm_fmax_d: case Intrinsic::nvvm_fmin_d: // If one argument is undef, return the other argument. @@ -3030,6 +3034,10 @@ static Constant *ConstantFoldIntrinsicCall2(Intrinsic::ID IntrinsicID, Type *Ty, return ConstantFP::get(Ty->getContext(), minimum(Op1V, Op2V)); case Intrinsic::maximum: return ConstantFP::get(Ty->getContext(), maximum(Op1V, Op2V)); + case Intrinsic::minimumnum: + return ConstantFP::get(Ty->getContext(), minimumnum(Op1V, Op2V)); + case Intrinsic::maximumnum: + return ConstantFP::get(Ty->getContext(), maximumnum(Op1V, Op2V)); case Intrinsic::nvvm_fmax_d: case Intrinsic::nvvm_fmax_f: |