diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 2001-12-15 08:37:16 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2001-12-15 08:37:16 -0500 |
commit | 3a531a8b4e988c611b5412ff30bbb7ab26c4b02c (patch) | |
tree | fe52f5ec527c1e29bd8a2fc57a4f5229e2eaf2ab /gcc | |
parent | dcfcd4365856e8cbec94fafb5766caa899d6a041 (diff) | |
download | gcc-3a531a8b4e988c611b5412ff30bbb7ab26c4b02c.zip gcc-3a531a8b4e988c611b5412ff30bbb7ab26c4b02c.tar.gz gcc-3a531a8b4e988c611b5412ff30bbb7ab26c4b02c.tar.bz2 |
expr.c (highest_pow2_factor, [...]): Return BIGGEST_ALIGNMENT for 0.
* expr.c (highest_pow2_factor, case INTEGER_CST): Return
BIGGEST_ALIGNMENT for 0.
From-SVN: r48042
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/expr.c | 16 |
2 files changed, 16 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b4214f9..114d604 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,7 +1,13 @@ +Sat Dec 15 08:29:45 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expr.c (highest_pow2_factor, case INTEGER_CST): Return + BIGGEST_ALIGNMENT for 0. + Sat Dec 15 14:13:03 CET 2001 Jan Hubicka <jh@suse.cz> - * predict.def (PRED_NORETURN, PRED_OPCODE_POSITIVE, PRED_OPCODE_NONEQUAL, - PRED_ERROR_RETURN): Make probabilities match reality. + * predict.def (PRED_NORETURN): Make probabilities match reality. + (PRED_OPCODE_POSITIVE, PRED_OPCODE_NONEQUAL, PRED_ERROR_RETURN): + Likewise. 2001-12-15 Jakub Jelinek <jakub@redhat.com> @@ -5793,18 +5793,18 @@ highest_pow2_factor (exp) { case INTEGER_CST: /* If the integer is expressable in a HOST_WIDE_INT, we can find the - lowest bit that's a one. If the result is zero, pessimize by - returning 1. This is overly-conservative, but such things should not - happen in the offset expressions that we are called with. If - the constant overlows, we some erroneous program, so return - BIGGEST_ALIGNMENT to avoid any later ICE. */ - if (TREE_CONSTANT_OVERFLOW (exp)) + lowest bit that's a one. If the result is zero, return + BIGGEST_ALIGNMENT. We need to handle this case since we can find it + in a COND_EXPR, a MIN_EXPR, or a MAX_EXPR. If the constant overlows, + we have an erroneous program, so return BIGGEST_ALIGNMENT to avoid any + later ICE. */ + if (TREE_CONSTANT_OVERFLOW (exp) + || integer_zerop (exp)) return BIGGEST_ALIGNMENT; else if (host_integerp (exp, 0)) { c0 = tree_low_cst (exp, 0); - c0 = c0 < 0 ? - c0 : c0; - return c0 != 0 ? c0 & -c0 : 1; + return c0 < 0 ? - c0 : c0; } break; |