OSDN Git Service

[InstCombine] use CreateWithCopiedFlags to reduce code; NFCI
authorSanjay Patel <spatel@rotateright.com>
Mon, 19 Feb 2018 23:09:03 +0000 (23:09 +0000)
committerSanjay Patel <spatel@rotateright.com>
Mon, 19 Feb 2018 23:09:03 +0000 (23:09 +0000)
Also, move the folds with constants closer to make it easier to follow.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@325541 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/InstCombine/InstCombineMulDivRem.cpp

index 9df0d46..6d0b9ac 100644 (file)
@@ -1313,7 +1313,8 @@ static Instruction *foldFDivConstantDivisor(BinaryOperator &FDiv) {
     return nullptr;
 
   auto *RecipCFP = ConstantFP::get(FDiv.getType(), Reciprocal);
-  return BinaryOperator::CreateFMul(FDiv.getOperand(0), RecipCFP);
+  return BinaryOperator::CreateWithCopiedFlags(Instruction::FMul, RecipCFP,
+                                               FDiv.getOperand(0), &FDiv);
 }
 
 /// Try to reassociate C / X expressions where X includes another constant.
@@ -1352,10 +1353,11 @@ Instruction *InstCombiner::visitFDiv(BinaryOperator &I) {
                                   SQ.getWithInstruction(&I)))
     return replaceInstUsesWith(I, V);
 
-  if (Instruction *FMul = foldFDivConstantDivisor(I)) {
-    FMul->copyFastMathFlags(&I);
+  if (Instruction *FMul = foldFDivConstantDivisor(I))
     return FMul;
-  }
+
+  if (Instruction *NewFDiv = foldFDivConstantDividend(I))
+    return NewFDiv;
 
   if (isa<Constant>(Op0))
     if (SelectInst *SI = dyn_cast<SelectInst>(Op1))
@@ -1394,9 +1396,6 @@ Instruction *InstCombiner::visitFDiv(BinaryOperator &I) {
     return nullptr;
   }
 
-  if (Instruction *NewFDiv = foldFDivConstantDividend(I))
-    return NewFDiv;
-
   if (AllowReassociate) {
     Value *X, *Y;
     if (match(Op0, m_OneUse(m_FDiv(m_Value(X), m_Value(Y)))) &&