[PATCH] D71910: [Attributor] Add helper to change an instruction to `unrechable` inst
Hideto Ueno via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 26 09:29:09 PST 2019
uenoku created this revision.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a reviewer: jdoerfert.
Herald added a reviewer: sstefan1.
Herald added a project: LLVM.
Calling `changeToUnrechable` in `manifest` from different places might cause really unpredictable problems. As other deleting functions are doing, we need to change these instructions after all `manifest`.
https://reviews.llvm.org/D71910
Files:
llvm/include/llvm/Transforms/IPO/Attributor.h
llvm/lib/Transforms/IPO/Attributor.cpp
Index: llvm/lib/Transforms/IPO/Attributor.cpp
===================================================================
--- llvm/lib/Transforms/IPO/Attributor.cpp
+++ llvm/lib/Transforms/IPO/Attributor.cpp
@@ -2049,7 +2049,7 @@
if (!UBMemAccessInsts.size())
return ChangeStatus::UNCHANGED;
for (Instruction *I : UBMemAccessInsts)
- changeToUnreachable(I, /* UseLLVMTrap */ false);
+ A.changeToUnreachableAfterManifest(I);
return ChangeStatus::CHANGED;
}
@@ -2736,7 +2736,7 @@
BB = SplitPos->getParent();
SplitBlock(BB, SplitPos);
- changeToUnreachable(BB->getTerminator(), /* UseLLVMTrap */ false);
+ A.changeToUnreachableAfterManifest(BB->getTerminator());
HasChanged = ChangeStatus::CHANGED;
}
@@ -5459,7 +5459,6 @@
SmallVector<Instruction *, 32> DeadInsts;
SmallVector<Instruction *, 32> TerminatorsToFold;
- SmallVector<Instruction *, 32> UnreachablesToInsert;
for (auto &It : ToBeChangedUses) {
Use *U = It.first;
@@ -5476,13 +5475,13 @@
if (isa<Constant>(NewV) && isa<BranchInst>(U->getUser())) {
Instruction *UserI = cast<Instruction>(U->getUser());
if (isa<UndefValue>(NewV)) {
- UnreachablesToInsert.push_back(UserI);
+ ToBeChangedToUnreachableInsts.insert(UserI);
} else {
TerminatorsToFold.push_back(UserI);
}
}
}
- for (Instruction *I : UnreachablesToInsert)
+ for (Instruction *I : ToBeChangedToUnreachableInsts)
changeToUnreachable(I, /* UseLLVMTrap */ false);
for (Instruction *I : TerminatorsToFold)
ConstantFoldTerminator(I->getParent());
Index: llvm/include/llvm/Transforms/IPO/Attributor.h
===================================================================
--- llvm/include/llvm/Transforms/IPO/Attributor.h
+++ llvm/include/llvm/Transforms/IPO/Attributor.h
@@ -823,6 +823,12 @@
return true;
}
+ /// Record that \p I is to be replaced with `unreachable` after information
+ /// was manifested.
+ void changeToUnreachableAfterManifest(Instruction *I) {
+ ToBeChangedToUnreachableInsts.insert(I);
+ }
+
/// Record that \p I is deleted after information was manifested. This also
/// triggers deletion of trivially dead istructions.
void deleteAfterManifest(Instruction &I) { ToBeDeletedInsts.insert(&I); }
@@ -1031,6 +1037,9 @@
/// then trivially dead instructions as well.
DenseMap<Use *, Value *> ToBeChangedUses;
+ /// Instructions we replace with `unreachable` insts after manifest is done.
+ SmallPtrSet<Instruction *, 8> ToBeChangedToUnreachableInsts;
+
/// Functions, blocks, and instructions we delete after manifest is done.
///
///{
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71910.235357.patch
Type: text/x-patch
Size: 2714 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191226/a0077319/attachment.bin>
More information about the llvm-commits
mailing list