diff options
author | YunQiang Su <yunqiang@isrc.iscas.ac.cn> | 2024-10-14 15:49:01 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-14 15:49:01 +0800 |
commit | 5bf81e53dbea609562f91a2d771863cfeb49fa32 (patch) | |
tree | 468e976cb78f0ae780f6bd563058122a69e26736 /clang/lib/AST/ExprConstant.cpp | |
parent | 4b31568e026c844cc577954b050e0f5a7d96bc0c (diff) | |
download | llvm-5bf81e53dbea609562f91a2d771863cfeb49fa32.zip llvm-5bf81e53dbea609562f91a2d771863cfeb49fa32.tar.gz llvm-5bf81e53dbea609562f91a2d771863cfeb49fa32.tar.bz2 |
Clang: Support minimumnum and maximumnum intrinsics (#96281)
We just introduce llvm.minimumnum and llvm.maximumnum intrinsics support
to llvm. Let's support them in Clang.
See: #93033
Diffstat (limited to 'clang/lib/AST/ExprConstant.cpp')
-rw-r--r-- | clang/lib/AST/ExprConstant.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 70b2235..51956c6 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -15310,6 +15310,32 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) { Result = RHS; return true; } + + case Builtin::BI__builtin_fmaximum_num: + case Builtin::BI__builtin_fmaximum_numf: + case Builtin::BI__builtin_fmaximum_numl: + case Builtin::BI__builtin_fmaximum_numf16: + case Builtin::BI__builtin_fmaximum_numf128: { + APFloat RHS(0.); + if (!EvaluateFloat(E->getArg(0), Result, Info) || + !EvaluateFloat(E->getArg(1), RHS, Info)) + return false; + Result = maximumnum(Result, RHS); + return true; + } + + case Builtin::BI__builtin_fminimum_num: + case Builtin::BI__builtin_fminimum_numf: + case Builtin::BI__builtin_fminimum_numl: + case Builtin::BI__builtin_fminimum_numf16: + case Builtin::BI__builtin_fminimum_numf128: { + APFloat RHS(0.); + if (!EvaluateFloat(E->getArg(0), Result, Info) || + !EvaluateFloat(E->getArg(1), RHS, Info)) + return false; + Result = minimumnum(Result, RHS); + return true; + } } } |