aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/IPO/FunctionSpecialization.cpp')
-rw-r--r--llvm/lib/Transforms/IPO/FunctionSpecialization.cpp18
1 files changed, 5 insertions, 13 deletions
diff --git a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
index 45fa9d5..c876a47 100644
--- a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
@@ -400,12 +400,6 @@ Constant *InstCostVisitor::visitFreezeInst(FreezeInst &I) {
Constant *InstCostVisitor::visitCallBase(CallBase &I) {
assert(LastVisited != KnownConstants.end() && "Invalid iterator!");
- // Look through calls to ssa_copy intrinsics.
- if (auto *II = dyn_cast<IntrinsicInst>(&I);
- II && II->getIntrinsicID() == Intrinsic::ssa_copy) {
- return LastVisited->second;
- }
-
Function *F = I.getCalledFunction();
if (!F || !canConstantFoldCallTo(&I, F))
return nullptr;
@@ -611,17 +605,15 @@ void FunctionSpecializer::promoteConstantStackValues(Function *F) {
}
}
-// ssa_copy intrinsics are introduced by the SCCP solver. These intrinsics
-// interfere with the promoteConstantStackValues() optimization.
+// The SCCP solver inserts bitcasts for PredicateInfo. These interfere with the
+// promoteConstantStackValues() optimization.
static void removeSSACopy(Function &F) {
for (BasicBlock &BB : F) {
for (Instruction &Inst : llvm::make_early_inc_range(BB)) {
- auto *II = dyn_cast<IntrinsicInst>(&Inst);
- if (!II)
- continue;
- if (II->getIntrinsicID() != Intrinsic::ssa_copy)
+ auto *BC = dyn_cast<BitCastInst>(&Inst);
+ if (!BC || BC->getType() != BC->getOperand(0)->getType())
continue;
- Inst.replaceAllUsesWith(II->getOperand(0));
+ Inst.replaceAllUsesWith(BC->getOperand(0));
Inst.eraseFromParent();
}
}