Index: llvm/trunk/docs/LangRef.rst =================================================================== --- llvm/trunk/docs/LangRef.rst +++ llvm/trunk/docs/LangRef.rst @@ -15064,12 +15064,21 @@ accurately preserve exception behavior without compromising LLVM's ability to optimize FP code when the default behavior is used. -Each of these intrinsics corresponds to a normal floating-point operation. The -first two arguments and the return value are the same as the corresponding FP +If any FP operation in a function is constrained then they all must be +constrained. This is required for correct LLVM IR. Optimizations that +move code around can create miscompiles if mixing of constrained and normal +operations is done. The correct way to mix constrained and less constrained +operations is to use the rounding mode and exception handling metadata to +mark constrained intrinsics as having LLVM's default behavior. + +Each of these intrinsics corresponds to a normal floating-point operation. The +data arguments and the return value are the same as the corresponding FP operation. -The third argument is a metadata argument specifying the rounding mode to be -assumed. This argument must be one of the following strings: +The rounding mode argument is a metadata string specifying what +assumptions, if any, the optimizer can make when transforming constant +values. Some constrained FP intrinsics omit this argument. If required +by the intrinsic, this argument must be one of the following strings: :: @@ -15099,9 +15108,9 @@ non-dynamic rounding mode which does not match the actual rounding mode at runtime results in undefined behavior. -The fourth argument to the constrained floating-point intrinsics specifies the -required exception behavior. This argument must be one of the following -strings: +The exception behavior argument is a metadata string describing the floating +point exception semantics that required for the intrinsic. This argument +must be one of the following strings: ::