[llvm-dev] ConstantFoldTerminator doesn't delete trivially dead phi inputs

Jay Foad via llvm-dev llvm-dev at lists.llvm.org
Tue May 19 06:22:10 PDT 2020


On Fri, 15 May 2020 at 18:46, Johannes Doerfert
<johannesdoerfert at gmail.com> wrote:
> On 5/15/20 5:57 AM, Jay Foad via llvm-dev wrote:
> > I'm looking into some missed optimizations where CodeGenPrepare seems
> > to leave trivially dead instructions lying around.
> >
> > This happens because CodeGenPrepare::runOnFunction calls
> > ConstantFoldTerminator which folds a "br i1 false" into an
> > unconditional branch and calls BasicBlock::removePredecessor which
> > calls PHINode::removeIncomingValue. Each incoming value that is
> > removed from a phi node might be dead now, but nothing deletes them.
> >
> > Is there any way this could be improved? Could
> > PHINode::removeIncomingValue call
> > RecursivelyDeleteTriviallyDeadInstructions on the value it removes, or
> > is that a layering violation? Any other ideas?
>
> I think this is certainly a desirable behavior that could be opt-in
>
> for `ConstantFoldTerminator`.

How's this for a possible implementation? https://reviews.llvm.org/D80206

I'm not sure if it needs to be opt-in, and/or whether it could
piggy-back on the existing DeleteDeadConditions argument.

Thanks,
Jay.


More information about the llvm-dev mailing list