[AggressiveInstCombine] Fix `TruncInstCombine` (fix f84d732f)
authorAnton Afanasyev <anton.a.afanasyev@gmail.com>
Fri, 25 Feb 2022 05:04:11 +0000 (08:04 +0300)
committerAnton Afanasyev <anton.a.afanasyev@gmail.com>
Fri, 25 Feb 2022 05:04:11 +0000 (08:04 +0300)
Erase phi-nodes from `InstInfoMap` before erasing themselves

llvm/lib/Transforms/AggressiveInstCombine/TruncInstCombine.cpp

index 71f3d76..a446696 100644 (file)
@@ -504,6 +504,7 @@ void TruncInstCombine::ReduceExpressionGraph(Type *SclTy) {
   for (auto &Node : OldNewPHINodes) {
     PHINode *OldPN = Node.first;
     OldPN->replaceAllUsesWith(PoisonValue::get(OldPN->getType()));
+    InstInfoMap.erase(OldPN);
     OldPN->eraseFromParent();
   }
   // Now we have expression graph turned into dag.
@@ -511,9 +512,6 @@ void TruncInstCombine::ReduceExpressionGraph(Type *SclTy) {
   // visit any of its operands, this way, when we get to the operand, we already
   // removed the instructions (from the expression dag) that uses it.
   for (auto &I : llvm::reverse(InstInfoMap)) {
-    // Skip phi-nodes since they were erased before
-    if (isa<PHINode>(I.first))
-      continue;
     // We still need to check that the instruction has no users before we erase
     // it, because {SExt, ZExt}Inst Instruction might have other users that was
     // not reduced, in such case, we need to keep that instruction.