aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/ia64
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2001-11-15 11:30:59 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2001-11-15 11:30:59 +0100
commit8f5a5db8187f51e0cbbf8bbb1b13be97fdf2fe4b (patch)
tree86ad09dc6187ff136ed398f7e2fe86d86adb0c34 /gcc/config/ia64
parent2b7d71b2b932e9be61b1c1415419e6df630a0165 (diff)
downloadgcc-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.c32
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);