[NARY-REASSOCIATE] Simplify traversal logic by post deleting dead instructions
authorEvgeniy Brevnov <ybrevnov@azul.com>
Fri, 25 Sep 2020 04:37:19 +0000 (11:37 +0700)
committerEvgeniy Brevnov <ybrevnov@azul.com>
Fri, 4 Dec 2020 09:17:50 +0000 (16:17 +0700)
commitf61c29b3a725a620c67355a519788a96be5d5651
tree8c8a4083da548481d50586b6036ef03ccf1fb52c
parent973f3907a471eee85c35f7d283fe2de91ce953e2
[NARY-REASSOCIATE] Simplify traversal logic by post deleting dead instructions

Currently we delete optimized instructions as we go. That has several negative consequences. First it complicates traversal logic itself. Second if newly generated instruction has been deleted the traversal is repeated from scratch.

But real motivation for the change is upcoming change with support for min/max reassociation. Here we employ SCEV expander to generate code. As a result newly generated instructions may be inserted not right before original instruction (because SCEV may do hoisting) and there is no way to know 'next' instruction.

Reviewed By: mkazantsev

Differential Revision: https://reviews.llvm.org/D88285
llvm/lib/Transforms/Scalar/NaryReassociate.cpp
llvm/test/Transforms/NaryReassociate/pr24301.ll