aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>1997-01-23 20:05:52 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>1997-01-23 20:05:52 +0000
commit38734e55b348c29115121efadb90275d3f150e81 (patch)
tree0b69b9ae0996ddabd4c7781e7103fbac1a0d0deb /gcc
parent26bbb20697bc7ad7df8903005843dea21ee3b7fc (diff)
downloadgcc-38734e55b348c29115121efadb90275d3f150e81.zip
gcc-38734e55b348c29115121efadb90275d3f150e81.tar.gz
gcc-38734e55b348c29115121efadb90275d3f150e81.tar.bz2
Get the right COST for a SUBREG when truncating
From-SVN: r13549
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cse.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index e6c7e9f..cc9c142 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -1,5 +1,5 @@
/* Common subexpression elimination for GNU compiler.
- Copyright (C) 1987, 88, 89, 92-5, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -478,12 +478,24 @@ struct table_elt
((REG_USERVAR_P (N) && REGNO (N) < FIRST_PSEUDO_REGISTER) \
|| CHEAP_REGNO (REGNO (N)))
-#define COST(X) \
- (GET_CODE (X) == REG \
- ? (CHEAP_REG (X) ? 0 \
- : REGNO (X) >= FIRST_PSEUDO_REGISTER ? 1 \
- : 2) \
- : rtx_cost (X, SET) * 2)
+#define COST(X) \
+ (GET_CODE (X) == REG \
+ ? (CHEAP_REG (X) ? 0 \
+ : REGNO (X) >= FIRST_PSEUDO_REGISTER ? 1 \
+ : 2) \
+ : ((GET_CODE (X) == SUBREG \
+ && GET_CODE (SUBREG_REG (X)) == REG \
+ && GET_MODE_CLASS (GET_MODE (X)) == MODE_INT \
+ && GET_MODE_CLASS (GET_MODE (SUBREG_REG (X))) == MODE_INT \
+ && (GET_MODE_SIZE (GET_MODE (X)) \
+ < GET_MODE_SIZE (GET_MODE (SUBREG_REG (X)))) \
+ && subreg_lowpart_p (X) \
+ && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (GET_MODE (X)), \
+ GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (X))))) \
+ ? (CHEAP_REG (SUBREG_REG (X)) ? 0 \
+ : REGNO (SUBREG_REG (X)) >= FIRST_PSEUDO_REGISTER ? 1 \
+ : 2) \
+ : rtx_cost (X, SET) * 2))
/* Determine if the quantity number for register X represents a valid index
into the `qty_...' variables. */