mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
Add minnum / maxnum intrinsics
These are named following the IEEE-754 names for these functions, rather than the libm fmin / fmax to avoid possible ambiguities. Some languages may implement something resembling fmin / fmax which return NaN if either operand is to propagate errors. These implement the IEEE-754 semantics of returning the other operand if either is a NaN representing missing data. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220341 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1229,6 +1229,8 @@ Constant *llvm::ConstantFoldLoadThroughGEPIndices(Constant *C,
|
||||
bool llvm::canConstantFoldCallTo(const Function *F) {
|
||||
switch (F->getIntrinsicID()) {
|
||||
case Intrinsic::fabs:
|
||||
case Intrinsic::minnum:
|
||||
case Intrinsic::maxnum:
|
||||
case Intrinsic::log:
|
||||
case Intrinsic::log2:
|
||||
case Intrinsic::log10:
|
||||
@ -1625,6 +1627,19 @@ static Constant *ConstantFoldScalarCall(StringRef Name, unsigned IntrinsicID,
|
||||
V1.copySign(V2);
|
||||
return ConstantFP::get(Ty->getContext(), V1);
|
||||
}
|
||||
|
||||
if (IntrinsicID == Intrinsic::minnum) {
|
||||
const APFloat &C1 = Op1->getValueAPF();
|
||||
const APFloat &C2 = Op2->getValueAPF();
|
||||
return ConstantFP::get(Ty->getContext(), minnum(C1, C2));
|
||||
}
|
||||
|
||||
if (IntrinsicID == Intrinsic::maxnum) {
|
||||
const APFloat &C1 = Op1->getValueAPF();
|
||||
const APFloat &C2 = Op2->getValueAPF();
|
||||
return ConstantFP::get(Ty->getContext(), maxnum(C1, C2));
|
||||
}
|
||||
|
||||
if (!TLI)
|
||||
return nullptr;
|
||||
if (Name == "pow" && TLI->has(LibFunc::pow))
|
||||
|
Reference in New Issue
Block a user