[IPSCCP] Move callsite check to the beginning of the loop.
authorFlorian Hahn <flo@fhahn.com>
Wed, 31 Jul 2019 12:57:04 +0000 (12:57 +0000)
committerFlorian Hahn <flo@fhahn.com>
Wed, 31 Jul 2019 12:57:04 +0000 (12:57 +0000)
commitfa42f428583096aa1613021b727807fd61b3025a
tree82f054955477597e597dd1f7434489844781de47
parent24ad2b5e7d8ceecb045bfc499107b9ed90439adb
[IPSCCP] Move callsite check to the beginning of the loop.

We have some code marks instructions with struct operands as overdefined,
but if the instruction is a call to a function with tracked arguments,
this breaks the assumption that the lattice values of all call sites
are not overdefined and will be replaced by a constant.

This also re-adds the assertion from D65222, with additionally skipping
non-callsite uses. This patch should address the cases reported in which
the assertion fired.

Fixes PR42738.

Reviewers: efriedma, davide

Reviewed By: efriedma

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

llvm-svn: 367430
llvm/lib/Transforms/Scalar/SCCP.cpp
llvm/test/Transforms/SCCP/indirectbr.ll
llvm/test/Transforms/SCCP/struct-arg-resolve-undefs.ll [new file with mode: 0644]