From: J"orn Rennecke Date: Fri, 19 Jan 2001 09:20:14 +0000 (+0000) Subject: alias.c (find_base_value): Recognize TRUNCATE. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=61f0131c68b026c24560d3b9adde5ab7c34c073c;p=gcc.git alias.c (find_base_value): Recognize TRUNCATE. * alias.c (find_base_value): Recognize TRUNCATE. (record_set): In PLUS case, invalidate if other summand is also a base value. From-SVN: r39128 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 51cb1866feb..6866f157e8d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Fri Jan 19 09:18:42 2001 J"orn Rennecke + + * 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 * flow.c (mark_set_1, case PARALLEL): Now case; rework to allow diff --git a/gcc/alias.c b/gcc/alias.c index 235d299f42f..a77e7c8f7c1 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -759,6 +759,10 @@ find_base_value (src) 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: @@ -832,11 +836,26 @@ record_set (dest, set, data) 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;