Merging r259381:
authorHans Wennborg <hans@hanshq.net>
Fri, 5 Feb 2016 22:17:38 +0000 (22:17 +0000)
committerHans Wennborg <hans@hanshq.net>
Fri, 5 Feb 2016 22:17:38 +0000 (22:17 +0000)
commitff65de018b6bb5bc4da3e923bbc0f55c5ca8e039
tree8c7844b7abcc77fa3e879d16fe0f281d457b2bd1
parent56d368f5a52e60fa29891a6647034fffbba8713b
Merging r259381:
------------------------------------------------------------------------
r259381 | uweigand | 2016-02-01 10:31:19 -0800 (Mon, 01 Feb 2016) | 21 lines

[SystemZ] Fix wrong-code generation for certain always-false conditions

We've found another bug in the code generation logic conditions for a
certain class of always-false conditions, those of the form
   if ((a & 1) < 0)

These only reach the back end when compiling without optimization.

The bug was introduced by the choice of using TEST UNDER MASK
to implement a check for
   if ((a & MASK) < VAL)
as
   if ((a & MASK) == 0)

where VAL is less than the the lowest bit of MASK.  This is correct
in all cases except for VAL == 0, in which case the original
condition is always false, but the replacement isn't.

Fixed by excluding that particular case.

------------------------------------------------------------------------

git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_38@259940 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/SystemZ/SystemZISelLowering.cpp
test/CodeGen/SystemZ/int-cmp-53.ll [new file with mode: 0644]