From 23bd99ae342707dae943a467c392cb7b446742c6 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sat, 16 Nov 1996 06:19:25 -0500 Subject: [PATCH] (optimize_bit_field_compare, decode_field_reference): Pass new arg to get_inner_reference. From-SVN: r13188 --- gcc/fold-const.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 68808e0ede0..2147e2eb553 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -2312,6 +2312,7 @@ optimize_bit_field_compare (code, compare_type, lhs, rhs) enum machine_mode lmode, rmode, lnmode, rnmode; int lunsignedp, runsignedp; int lvolatilep = 0, rvolatilep = 0; + int alignment; tree linner, rinner; tree mask; tree offset; @@ -2320,7 +2321,7 @@ optimize_bit_field_compare (code, compare_type, lhs, rhs) if the same as the size of the underlying object, we aren't doing an extraction at all and so can do nothing. */ linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode, - &lunsignedp, &lvolatilep); + &lunsignedp, &lvolatilep, &alignment); if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0 || offset != 0) return 0; @@ -2329,8 +2330,8 @@ optimize_bit_field_compare (code, compare_type, lhs, rhs) { /* If this is not a constant, we can only do something if bit positions, sizes, and signedness are the same. */ - rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, - &rmode, &runsignedp, &rvolatilep); + rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode, + &runsignedp, &rvolatilep, &alignment); if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize || lunsignedp != runsignedp || offset != 0) @@ -2503,6 +2504,7 @@ decode_field_reference (exp, pbitsize, pbitpos, pmode, punsignedp, tree mask, inner, offset; tree unsigned_type; int precision; + int alignment; /* All the optimizations using this function assume integer fields. There are problems with FP fields since the type_for_size call @@ -2523,7 +2525,7 @@ decode_field_reference (exp, pbitsize, pbitpos, pmode, punsignedp, inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode, - punsignedp, pvolatilep); + punsignedp, pvolatilep, &alignment); if ((inner == exp && and_mask == 0) || *pbitsize < 0 || offset != 0) return 0; -- 2.30.2