-enable-unsafe-fp-math implies -enable-finite-only-fp-math
authorEvan Cheng <evan.cheng@apple.com>
Tue, 23 May 2006 18:18:46 +0000 (18:18 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 23 May 2006 18:18:46 +0000 (18:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28437 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetOptions.h
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
lib/Target/TargetMachine.cpp

index 2131ecaf3d88e57785726825a8d8de7ed28f4528..ea391b77bb62c73867353c8f6220072f6963f93b 100644 (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
index 2e1f872c8a9e9abe9c5855d6f8217609b417085c..cae696354fde259a8a3303ab891213427795a9ee 100644 (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;
index 28f3ae88a72516e486f3ff5d75f710bed5b83762..bf70d12a6b803be8075422f1920f666cf3f72dcc 100644 (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; }
+};