diff options
author | Jakub Jelinek <jakub@redhat.com> | 2001-11-15 11:30:59 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2001-11-15 11:30:59 +0100 |
commit | 8f5a5db8187f51e0cbbf8bbb1b13be97fdf2fe4b (patch) | |
tree | 86ad09dc6187ff136ed398f7e2fe86d86adb0c34 /gcc/config/ia64 | |
parent | 2b7d71b2b932e9be61b1c1415419e6df630a0165 (diff) | |
download | gcc-8f5a5db8187f51e0cbbf8bbb1b13be97fdf2fe4b.zip gcc-8f5a5db8187f51e0cbbf8bbb1b13be97fdf2fe4b.tar.gz gcc-8f5a5db8187f51e0cbbf8bbb1b13be97fdf2fe4b.tar.bz2 |
ia64.c (ia64_adjust_cost): Handle SUBREGs.
* config/ia64/ia64.c (ia64_adjust_cost): Handle SUBREGs.
* gcc.c-torture/compile/20011114-2.c: New test.
From-SVN: r47049
Diffstat (limited to 'gcc/config/ia64')
-rw-r--r-- | gcc/config/ia64/ia64.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 87c35e7..a63376c 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -5241,17 +5241,27 @@ ia64_adjust_cost (insn, link, dep_insn, cost) src = set ? SET_SRC (set) : 0; addr = 0; - if (set && GET_CODE (SET_DEST (set)) == MEM) - addr = XEXP (SET_DEST (set), 0); - else if (set && GET_CODE (src) == MEM) - addr = XEXP (src, 0); - else if (set && GET_CODE (src) == ZERO_EXTEND - && GET_CODE (XEXP (src, 0)) == MEM) - addr = XEXP (XEXP (src, 0), 0); - else if (set && GET_CODE (src) == UNSPEC - && XVECLEN (XEXP (src, 0), 0) > 0 - && GET_CODE (XVECEXP (src, 0, 0)) == MEM) - addr = XEXP (XVECEXP (src, 0, 0), 0); + if (set) + { + if (GET_CODE (SET_DEST (set)) == MEM) + addr = XEXP (SET_DEST (set), 0); + else if (GET_CODE (SET_DEST (set)) == SUBREG + && GET_CODE (SUBREG_REG (SET_DEST (set))) == MEM) + addr = XEXP (SUBREG_REG (SET_DEST (set)), 0); + else + { + addr = src; + if (GET_CODE (addr) == UNSPEC && XVECLEN (addr, 0) > 0) + addr = XVECEXP (addr, 0, 0); + while (GET_CODE (addr) == SUBREG || GET_CODE (addr) == ZERO_EXTEND) + addr = XEXP (addr, 0); + if (GET_CODE (addr) == MEM) + addr = XEXP (addr, 0); + else + addr = 0; + } + } + if (addr && GET_CODE (addr) == POST_MODIFY) addr = XEXP (addr, 0); |