@@ -1294,8 +1294,7 @@ static Instruction *foldFDivConstantDivisor(BinaryOperator &I) {
1294
1294
// -X / C --> X / -C
1295
1295
Value *X;
1296
1296
if (match (I.getOperand (0 ), m_FNeg (m_Value (X))))
1297
- return BinaryOperator::CreateWithCopiedFlags (Instruction::FDiv, X,
1298
- ConstantExpr::getFNeg (C), &I);
1297
+ return BinaryOperator::CreateFDivFMF (X, ConstantExpr::getFNeg (C), &I);
1299
1298
1300
1299
// If the constant divisor has an exact inverse, this is always safe. If not,
1301
1300
// then we can still create a reciprocal if fast-math-flags allow it and the
@@ -1312,8 +1311,7 @@ static Instruction *foldFDivConstantDivisor(BinaryOperator &I) {
1312
1311
return nullptr ;
1313
1312
1314
1313
// X / C --> X * (1 / C)
1315
- return BinaryOperator::CreateWithCopiedFlags (
1316
- Instruction::FMul, I.getOperand (0 ), RecipC, &I);
1314
+ return BinaryOperator::CreateFMulFMF (I.getOperand (0 ), RecipC, &I);
1317
1315
}
1318
1316
1319
1317
// / Remove negation and try to reassociate constant math.
@@ -1324,10 +1322,8 @@ static Instruction *foldFDivConstantDividend(BinaryOperator &I) {
1324
1322
1325
1323
// C / -X --> -C / X
1326
1324
Value *X;
1327
- if (match (I.getOperand (1 ), m_FNeg (m_Value (X)))) {
1328
- return BinaryOperator::CreateWithCopiedFlags (
1329
- Instruction::FDiv, ConstantExpr::getFNeg (C), X, &I);
1330
- }
1325
+ if (match (I.getOperand (1 ), m_FNeg (m_Value (X))))
1326
+ return BinaryOperator::CreateFDivFMF (ConstantExpr::getFNeg (C), X, &I);
1331
1327
1332
1328
if (!I.hasAllowReassoc () || !I.hasAllowReciprocal ())
1333
1329
return nullptr ;
@@ -1348,7 +1344,7 @@ static Instruction *foldFDivConstantDividend(BinaryOperator &I) {
1348
1344
if (!NewC || !NewC->isNormalFP ())
1349
1345
return nullptr ;
1350
1346
1351
- return BinaryOperator::CreateWithCopiedFlags (Instruction::FDiv, NewC, X, &I);
1347
+ return BinaryOperator::CreateFDivFMF ( NewC, X, &I);
1352
1348
}
1353
1349
1354
1350
Instruction *InstCombiner::visitFDiv (BinaryOperator &I) {
@@ -1388,9 +1384,7 @@ Instruction *InstCombiner::visitFDiv(BinaryOperator &I) {
1388
1384
FMFIntersect &= cast<Instruction>(Op0)->getFastMathFlags ();
1389
1385
YZInst->setFastMathFlags (FMFIntersect);
1390
1386
}
1391
- Instruction *NewDiv = BinaryOperator::CreateFDiv (X, YZ);
1392
- NewDiv->setFastMathFlags (I.getFastMathFlags ());
1393
- return NewDiv;
1387
+ return BinaryOperator::CreateFDivFMF (X, YZ, &I);
1394
1388
}
1395
1389
if (match (Op1, m_OneUse (m_FDiv (m_Value (X), m_Value (Y)))) &&
1396
1390
(!isa<Constant>(Y) || !isa<Constant>(Op0))) {
@@ -1401,9 +1395,7 @@ Instruction *InstCombiner::visitFDiv(BinaryOperator &I) {
1401
1395
FMFIntersect &= cast<Instruction>(Op1)->getFastMathFlags ();
1402
1396
YZInst->setFastMathFlags (FMFIntersect);
1403
1397
}
1404
- Instruction *NewDiv = BinaryOperator::CreateFDiv (YZ, X);
1405
- NewDiv->setFastMathFlags (I.getFastMathFlags ());
1406
- return NewDiv;
1398
+ return BinaryOperator::CreateFDivFMF (YZ, X, &I);
1407
1399
}
1408
1400
}
1409
1401
0 commit comments