From 4ede730096813a9cb901b92fdd3670813cdc5bc1 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 1 Apr 2020 22:56:53 +0200 Subject: [PATCH] [InstCombine] Don't limit uses in eraseInstFromFunction() eraseInstFromFunction() adds the operands of the erased instructions, as those might now be dead as well. However, this is limited to instructions with less than 8 operands. This check doesn't make a lot of sense to me. As the instruction gets removed afterwards, I don't see a potential for anything overly pathological happening here (as we can only add those operands to the worklist once). The impact on CTMark is in the noise. We also have the same code in instruction sinking and don't limit the operand count there. Differential Revision: https://reviews.llvm.org/D77325 --- llvm/lib/Transforms/InstCombine/InstCombineInternal.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h index f21c7d14..3879c24 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h +++ b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h @@ -724,11 +724,10 @@ public: // Make sure that we reprocess all operands now that we reduced their // use counts. - if (I.getNumOperands() < 8) { - for (Use &Operand : I.operands()) - if (auto *Inst = dyn_cast(Operand)) - Worklist.add(Inst); - } + for (Use &Operand : I.operands()) + if (auto *Inst = dyn_cast(Operand)) + Worklist.add(Inst); + Worklist.remove(&I); I.eraseFromParent(); MadeIRChange = true; -- 2.7.4