diff options
author | Richard Henderson <rth@gcc.gnu.org> | 2002-05-06 22:44:26 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-05-06 22:44:26 -0700 |
commit | 818c0c94935c342158a0106db55eba9317cc913f (patch) | |
tree | af5dd9b0c303db6988e7f7897689bf5a11fa2377 /gcc/expr.c | |
parent | 486e8c0cd34a187feb4adf908c183274a93cb654 (diff) | |
download | gcc-818c0c94935c342158a0106db55eba9317cc913f.tar.gz |
re PR c++/6212 (g++ testsuite EH regressions for irix6 -mabi=64)
PR c++/6212
* expr.c (highest_pow2_factor_for_type): New.
(expand_assignment): Use it.
From-SVN: r53249
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c index dc4c3356286..84443e014e6 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -147,6 +147,7 @@ static rtx store_field PARAMS ((rtx, HOST_WIDE_INT, int)); static rtx var_rtx PARAMS ((tree)); static HOST_WIDE_INT highest_pow2_factor PARAMS ((tree)); +static HOST_WIDE_INT highest_pow2_factor_for_type PARAMS ((tree, tree)); static int is_aligning_offset PARAMS ((tree, tree)); static rtx expand_increment PARAMS ((tree, int, int)); static void do_jump_by_parts_greater PARAMS ((tree, int, rtx, rtx)); @@ -3707,7 +3708,8 @@ expand_assignment (to, from, want_value, suggest_reg) } to_rtx = offset_address (to_rtx, offset_rtx, - highest_pow2_factor (offset)); + highest_pow2_factor_for_type (TREE_TYPE (to), + offset)); } if (GET_CODE (to_rtx) == MEM) @@ -5934,6 +5936,21 @@ highest_pow2_factor (exp) return 1; } + +/* Similar, except that it is known that the expression must be a multiple + of the alignment of TYPE. */ + +static HOST_WIDE_INT +highest_pow2_factor_for_type (type, exp) + tree type; + tree exp; +{ + HOST_WIDE_INT type_align, factor; + + factor = highest_pow2_factor (exp); + type_align = TYPE_ALIGN (type) / BITS_PER_UNIT; + return MAX (factor, type_align); +} /* Return an object on the placeholder list that matches EXP, a PLACEHOLDER_EXPR. An object "matches" if it is of the type of the |