mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-23 12:45:47 +00:00
-enable-unsafe-fp-math implies -enable-finite-only-fp-math
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28437 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1fd8a4f65d
commit
80235d508e
@ -39,14 +39,15 @@ namespace llvm {
|
||||
/// this flag is off (the default), the code generator is not allowed to
|
||||
/// produce results that are "less precise" than IEEE allows. This includes
|
||||
/// use of X86 instructions like FSIN and FCOS instead of libcalls.
|
||||
/// UnsafeFPMath implies FiniteOnlyFPMath.
|
||||
extern bool UnsafeFPMath;
|
||||
|
||||
/// FiniteOnlyFPMath - This is enabled when the -enable-finite-only-fp-math
|
||||
/// flag is specified on the command line. When this flag is off (default),
|
||||
/// FiniteOnlyFPMath - This returns true when the -enable-finite-only-fp-math
|
||||
/// option is specified on the command line. If this returns false (default),
|
||||
/// the code generator is not allowed to assume that FP arithmetic arguments
|
||||
/// and results are never NaNs or +-Infs. This includes ignoring parity flag
|
||||
/// (PF) when checking for FP equality.
|
||||
extern bool FiniteOnlyFPMath;
|
||||
/// and results are never NaNs or +-Infs.
|
||||
extern bool FiniteOnlyFPMathOption;
|
||||
extern bool FiniteOnlyFPMath();
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -1105,8 +1105,7 @@ void SelectionDAGLowering::visitSetCC(User &I,ISD::CondCode SignedOpcode,
|
||||
SDOperand Op1 = getValue(I.getOperand(0));
|
||||
SDOperand Op2 = getValue(I.getOperand(1));
|
||||
ISD::CondCode Opcode = SignedOpcode;
|
||||
if ((!UnsafeFPMath && !FiniteOnlyFPMath) &&
|
||||
I.getOperand(0)->getType()->isFloatingPoint())
|
||||
if (!FiniteOnlyFPMath() && I.getOperand(0)->getType()->isFloatingPoint())
|
||||
Opcode = FPOpcode;
|
||||
else if (I.getOperand(0)->getType()->isUnsigned())
|
||||
Opcode = UnsignedOpcode;
|
||||
|
@ -26,7 +26,7 @@ namespace llvm {
|
||||
bool NoFramePointerElim;
|
||||
bool NoExcessFPPrecision;
|
||||
bool UnsafeFPMath;
|
||||
bool FiniteOnlyFPMath;
|
||||
bool FiniteOnlyFPMathOption;
|
||||
Reloc::Model RelocationModel;
|
||||
};
|
||||
namespace {
|
||||
@ -52,7 +52,7 @@ namespace {
|
||||
cl::opt<bool, true>
|
||||
EnableFiniteOnltFPMath("enable-finite-only-fp-math",
|
||||
cl::desc("Enable optimizations that assumes non- NaNs / +-Infs"),
|
||||
cl::location(FiniteOnlyFPMath),
|
||||
cl::location(FiniteOnlyFPMathOption),
|
||||
cl::init(false));
|
||||
cl::opt<llvm::Reloc::Model, true>
|
||||
DefRelocationModel(
|
||||
@ -93,3 +93,11 @@ Reloc::Model TargetMachine::getRelocationModel() {
|
||||
void TargetMachine::setRelocationModel(Reloc::Model Model) {
|
||||
RelocationModel = Model;
|
||||
}
|
||||
|
||||
namespace llvm {
|
||||
/// FiniteOnlyFPMath - This returns true when the -enable-finite-only-fp-math
|
||||
/// option is specified on the command line. If this returns false (default),
|
||||
/// the code generator is not allowed to assume that FP arithmetic arguments
|
||||
/// and results are never NaNs or +-Infs.
|
||||
bool FiniteOnlyFPMath() { return UnsafeFPMath || FiniteOnlyFPMathOption; }
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user