diff options
author | Richard Henderson <rth@redhat.com> | 2001-05-23 15:53:54 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-05-23 15:53:54 -0700 |
commit | 9688f9ada6db1aa893b02fdaf01c4222f904c73f (patch) | |
tree | 1cc72a43dc9843e6f1821d6a933f266316a81d86 | |
parent | f8710242d38de963d4d8204af1058cef8c05472b (diff) | |
download | gcc-9688f9ada6db1aa893b02fdaf01c4222f904c73f.zip gcc-9688f9ada6db1aa893b02fdaf01c4222f904c73f.tar.gz gcc-9688f9ada6db1aa893b02fdaf01c4222f904c73f.tar.bz2 |
* integrate.c (expand_inline_function): Handle CONCAT DECL_RESULT.
From-SVN: r42515
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/integrate.c | 25 |
2 files changed, 29 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14102e1..a62306d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2001-05-23 Richard Henderson <rth@redhat.com> + + * integrate.c (expand_inline_function): Handle CONCAT DECL_RESULT. + 2001-05-23 Neil Booth <neil@daikokuya.demon.co.uk> * cpp.texi: Update for handling of charconsts. diff --git a/gcc/integrate.c b/gcc/integrate.c index 29acaf2..9b7a4e7 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -1083,6 +1083,31 @@ expand_inline_function (fndecl, parms, target, ignore, type, else map->reg_map[REGNO (loc)] = reg_to_map; } + else if (GET_CODE (loc) == CONCAT) + { + enum machine_mode departing_mode = TYPE_MODE (type); + enum machine_mode arriving_mode + = GET_MODE (DECL_RTL (DECL_RESULT (fndecl))); + + if (departing_mode != arriving_mode) + abort (); + if (GET_CODE (XEXP (loc, 0)) != REG + || GET_CODE (XEXP (loc, 1)) != REG) + abort (); + + /* Don't use MEMs as direct targets because on some machines + substituting a MEM for a REG makes invalid insns. + Let the combiner substitute the MEM if that is valid. */ + if (target == 0 || GET_CODE (target) != REG + || GET_MODE (target) != departing_mode) + target = gen_reg_rtx (departing_mode); + + if (GET_CODE (target) != CONCAT) + abort (); + + map->reg_map[REGNO (XEXP (loc, 0))] = XEXP (target, 0); + map->reg_map[REGNO (XEXP (loc, 1))] = XEXP (target, 1); + } else abort (); |