[llvm-commits] [llvm] r168646 - in /llvm/trunk: include/llvm/Bitcode/LLVMBitCodes.h lib/Bitcode/Reader/BitcodeReader.cpp lib/Bitcode/Writer/BitcodeWriter.cpp

Michael Ilseman milseman at apple.com
Mon Nov 26 16:43:39 PST 2012


Author: milseman
Date: Mon Nov 26 18:43:38 2012
New Revision: 168646

URL: http://llvm.org/viewvc/llvm-project?rev=168646&view=rev
Log:
Fast-math flags for the bitcode

Added in bitcode enum for the serializing of fast-math flags. Added in the reading/writing of fast-math flags from the OptimizationFlags record for BinaryOps.


Modified:
    llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h
    llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
    llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp

Modified: llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h?rev=168646&r1=168645&r2=168646&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h (original)
+++ llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h Mon Nov 26 18:43:38 2012
@@ -240,6 +240,16 @@
     PEO_EXACT = 0
   };
 
+  /// Flags for serializing FPMathOperator's
+  /// SubclassOptionalData contents.
+  enum FastMathFlags {
+    FMF_UNSAFE_ALGEBRA   = 0,
+    FMF_NO_NANS          = 1,
+    FMF_NO_INFS          = 2,
+    FMF_NO_SIGNED_ZEROS  = 3,
+    FMF_ALLOW_RECIPROCAL = 4
+  };
+
   /// Encoded AtomicOrdering values.
   enum AtomicOrderingCodes {
     ORDERING_NOTATOMIC = 0,

Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=168646&r1=168645&r2=168646&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Mon Nov 26 18:43:38 2012
@@ -2044,7 +2044,22 @@
                    Opc == Instruction::AShr) {
           if (Record[OpNum] & (1 << bitc::PEO_EXACT))
             cast<BinaryOperator>(I)->setIsExact(true);
+        } else if (isa<FPMathOperator>(I)) {
+          FastMathFlags FMF;
+          FMF.UnsafeAlgebra =
+            0 != (Record[OpNum] & (1 << bitc::FMF_UNSAFE_ALGEBRA));
+          FMF.NoNaNs
+            = 0 != (Record[OpNum] & (1 << bitc::FMF_NO_NANS));
+          FMF.NoInfs
+            = 0 != (Record[OpNum] & (1 << bitc::FMF_NO_INFS));
+          FMF.NoSignedZeros
+            = 0 != (Record[OpNum] & (1 << bitc::FMF_NO_SIGNED_ZEROS));
+          FMF.AllowReciprocal
+            = 0 != (Record[OpNum] & (1 << bitc::FMF_ALLOW_RECIPROCAL));
+          if (FMF.any())
+            I->setFastMathFlags(FMF);
         }
+
       }
       break;
     }

Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=168646&r1=168645&r2=168646&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Mon Nov 26 18:43:38 2012
@@ -553,6 +553,18 @@
                dyn_cast<PossiblyExactOperator>(V)) {
     if (PEO->isExact())
       Flags |= 1 << bitc::PEO_EXACT;
+  } else if (const FPMathOperator *FPMO =
+             dyn_cast<const FPMathOperator>(V)) {
+    if (FPMO->hasUnsafeAlgebra())
+      Flags |= 1 << bitc::FMF_UNSAFE_ALGEBRA;
+    if (FPMO->hasNoNaNs())
+      Flags |= 1 << bitc::FMF_NO_NANS;
+    if (FPMO->hasNoInfs())
+      Flags |= 1 << bitc::FMF_NO_INFS;
+    if (FPMO->hasNoSignedZeros())
+      Flags |= 1 << bitc::FMF_NO_SIGNED_ZEROS;
+    if (FPMO->hasAllowReciprocal())
+      Flags |= 1 << bitc::FMF_ALLOW_RECIPROCAL;
   }
 
   return Flags;





More information about the llvm-commits mailing list