diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1994-08-14 15:55:17 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1994-08-14 15:55:17 -0700 |
commit | 8700c49499167593375eac262646fb9246904015 (patch) | |
tree | 8962306cefc1fe4df756c43a6578028f0b84965f /gcc/unroll.c | |
parent | bbd4b75be010f6776f2ec809b38e109b4bf81225 (diff) | |
download | gcc-8700c49499167593375eac262646fb9246904015.zip gcc-8700c49499167593375eac262646fb9246904015.tar.gz gcc-8700c49499167593375eac262646fb9246904015.tar.bz2 |
(calculate_giv_inc): Handle constants loaded with IOR.
From-SVN: r7918
Diffstat (limited to 'gcc/unroll.c')
-rw-r--r-- | gcc/unroll.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/unroll.c b/gcc/unroll.c index 9b968ac..fafa627 100644 --- a/gcc/unroll.c +++ b/gcc/unroll.c @@ -1335,11 +1335,27 @@ 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) + { + /* The rs6000 port loads some constants with IOR. */ + rtx second_part = XEXP (increment, 1); + + src_insn = PREV_INSN (src_insn); + increment = SET_SRC (PATTERN (src_insn)); + /* Don't need the last insn anymore. */ + delete_insn (get_last_insn ()); + + if (GET_CODE (second_part) != CONST_INT + || GET_CODE (increment) != CONST_INT) + abort (); + + increment = GEN_INT (INTVAL (increment) | INTVAL (second_part)); + } if (GET_CODE (increment) != CONST_INT) abort (); - /* The insn loading the constant into a register is not longer needed, + /* The insn loading the constant into a register is no longer needed, so delete it. */ delete_insn (get_last_insn ()); } |