aboutsummaryrefslogtreecommitdiff
path: root/gcc/stor-layout.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2014-01-08 11:01:29 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2014-01-08 11:01:29 +0100
commitc15677b61c637e7dca61eda426c2d7163695dc1d (patch)
tree4437bef406b9703aca6c75765d2c2574dfb038fb /gcc/stor-layout.c
parent5c944c6cb8a54f29a394493e48429345f2f8f08d (diff)
downloadgcc-c15677b61c637e7dca61eda426c2d7163695dc1d.zip
gcc-c15677b61c637e7dca61eda426c2d7163695dc1d.tar.gz
gcc-c15677b61c637e7dca61eda426c2d7163695dc1d.tar.bz2
re PR rtl-optimization/59649 (BImode miscompiled)
PR rtl-optimization/59649 * stor-layout.c (get_mode_bounds): For BImode return 0 and STORE_FLAG_VALUE. From-SVN: r206422
Diffstat (limited to 'gcc/stor-layout.c')
-rw-r--r--gcc/stor-layout.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index 98219b4..084d195 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -2821,7 +2821,21 @@ get_mode_bounds (enum machine_mode mode, int sign,
gcc_assert (size <= HOST_BITS_PER_WIDE_INT);
- if (sign)
+ /* Special case BImode, which has values 0 and STORE_FLAG_VALUE. */
+ if (mode == BImode)
+ {
+ if (STORE_FLAG_VALUE < 0)
+ {
+ min_val = STORE_FLAG_VALUE;
+ max_val = 0;
+ }
+ else
+ {
+ min_val = 0;
+ max_val = STORE_FLAG_VALUE;
+ }
+ }
+ else if (sign)
{
min_val = -((unsigned HOST_WIDE_INT) 1 << (size - 1));
max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1)) - 1;