mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
1696270de0
Currently InstructionSimplify.cpp knows how to simplify floating point instructions that have a NaN operand. It does not know how to handle the matching constrained FP intrinsic. This patch teaches it how to simplify so long as the exception handling is not "fpexcept.strict". Differential Revision: https://reviews.llvm.org/D103169
63 lines
2.2 KiB
C++
63 lines
2.2 KiB
C++
//===- FPEnv.h ---- FP Environment ------------------------------*- C++ -*-===//
|
|
//
|
|
// 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 declarations of entities that describe floating
|
|
/// point environment and related functions.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_IR_FPENV_H
|
|
#define LLVM_IR_FPENV_H
|
|
|
|
#include "llvm/ADT/FloatingPointMode.h"
|
|
#include "llvm/ADT/Optional.h"
|
|
|
|
namespace llvm {
|
|
class StringRef;
|
|
|
|
namespace fp {
|
|
|
|
/// Exception behavior used for floating point operations.
|
|
///
|
|
/// Each of these values correspond to some metadata argument value of a
|
|
/// constrained floating point intrinsic. See the LLVM Language Reference Manual
|
|
/// for details.
|
|
enum ExceptionBehavior : uint8_t {
|
|
ebIgnore, ///< This corresponds to "fpexcept.ignore".
|
|
ebMayTrap, ///< This corresponds to "fpexcept.maytrap".
|
|
ebStrict ///< This corresponds to "fpexcept.strict".
|
|
};
|
|
|
|
}
|
|
|
|
/// Returns a valid RoundingMode enumerator when given a string
|
|
/// that is valid as input in constrained intrinsic rounding mode
|
|
/// metadata.
|
|
Optional<RoundingMode> StrToRoundingMode(StringRef);
|
|
|
|
/// For any RoundingMode enumerator, returns a string valid as input in
|
|
/// constrained intrinsic rounding mode metadata.
|
|
Optional<StringRef> RoundingModeToStr(RoundingMode);
|
|
|
|
/// Returns a valid ExceptionBehavior enumerator when given a string
|
|
/// valid as input in constrained intrinsic exception behavior metadata.
|
|
Optional<fp::ExceptionBehavior> StrToExceptionBehavior(StringRef);
|
|
|
|
/// For any ExceptionBehavior enumerator, returns a string valid as
|
|
/// input in constrained intrinsic exception behavior metadata.
|
|
Optional<StringRef> ExceptionBehaviorToStr(fp::ExceptionBehavior);
|
|
|
|
/// Returns true if the exception handling behavior and rounding mode
|
|
/// match what is used in the default floating point environment.
|
|
inline bool isDefaultFPEnvironment(fp::ExceptionBehavior EB, RoundingMode RM) {
|
|
return EB == fp::ebIgnore && RM == RoundingMode::NearestTiesToEven;
|
|
}
|
|
}
|
|
#endif
|