summaryrefslogtreecommitdiff
path: root/gcc/regrename.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2002-02-13 22:44:12 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2002-02-13 22:44:12 +0000
commitbd6bc33d4399ceac51b81e04b299b5ffbe51cabc (patch)
tree215ef842018fc1bb1791ffcb34c97d2e8cc83b0a /gcc/regrename.c
parent5edf31bcee0682cd990fa7cf8fed2e8e279d77de (diff)
downloadgcc-bd6bc33d4399ceac51b81e04b299b5ffbe51cabc.tar.gz
* regmove.c (kill_value): Handle subregs.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@49748 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/regrename.c')
-rw-r--r--gcc/regrename.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/regrename.c b/gcc/regrename.c
index 135eaefd0e1..3ae6f7f6b45 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -1095,6 +1095,14 @@ kill_value (x, vd)
rtx x;
struct value_data *vd;
{
+ /* SUBREGS are supposed to have been eliminated by now. But some
+ ports, e.g. i386 sse, use them to smuggle vector type information
+ through to instruction selection. Each such SUBREG should simplify,
+ so if we get a NULL we've done something wrong elsewhere. */
+
+ if (GET_CODE (x) == SUBREG)
+ x = simplify_subreg (GET_MODE (x), SUBREG_REG (x),
+ GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x));
if (REG_P (x))
{
unsigned int regno = REGNO (x);