+Fri Jan 19 09:18:42 2001 J"orn Rennecke <amylaar@redhat.com>
+
+ * alias.c (find_base_value): Recognize TRUNCATE.
+ (record_set): In PLUS case, invalidate if other summand is also a
+ base value.
+
Thu Jan 18 06:43:04 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* flow.c (mark_set_1, case PARALLEL): Now case; rework to allow
return find_base_value (XEXP (src, 0));
return 0;
+ case TRUNCATE:
+ if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
+ break;
+ /* Fall through. */
case ZERO_EXTEND:
case SIGN_EXTEND: /* used for NT/Alpha pointers */
case HIGH:
switch (GET_CODE (src))
{
case LO_SUM:
- case PLUS:
case MINUS:
if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
new_reg_base_value[regno] = 0;
break;
+ case PLUS:
+ /* If the value we add in the PLUS is also a valid base value,
+ this might be the actual base value, and the original value
+ an index. */
+ {
+ rtx other = NULL_RTX;
+
+ if (XEXP (src, 0) == dest)
+ other = XEXP (src, 1);
+ else if (XEXP (src, 1) == dest)
+ other = XEXP (src, 0);
+
+ if (! other || find_base_value (other))
+ new_reg_base_value[regno] = 0;
+ break;
+ }
case AND:
if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
new_reg_base_value[regno] = 0;