[PATCH] D118591: [Function Specialisation] Fix use after free
Alexandros Lamprineas via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 1 03:20:32 PST 2022
labrinea updated this revision to Diff 404871.
labrinea added a comment.
Added some debug output:
- when replacing a value
- when removing dead instructions
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D118591/new/
https://reviews.llvm.org/D118591
Files:
llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
Index: llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
===================================================================
--- llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
+++ llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
@@ -276,6 +276,7 @@
std::function<TargetLibraryInfo &(Function &)> GetTLI;
SmallPtrSet<Function *, 2> SpecializedFuncs;
+ SmallVector<Instruction *> ReplacedWithConstant;
public:
FunctionSpecializer(SCCPSolver &Solver,
@@ -320,6 +321,15 @@
return Changed;
}
+ void removeDeadInstructions() {
+ for (auto *I : ReplacedWithConstant) {
+ LLVM_DEBUG(dbgs() << "FnSpecialization: Removing dead instruction "
+ << *I << "\n");
+ I->eraseFromParent();
+ }
+ ReplacedWithConstant.clear();
+ }
+
bool tryToReplaceWithConstant(Value *V) {
if (!V->getType()->isSingleValueType() || isa<CallBase>(V) ||
V->user_empty())
@@ -330,6 +340,10 @@
return false;
auto *Const =
isConstant(IV) ? Solver.getConstant(IV) : UndefValue::get(V->getType());
+
+ LLVM_DEBUG(dbgs() << "FnSpecialization: Replacing " << *V
+ << "\nFnSpecialization: with " << *Const << "\n");
+
V->replaceAllUsesWith(Const);
for (auto *U : Const->users())
@@ -340,7 +354,7 @@
// Remove the instruction from Block and Solver.
if (auto *I = dyn_cast<Instruction>(V)) {
if (I->isSafeToRemove()) {
- I->eraseFromParent();
+ ReplacedWithConstant.push_back(I);
Solver.removeLatticeValueFor(I);
}
}
@@ -886,7 +900,8 @@
Changed = true;
}
- // Clean up the IR by removing ssa_copy intrinsics.
+ // Clean up the IR by removing dead instructions and ssa_copy intrinsics.
+ FS.removeDeadInstructions();
removeSSACopy(M);
return Changed;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118591.404871.patch
Type: text/x-patch
Size: 1830 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220201/622cdd4d/attachment.bin>
More information about the llvm-commits
mailing list