Mercurial > hg > CbC > CbC_llvm
comparison llvm/lib/IR/FPEnv.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | 0572611fdcc8 |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 //===-- FPEnv.cpp ---- FP Environment -------------------------------------===// | |
2 // | |
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 | |
6 // | |
7 //===----------------------------------------------------------------------===// | |
8 // | |
9 /// @file | |
10 /// This file contains the implementations of entities that describe floating | |
11 /// point environment. | |
12 // | |
13 //===----------------------------------------------------------------------===// | |
14 | |
15 #include "llvm/ADT/StringSwitch.h" | |
16 #include "llvm/IR/FPEnv.h" | |
17 | |
18 namespace llvm { | |
19 | |
20 Optional<fp::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<fp::RoundingMode>>(RoundingArg) | |
24 .Case("round.dynamic", fp::rmDynamic) | |
25 .Case("round.tonearest", fp::rmToNearest) | |
26 .Case("round.downward", fp::rmDownward) | |
27 .Case("round.upward", fp::rmUpward) | |
28 .Case("round.towardzero", fp::rmTowardZero) | |
29 .Default(None); | |
30 } | |
31 | |
32 Optional<StringRef> RoundingModeToStr(fp::RoundingMode UseRounding) { | |
33 Optional<StringRef> RoundingStr = None; | |
34 switch (UseRounding) { | |
35 case fp::rmDynamic: | |
36 RoundingStr = "round.dynamic"; | |
37 break; | |
38 case fp::rmToNearest: | |
39 RoundingStr = "round.tonearest"; | |
40 break; | |
41 case fp::rmDownward: | |
42 RoundingStr = "round.downward"; | |
43 break; | |
44 case fp::rmUpward: | |
45 RoundingStr = "round.upward"; | |
46 break; | |
47 case fp::rmTowardZero: | |
48 RoundingStr = "round.towardzero"; | |
49 break; | |
50 } | |
51 return RoundingStr; | |
52 } | |
53 | |
54 Optional<fp::ExceptionBehavior> StrToExceptionBehavior(StringRef ExceptionArg) { | |
55 return StringSwitch<Optional<fp::ExceptionBehavior>>(ExceptionArg) | |
56 .Case("fpexcept.ignore", fp::ebIgnore) | |
57 .Case("fpexcept.maytrap", fp::ebMayTrap) | |
58 .Case("fpexcept.strict", fp::ebStrict) | |
59 .Default(None); | |
60 } | |
61 | |
62 Optional<StringRef> ExceptionBehaviorToStr(fp::ExceptionBehavior UseExcept) { | |
63 Optional<StringRef> ExceptStr = None; | |
64 switch (UseExcept) { | |
65 case fp::ebStrict: | |
66 ExceptStr = "fpexcept.strict"; | |
67 break; | |
68 case fp::ebIgnore: | |
69 ExceptStr = "fpexcept.ignore"; | |
70 break; | |
71 case fp::ebMayTrap: | |
72 ExceptStr = "fpexcept.maytrap"; | |
73 break; | |
74 } | |
75 return ExceptStr; | |
76 } | |
77 | |
78 } |