aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-08-19 17:34:03 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-08-19 17:34:03 -0400
commit92065e1fe2e21a4d722242f6ae6827f6e31da0c8 (patch)
tree4affc847eacad9f1e5c8ffb36fda8adcc43747fa
parent3c8db3f29c32dfceb1c054954b9859375f0b95da (diff)
downloadgcc-92065e1fe2e21a4d722242f6ae6827f6e31da0c8.zip
gcc-92065e1fe2e21a4d722242f6ae6827f6e31da0c8.tar.gz
gcc-92065e1fe2e21a4d722242f6ae6827f6e31da0c8.tar.bz2
(calculate_giv_inc): Handle increment computed by ASHIFT.
From-SVN: r10256
-rw-r--r--gcc/unroll.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 083f0ab..c598578 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -1412,10 +1412,13 @@ calculate_giv_inc (pattern, src_insn, regno)
one of the LO_SUM rtx. */
if (GET_CODE (increment) == LO_SUM)
increment = XEXP (increment, 1);
- else if (GET_CODE (increment) == IOR)
+ else if (GET_CODE (increment) == IOR
+ || GET_CODE (increment) == ASHIFT)
{
- /* The rs6000 port loads some constants with IOR. */
+ /* The rs6000 port loads some constants with IOR.
+ The alpha port loads some constants with ASHIFT. */
rtx second_part = XEXP (increment, 1);
+ enum rtx_code code = GET_CODE (increment);
src_insn = PREV_INSN (src_insn);
increment = SET_SRC (PATTERN (src_insn));
@@ -1426,7 +1429,10 @@ calculate_giv_inc (pattern, src_insn, regno)
|| GET_CODE (increment) != CONST_INT)
abort ();
- increment = GEN_INT (INTVAL (increment) | INTVAL (second_part));
+ if (code == IOR)
+ increment = GEN_INT (INTVAL (increment) | INTVAL (second_part));
+ else
+ increment = GEN_INT (INTVAL (increment) << INTVAL (second_part));
}
if (GET_CODE (increment) != CONST_INT)