From c15677b61c637e7dca61eda426c2d7163695dc1d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 8 Jan 2014 11:01:29 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/stor-layout.c | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 78a5da489a1..8888a79ae5b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-01-08 Jakub Jelinek + + PR rtl-optimization/59649 + * stor-layout.c (get_mode_bounds): For BImode return + 0 and STORE_FLAG_VALUE. + 2014-01-08 Richard Biener PR middle-end/59630 diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 98219b4f010..084d195cd48 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;