1 //===-- FPEnv.cpp ---- FP Environment -------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 /// This file contains the implementations of entities that describe floating
11 /// point environment.
13 //===----------------------------------------------------------------------===//
15 #include "llvm/IR/FPEnv.h"
16 #include "llvm/ADT/StringSwitch.h"
20 Optional
<RoundingMode
> StrToRoundingMode(StringRef RoundingArg
) {
21 // For dynamic rounding mode, we use round to nearest but we will set the
22 // 'exact' SDNodeFlag so that the value will not be rounded.
23 return StringSwitch
<Optional
<RoundingMode
>>(RoundingArg
)
24 .Case("round.dynamic", RoundingMode::Dynamic
)
25 .Case("round.tonearest", RoundingMode::NearestTiesToEven
)
26 .Case("round.tonearestaway", RoundingMode::NearestTiesToAway
)
27 .Case("round.downward", RoundingMode::TowardNegative
)
28 .Case("round.upward", RoundingMode::TowardPositive
)
29 .Case("round.towardzero", RoundingMode::TowardZero
)
33 Optional
<StringRef
> RoundingModeToStr(RoundingMode UseRounding
) {
34 Optional
<StringRef
> RoundingStr
= None
;
35 switch (UseRounding
) {
36 case RoundingMode::Dynamic
:
37 RoundingStr
= "round.dynamic";
39 case RoundingMode::NearestTiesToEven
:
40 RoundingStr
= "round.tonearest";
42 case RoundingMode::NearestTiesToAway
:
43 RoundingStr
= "round.tonearestaway";
45 case RoundingMode::TowardNegative
:
46 RoundingStr
= "round.downward";
48 case RoundingMode::TowardPositive
:
49 RoundingStr
= "round.upward";
51 case RoundingMode::TowardZero
:
52 RoundingStr
= "round.towardzero";
60 Optional
<fp::ExceptionBehavior
> StrToExceptionBehavior(StringRef ExceptionArg
) {
61 return StringSwitch
<Optional
<fp::ExceptionBehavior
>>(ExceptionArg
)
62 .Case("fpexcept.ignore", fp::ebIgnore
)
63 .Case("fpexcept.maytrap", fp::ebMayTrap
)
64 .Case("fpexcept.strict", fp::ebStrict
)
68 Optional
<StringRef
> ExceptionBehaviorToStr(fp::ExceptionBehavior UseExcept
) {
69 Optional
<StringRef
> ExceptStr
= None
;
72 ExceptStr
= "fpexcept.strict";
75 ExceptStr
= "fpexcept.ignore";
78 ExceptStr
= "fpexcept.maytrap";