[llvm] 0445c34 - [ConstantFold] Support loads in ConstantFoldInstOperands()
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 30 03:18:22 PDT 2022
Author: Nikita Popov
Date: 2022-06-30T12:18:15+02:00
New Revision: 0445c340ff48b9ba53e69933cef0af703bb5ea0f
URL: https://github.com/llvm/llvm-project/commit/0445c340ff48b9ba53e69933cef0af703bb5ea0f
DIFF: https://github.com/llvm/llvm-project/commit/0445c340ff48b9ba53e69933cef0af703bb5ea0f.diff
LOG: [ConstantFold] Support loads in ConstantFoldInstOperands()
This allows all constant folding to happen through a single
function, without requiring special handling for loads at each
call-site.
This may not be NFC because some callers currently don't do that
special handling.
Added:
Modified:
llvm/lib/Analysis/ConstantFolding.cpp
llvm/lib/Analysis/InstructionSimplify.cpp
llvm/lib/Analysis/ScalarEvolution.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp
index f5da9637efea..01092b4892f6 100644
--- a/llvm/lib/Analysis/ConstantFolding.cpp
+++ b/llvm/lib/Analysis/ConstantFolding.cpp
@@ -1098,6 +1098,12 @@ Constant *ConstantFoldInstOperandsImpl(const Value *InstOrCE, unsigned Opcode,
case Instruction::ShuffleVector:
return ConstantExpr::getShuffleVector(
Ops[0], Ops[1], cast<ShuffleVectorInst>(InstOrCE)->getShuffleMask());
+ case Instruction::Load: {
+ const auto *LI = dyn_cast<LoadInst>(InstOrCE);
+ if (LI->isVolatile())
+ return nullptr;
+ return ConstantFoldLoadFromConstPtr(Ops[0], LI->getType(), DL);
+ }
}
}
@@ -1188,12 +1194,6 @@ Constant *llvm::ConstantFoldInstruction(Instruction *I, const DataLayout &DL,
Ops.push_back(Op);
}
- if (const auto *LI = dyn_cast<LoadInst>(I)) {
- if (LI->isVolatile())
- return nullptr;
- return ConstantFoldLoadFromConstPtr(Ops[0], LI->getType(), DL);
- }
-
return ConstantFoldInstOperands(I, Ops, DL, TLI);
}
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index a0e986422d4e..f8a6624c7605 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -4209,10 +4209,6 @@ static Value *simplifyWithOpReplaced(Value *V, Value *Op, Value *RepOp,
if (!AllowRefinement && canCreatePoison(cast<Operator>(I)))
return nullptr;
- if (LoadInst *LI = dyn_cast<LoadInst>(I))
- if (!LI->isVolatile())
- return ConstantFoldLoadFromConstPtr(ConstOps[0], LI->getType(), Q.DL);
-
return ConstantFoldInstOperands(I, ConstOps, Q.DL, Q.TLI);
}
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index 1ab67bef4bc8..72077eb6bae5 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -9237,10 +9237,6 @@ static Constant *EvaluateExpression(Value *V, const Loop *L,
Operands[i] = C;
}
- if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
- if (!LI->isVolatile())
- return ConstantFoldLoadFromConstPtr(Operands[0], LI->getType(), DL);
- }
return ConstantFoldInstOperands(I, Operands, DL, TLI);
}
@@ -9660,12 +9656,7 @@ const SCEV *ScalarEvolution::computeSCEVAtScope(const SCEV *V, const Loop *L) {
if (MadeImprovement) {
Constant *C = nullptr;
const DataLayout &DL = getDataLayout();
- if (const LoadInst *Load = dyn_cast<LoadInst>(I)) {
- if (!Load->isVolatile())
- C = ConstantFoldLoadFromConstPtr(Operands[0], Load->getType(),
- DL);
- } else
- C = ConstantFoldInstOperands(I, Operands, DL, &TLI);
+ C = ConstantFoldInstOperands(I, Operands, DL, &TLI);
if (!C) return V;
return getSCEV(C);
}
More information about the llvm-commits
mailing list