Fix a logic bug when copying fast-math flags.

"Setting" does not equal "copying". This bug has sat dormant for 2 reasons:
1. The unit test was not adequate.
2. Every current user of the "copyFastMathFlags" API is operating on a new instruction.
   (ie, all existing fast-math flags are off). If you copy flags to an existing
   instruction that has some flags on already, you will not necessarily turn them off
   as expected.

I uncovered this bug while trying to implement a fix for PR20802.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216939 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Sanjay Patel
2014-09-02 20:03:00 +00:00
parent 6cae39f284
commit 4211bbc568
6 changed files with 26 additions and 5 deletions
+1 -1
View File
@@ -2043,7 +2043,7 @@ void BinaryOperator::copyFlags(const Value *V) {
// Copy the fast-math flags.
if (auto *FP = dyn_cast<FPMathOperator>(V))
setFastMathFlags(FP->getFastMathFlags());
copyFastMathFlags(FP->getFastMathFlags());
}
//===----------------------------------------------------------------------===//