In the review of D111085 it was pointed out that these functions don't conform to the naming scheme in use in LLVM. With this commit we should be good for all of FPEnv.h.
86 lines
2.7 KiB
C++
86 lines
2.7 KiB
C++
//===-- FPEnv.cpp ---- FP Environment -------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
/// @file
|
|
/// This file contains the implementations of entities that describe floating
|
|
/// point environment.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/IR/FPEnv.h"
|
|
#include "llvm/ADT/StringSwitch.h"
|
|
|
|
namespace llvm {
|
|
|
|
Optional<RoundingMode> convertStrToRoundingMode(StringRef RoundingArg) {
|
|
// For dynamic rounding mode, we use round to nearest but we will set the
|
|
// 'exact' SDNodeFlag so that the value will not be rounded.
|
|
return StringSwitch<Optional<RoundingMode>>(RoundingArg)
|
|
.Case("round.dynamic", RoundingMode::Dynamic)
|
|
.Case("round.tonearest", RoundingMode::NearestTiesToEven)
|
|
.Case("round.tonearestaway", RoundingMode::NearestTiesToAway)
|
|
.Case("round.downward", RoundingMode::TowardNegative)
|
|
.Case("round.upward", RoundingMode::TowardPositive)
|
|
.Case("round.towardzero", RoundingMode::TowardZero)
|
|
.Default(None);
|
|
}
|
|
|
|
Optional<StringRef> convertRoundingModeToStr(RoundingMode UseRounding) {
|
|
Optional<StringRef> RoundingStr = None;
|
|
switch (UseRounding) {
|
|
case RoundingMode::Dynamic:
|
|
RoundingStr = "round.dynamic";
|
|
break;
|
|
case RoundingMode::NearestTiesToEven:
|
|
RoundingStr = "round.tonearest";
|
|
break;
|
|
case RoundingMode::NearestTiesToAway:
|
|
RoundingStr = "round.tonearestaway";
|
|
break;
|
|
case RoundingMode::TowardNegative:
|
|
RoundingStr = "round.downward";
|
|
break;
|
|
case RoundingMode::TowardPositive:
|
|
RoundingStr = "round.upward";
|
|
break;
|
|
case RoundingMode::TowardZero:
|
|
RoundingStr = "round.towardzero";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return RoundingStr;
|
|
}
|
|
|
|
Optional<fp::ExceptionBehavior>
|
|
convertStrToExceptionBehavior(StringRef ExceptionArg) {
|
|
return StringSwitch<Optional<fp::ExceptionBehavior>>(ExceptionArg)
|
|
.Case("fpexcept.ignore", fp::ebIgnore)
|
|
.Case("fpexcept.maytrap", fp::ebMayTrap)
|
|
.Case("fpexcept.strict", fp::ebStrict)
|
|
.Default(None);
|
|
}
|
|
|
|
Optional<StringRef>
|
|
convertExceptionBehaviorToStr(fp::ExceptionBehavior UseExcept) {
|
|
Optional<StringRef> ExceptStr = None;
|
|
switch (UseExcept) {
|
|
case fp::ebStrict:
|
|
ExceptStr = "fpexcept.strict";
|
|
break;
|
|
case fp::ebIgnore:
|
|
ExceptStr = "fpexcept.ignore";
|
|
break;
|
|
case fp::ebMayTrap:
|
|
ExceptStr = "fpexcept.maytrap";
|
|
break;
|
|
}
|
|
return ExceptStr;
|
|
}
|
|
} // namespace llvm
|