OSDN Git Service

[Reassociate] Skip analysis of dead code to avoid infinite loop.
authorBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Wed, 2 Nov 2016 08:55:19 +0000 (08:55 +0000)
committerBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Wed, 2 Nov 2016 08:55:19 +0000 (08:55 +0000)
commit4513397601a3b22d11b6c2fad000ee8e5481d694
treefc56718547e78be003c70e8eb6a05eba5159d896
parent0586c7bf63a0dff897f018b5ae41e77a80ca75b8
[Reassociate] Skip analysis of dead code to avoid infinite loop.

Summary:
It was detected that the reassociate pass could enter an inifite
loop when analysing dead code. Simply skipping to analyse basic
blocks that are dead avoids such problems (and as a side effect
we avoid spending time on optimising dead code).

The solution is using the same Reverse Post Order ordering of the
basic blocks when doing the optimisations, as when building the
precalculated rank map. A nice side-effect of this solution is
that we now know that we only try to do optimisations for blocks
with ranked instructions.

Fixes https://llvm.org/bugs/show_bug.cgi?id=30818

Reviewers: llvm-commits, davide, eli.friedman, mehdi_amini

Subscribers: dberlin

Differential Revision: https://reviews.llvm.org/D26154

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@285793 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Transforms/Scalar/Reassociate.h
lib/Transforms/Scalar/Reassociate.cpp
test/Transforms/Reassociate/deadcode.ll [new file with mode: 0644]