-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:
Evan Cheng 2006-05-23 18:18:46 +00:00
parent 1fd8a4f65d
commit 80235d508e
3 changed files with 17 additions and 9 deletions

View File

@ -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

View File

@ -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;

View File

@ -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; }
};