[MergeICmp] Fix a bug in MergeICmp that can lead to a block being processed more...
authorXin Tong <trent.xin.tong@gmail.com>
Wed, 28 Feb 2018 12:08:00 +0000 (12:08 +0000)
committerXin Tong <trent.xin.tong@gmail.com>
Wed, 28 Feb 2018 12:08:00 +0000 (12:08 +0000)
commit8ba674e43b5d907f2a0e3f651731232b7624c7df
tree0b66103d76ba4cfb5756902e271833328863e49e
parent60f57369a2199a91a985a88a00703caa454f2363
[MergeICmp] Fix a bug in MergeICmp that can lead to a block being processed more than once.

Summary:
Fix a bug in MergeICmp that can lead to a BCECmp block being processed more than once and eventually lead to a broken LLVM module.
The problem is that if the non-constant value is not produced by the last block, the producer will be processed once when the its parent block
is processed and second time when the last block is processed.

We end up having 2 same BCECmpBlock in the merge queue. And eventually lead to a broken LLVM module.

Reviewers: courbet, davide

Reviewed By: courbet

Subscribers: llvm-commits

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

llvm-svn: 326318
llvm/lib/Transforms/Scalar/MergeICmps.cpp
llvm/test/Transforms/MergeICmps/X86/last-block-produce-no-value.ll [new file with mode: 0644]