From 4645ada5428d45024aa633a70728d473f31c6174 Mon Sep 17 00:00:00 2001 From: Michael Ilseman Date: Tue, 27 Nov 2012 00:48:29 +0000 Subject: [PATCH] Fast-math flags documentation added to LangRef llvm-svn: 168652 --- docs/LangRef.html | 134 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 123 insertions(+), 11 deletions(-) diff --git a/docs/LangRef.html b/docs/LangRef.html index 35ad94d9900..cfc1c7d298b 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -3970,7 +3970,7 @@ IfUnequal:
Syntax:
-  <result> = fadd <ty> <op1>, <op2>   ; yields {ty}:result
+  <result> = fadd [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
 
Overview:
@@ -3982,7 +3982,28 @@ IfUnequal: floating point values. Both arguments must have identical types.

Semantics:
-

The value produced is the floating point sum of the two operands.

+

The value produced is the floating point sum of the two operands. This + instruction can also take any number of fast-math flags, which are + optimization hints to enable otherwise unsafe floating point + optimizations:

+
    + +
  1. nnan: No NaNs - Allow optimizations to assume the arguments and + result are not NaN. Such optimizations are required to retain defined behavior + over NaNs, but the value of the result is undefined.
  2. + +
  3. ninf: No Inf - Allow optimizations to assume the arguments and + result are not +/-Inf. Such optimizations are required to retain defined + behavior over +/-Inf, but the value of the result is undefined.
  4. + +
  5. nsz: No Signed Zeros: Allow optimizations to treat the + sign of a zero argument or result as insignificant.
  6. + +
  7. fast: Allow algebraically equivalent transformations that may + dramatically change results in floating point (e.g. reassociate). This flag + implies all the others.
  8. + +
Example:
@@ -4052,7 +4073,7 @@ IfUnequal:
 
 
Syntax:
-  <result> = fsub <ty> <op1>, <op2>   ; yields {ty}:result
+  <result> = fsub [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
 
Overview:
@@ -4069,7 +4090,28 @@ IfUnequal: floating point values. Both arguments must have identical types.

Semantics:
-

The value produced is the floating point difference of the two operands.

+

The value produced is the floating point difference of the two operands. This + instruction can also take any number of fast-math flags, which are + optimization hints to enable otherwise unsafe floating point + optimizations:

+
    + +
  1. nnan: No NaNs - Allow optimizations to assume the arguments and + result are not NaN. Such optimizations are required to retain defined behavior + over NaNs, but the value of the result is undefined.
  2. + +
  3. ninf: No Inf - Allow optimizations to assume the arguments and + result are not +/-Inf. Such optimizations are required to retain defined + behavior over +/-Inf, but the value of the result is undefined.
  4. + +
  5. nsz: No Signed Zeros: Allow optimizations to treat the + sign of a zero argument or result as insignificant.
  6. + +
  7. fast: Allow algebraically equivalent transformations that may + dramatically change results in floating point (e.g. reassociate). This flag + implies all the others.
  8. + +
Example:
@@ -4138,7 +4180,7 @@ IfUnequal:
 
 
Syntax:
-  <result> = fmul <ty> <op1>, <op2>   ; yields {ty}:result
+  <result> = fmul [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
 
Overview:
@@ -4150,7 +4192,28 @@ IfUnequal: floating point values. Both arguments must have identical types.

Semantics:
-

The value produced is the floating point product of the two operands.

+

The value produced is the floating point product of the two operands. This + instruction can also take any number of fast-math flags, which are + optimization hints to enable otherwise unsafe floating point + optimizations:

+
    + +
  1. nnan: No NaNs - Allow optimizations to assume the arguments and + result are not NaN. Such optimizations are required to retain defined behavior + over NaNs, but the value of the result is undefined.
  2. + +
  3. ninf: No Inf - Allow optimizations to assume the arguments and + result are not +/-Inf. Such optimizations are required to retain defined + behavior over +/-Inf, but the value of the result is undefined.
  4. + +
  5. nsz: No Signed Zeros: Allow optimizations to treat the + sign of a zero argument or result as insignificant.
  6. + +
  7. fast: Allow algebraically equivalent transformations that may + dramatically change results in floating point (e.g. reassociate). This flag + implies all the others.
  8. + +
Example:
@@ -4252,7 +4315,7 @@ IfUnequal:
 
 
Syntax:
-  <result> = fdiv <ty> <op1>, <op2>   ; yields {ty}:result
+  <result> = fdiv [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
 
Overview:
@@ -4264,7 +4327,32 @@ IfUnequal: floating point values. Both arguments must have identical types.

Semantics:
-

The value produced is the floating point quotient of the two operands.

+

The value produced is the floating point quotient of the two operands. This + instruction can also take any number of fast-math flags, which are + optimization hints to enable otherwise unsafe floating point + optimizations:

+
    + +
  1. nnan: No NaNs - Allow optimizations to assume the arguments and + result are not NaN. Such optimizations are required to retain defined behavior + over NaNs, but the value of the result is undefined.
  2. + +
  3. ninf: No Inf - Allow optimizations to assume the arguments and + result are not +/-Inf. Such optimizations are required to retain defined + behavior over +/-Inf, but the value of the result is undefined.
  4. + +
  5. nsz: No Signed Zeros: Allow optimizations to treat the + sign of a zero argument or result as insignificant.
  6. + +
  7. arcp: Allow Reciprocal: Allow optimizations to use the reciprocal + of an argument rather than perform division.
  8. + +
  9. fast: Allow algebraically equivalent transformations that may + dramatically change results in floating point (e.g. reassociate). This flag + implies all the others.
  10. + +
+

Example:
@@ -4371,7 +4459,7 @@ IfUnequal:
 
 
Syntax:
-  <result> = frem <ty> <op1>, <op2>   ; yields {ty}:result
+  <result> = frem [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
 
Overview:
@@ -4384,8 +4472,32 @@ IfUnequal: floating point values. Both arguments must have identical types.

Semantics:
-

This instruction returns the remainder of a division. The remainder - has the same sign as the dividend.

+

This instruction returns the remainder of a division. The remainder + has the same sign as the dividend. This instruction can also take any number + of fast-math flags, which are optimization hints to enable otherwise unsafe + floating point optimizations:

+ +
    + +
  1. nnan: No NaNs - Allow optimizations to assume the arguments and + result are not NaN. Such optimizations are required to retain defined behavior + over NaNs, but the value of the result is undefined.
  2. + +
  3. ninf: No Inf - Allow optimizations to assume the arguments and + result are not +/-Inf. Such optimizations are required to retain defined + behavior over +/-Inf, but the value of the result is undefined.
  4. + +
  5. nsz: No Signed Zeros: Allow optimizations to treat the + sign of a zero argument or result as insignificant.
  6. + +
  7. arcp: Allow Reciprocal: Allow optimizations to use the reciprocal + of an argument rather than perform division.
  8. + +
  9. fast: Allow algebraically equivalent transformations that may + dramatically change results in floating point (e.g. reassociate). This flag + implies all the others.
  10. + +
Example: