llvm-project/llvm/test/Transforms/MergeICmps/X86
Taewook Oh 2b7ae47ccb [MergeICmps] Do not perform the transformation if GEP is used outside of block
Summary:
This patch prevents MergeICmps to performn the transformation if the address operand GEP of the load instruction has a use outside of the load's parent block. Without this patch, compiler crashes with the given test case because the use of `%first.i` is still around when the basic block is erased from https://github.com/llvm-mirror/llvm/blob/master/lib/Transforms/Scalar/MergeICmps.cpp#L620. I think checking `isUsedOutsideOfBlock` with `GEP` is the original intention of the code, as the checking for `LoadI` is already performed in the same function.

This patch is incomplete though, as this makes the pass overly conservative and fails the test `tuple-four-int8.ll`. I believe what needs to be done is checking if GEP has a use outside of block that is not the part of "Comparisons" chain. Submit the patch as of now to prevent compiler crash.

Reviewers: courbet, trentxintong

Reviewed By: courbet

Subscribers: llvm-commits

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

llvm-svn: 346151
2018-11-05 18:16:32 +00:00
..
alias-merge-blocks.ll Re-submitting changes in D51550 because it failed to patch. 2018-09-24 20:47:12 +00:00
atomic.ll Do not optimize atomic load to non-atomic memcmp 2018-09-18 17:02:42 +00:00
entry-block-shuffled.ll [MergeICmp] Fix a bug in entry block shuffled to middle of the chain 2018-03-20 11:57:54 +00:00
gep-used-outside.ll [MergeICmps] Do not perform the transformation if GEP is used outside of block 2018-11-05 18:16:32 +00:00
int64-and-ptr.ll Pointer types were treated as zero-size by MergeICmps 2018-10-26 18:02:06 +00:00
last-block-produce-no-value.ll
lit.local.cfg
multiple-blocks-does-work.ll [MergeICmp] We can discard initial blocks that do other work 2018-03-05 13:54:47 +00:00
pair-int32-int32.ll [MergeICmps] Don't crash when memcmp is not available 2018-05-19 12:51:59 +00:00
pr36557.ll [MergeICmps] Make sure that the comparison only has one use. 2018-03-13 07:05:55 +00:00
split-block-does-work.ll [MergeICmp] Split blocks that do other work. 2018-04-09 13:14:06 +00:00
tuple-four-int8.ll [MergeICmps] Do not perform the transformation if GEP is used outside of block 2018-11-05 18:16:32 +00:00
two-complex-bb.ll
volatile.ll