[Scalarizer] Treat values from unreachable blocks as undef
authorMikael Holmen <mikael.holmen@ericsson.com>
Fri, 15 Nov 2019 09:29:47 +0000 (10:29 +0100)
committerMikael Holmen <mikael.holmen@ericsson.com>
Fri, 15 Nov 2019 10:13:37 +0000 (11:13 +0100)
commit1587c7e86f1c58e3f692f0a418e5df6aeb754bb0
tree633f77e1db0afcb5d73b7f6d3e76cf761890dab9
parent1643734741d2f2957206774a50960ba335a36a0c
[Scalarizer] Treat values from unreachable blocks as undef

Summary:
When scalarizing PHI nodes we might try to examine/rewrite
InsertElement nodes in predecessors. If those predecessors
are unreachable from entry, then the IR in those blocks could
have unexpected properties resulting in infinite loops in
Scatterer::operator[].
By simply treating values originating from instructions in
unreachable blocks as undef we do not need to analyse them
further.

This fixes PR41723.

Reviewers: bjope

Reviewed By: bjope

Subscribers: bjope, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D70171
llvm/lib/Transforms/Scalar/Scalarizer.cpp
llvm/test/Transforms/Scalarizer/phi-unreachable-pred.ll [new file with mode: 0644]