-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
diff --git a/include/llvm/Target/TargetOptions.h b/include/llvm/Target/TargetOptions.h
index 2131eca..ea391b7 100644
--- a/include/llvm/Target/TargetOptions.h
+++ b/include/llvm/Target/TargetOptions.h
@@ -39,14 +39,15 @@
   /// 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
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 2e1f872..cae6963 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -1105,8 +1105,7 @@
   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;
diff --git a/lib/Target/TargetMachine.cpp b/lib/Target/TargetMachine.cpp
index 28f3ae8..bf70d12 100644
--- a/lib/Target/TargetMachine.cpp
+++ b/lib/Target/TargetMachine.cpp
@@ -26,7 +26,7 @@
   bool NoFramePointerElim;
   bool NoExcessFPPrecision;
   bool UnsafeFPMath;
-  bool FiniteOnlyFPMath;
+  bool FiniteOnlyFPMathOption;
   Reloc::Model RelocationModel;
 };
 namespace {
@@ -52,7 +52,7 @@
   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 @@
 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; }
+};