aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@gcc.gnu.org>2002-05-06 22:44:26 -0700
committerRichard Henderson <rth@gcc.gnu.org>2002-05-06 22:44:26 -0700
commit818c0c94935c342158a0106db55eba9317cc913f (patch)
treeaf5dd9b0c303db6988e7f7897689bf5a11fa2377 /gcc
parent486e8c0cd34a187feb4adf908c183274a93cb654 (diff)
downloadgcc-818c0c94935c342158a0106db55eba9317cc913f.zip
gcc-818c0c94935c342158a0106db55eba9317cc913f.tar.gz
gcc-818c0c94935c342158a0106db55eba9317cc913f.tar.bz2
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')
-rw-r--r--gcc/ChangeLog16
-rw-r--r--gcc/expr.c19
2 files changed, 29 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c13d5e7..0c54cde 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,8 +1,14 @@
+2002-05-06 Richard Henderson <rth@redhat.com>
+
+ PR c++/6212
+ * expr.c (highest_pow2_factor_for_type): New.
+ (expand_assignment): Use it.
+
2002-05-06 Aldy Hernandez <aldyh@redhat.com>
- * config/rs6000/rs6000.md ("altivec_mtvscr"): Change to
- unspec_volatile.
- ("altivec_mfvscr"): Same.
+ * config/rs6000/rs6000.md ("altivec_mtvscr"): Change to
+ unspec_volatile.
+ ("altivec_mfvscr"): Same.
2002-05-06 Janis Johnson <janis187@us.ibm.com>
@@ -26,7 +32,7 @@
PR opt/3995
* fold-const.c (sign_bit_p): New function.
(fold) [EQ_EXPR]: Use this to convert (A & C) == 0 into A >= 0 and
- (A & C) != 0 into A < 0, when constant C is the sign bit of A's type.
+ (A & C) != 0 into A < 0, when constant C is the sign bit of A's type.
Reapply fold when converting (A & C) == C into (A & C) != 0.
(fold_binary_op_with_conditional_arg): Fix typo in comment.
@@ -85,7 +91,7 @@ doc:
2002-05-06 Catherine Moore <clm@redhat.com>
* config/v850/v850.c (compute_register_save_size): Make sure
- to count all of the registers that will be saved.
+ to count all of the registers that will be saved.
Mon May 6 18:03:11 CEST 2002 Jan Hubicka <jh@suse.cz>
diff --git a/gcc/expr.c b/gcc/expr.c
index dc4c335..84443e0 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