From 9c88b6d6898812c01c82a6d5ec991fb331aef015 Mon Sep 17 00:00:00 2001 From: Lewis Crawford Date: Thu, 8 May 2025 17:00:49 +0100 Subject: [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. --- llvm/lib/Analysis/ConstantFolding.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'llvm/lib/Analysis/ConstantFolding.cpp') 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: -- cgit v1.1