+2002-05-07 Richard Henderson <rth@redhat.com>
+
+ PR c++/6212
+ * expr.c (highest_pow2_factor_for_type): New.
+ (expand_assignment): Use it.
+
2002-05-07 Jakub Jelinek <jakub@redhat.com>
* configure.in: If as or ld segfaults, don't clutter with it stdout.
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));
}
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)
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);
+}
\f
/* Return an object on the placeholder list that matches EXP, a
PLACEHOLDER_EXPR. An object "matches" if it is of the type of the