aboutsummaryrefslogtreecommitdiff
path: root/gcc
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
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')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/stor-layout.c16
2 files changed, 21 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 78a5da4..8888a79 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-01-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/59649
+ * stor-layout.c (get_mode_bounds): For BImode return
+ 0 and STORE_FLAG_VALUE.
+
2014-01-08 Richard Biener <rguenther@suse.de>
PR middle-end/59630
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;