Serge Pavlov | ea8678d | 2019-08-29 19:29:11 +0700 | [diff] [blame] | 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 | |
Sven van Haastregt | 665dcda | 2020-02-12 15:57:25 +0000 | [diff] [blame^] | 78 | } |