[llvm] d4cdf01 - [JumpThreading] Use common code to skip freeze (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed May 18 01:49:49 PDT 2022
Author: Nikita Popov
Date: 2022-05-18T10:49:41+02:00
New Revision: d4cdf013c76419140c6bdfb460088b5f09d6472f
URL: https://github.com/llvm/llvm-project/commit/d4cdf013c76419140c6bdfb460088b5f09d6472f
DIFF: https://github.com/llvm/llvm-project/commit/d4cdf013c76419140c6bdfb460088b5f09d6472f.diff
LOG: [JumpThreading] Use common code to skip freeze (NFC)
There are multiple places that want to look through freeze, so
store condition without freeze in a separate variable.
Added:
Modified:
llvm/lib/Transforms/Scalar/JumpThreading.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp
index fc7bcbae21a3..f79c1100e882 100644
--- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp
+++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp
@@ -1133,6 +1133,11 @@ bool JumpThreadingPass::processBlock(BasicBlock *BB) {
return ConstantFolded;
}
+ // Some of the following optimization can safely work on the unfrozen cond.
+ Value *CondWithoutFreeze = CondInst;
+ if (auto *FI = dyn_cast<FreezeInst>(CondInst))
+ CondWithoutFreeze = FI->getOperand(0);
+
if (CmpInst *CondCmp = dyn_cast<CmpInst>(CondInst)) {
// If we're branching on a conditional, LVI might be able to determine
// it's value at the branch instruction. We only handle comparisons
@@ -1196,11 +1201,7 @@ bool JumpThreadingPass::processBlock(BasicBlock *BB) {
// for loads that are used by a switch or by the condition for the branch. If
// we see one, check to see if it's partially redundant. If so, insert a PHI
// which can then be used to thread the values.
- Value *SimplifyValue = CondInst;
-
- if (auto *FI = dyn_cast<FreezeInst>(SimplifyValue))
- // Look into freeze's operand
- SimplifyValue = FI->getOperand(0);
+ Value *SimplifyValue = CondWithoutFreeze;
if (CmpInst *CondCmp = dyn_cast<CmpInst>(SimplifyValue))
if (isa<Constant>(CondCmp->getOperand(1)))
@@ -1225,10 +1226,7 @@ bool JumpThreadingPass::processBlock(BasicBlock *BB) {
// If this is an otherwise-unfoldable branch on a phi node or freeze(phi) in
// the current block, see if we can simplify.
- PHINode *PN = dyn_cast<PHINode>(
- isa<FreezeInst>(CondInst) ? cast<FreezeInst>(CondInst)->getOperand(0)
- : CondInst);
-
+ PHINode *PN = dyn_cast<PHINode>(CondWithoutFreeze);
if (PN && PN->getParent() == BB && isa<BranchInst>(BB->getTerminator()))
return processBranchOnPHI(PN);
More information about the llvm-commits
mailing list