aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-06-05 17:19:13 +0000
committerRichard Stallman <rms@gnu.org>1993-06-05 17:19:13 +0000
commit30caed6d0a9e58ce104f649d935763d70547c3c5 (patch)
treeb39cd3259e117e79f18a25a7c53ab19c45f478ae /gcc
parentbd103b489dd15da2f2d0227ff81db79a2f00e66f (diff)
downloadgcc-30caed6d0a9e58ce104f649d935763d70547c3c5.zip
gcc-30caed6d0a9e58ce104f649d935763d70547c3c5.tar.gz
gcc-30caed6d0a9e58ce104f649d935763d70547c3c5.tar.bz2
(expand_inline_function): Always copy a SUBREG as an
argument into a REG. From-SVN: r4638
Diffstat (limited to 'gcc')
-rw-r--r--gcc/integrate.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c
index e18f690..73d839b 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -1269,7 +1269,11 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
&& (GET_CODE (arg_vals[i]) == REG
|| GET_CODE (arg_vals[i]) == SUBREG
|| GET_CODE (arg_vals[i]) == MEM)
- && reg_overlap_mentioned_p (arg_vals[i], target))))
+ && reg_overlap_mentioned_p (arg_vals[i], target))
+ /* ??? We must always copy a SUBREG into a REG, because it might
+ get substituted into an address, and not all ports correctly
+ handle SUBREGs in addresses. */
+ || (GET_CODE (arg_vals[i]) == SUBREG)))
arg_vals[i] = copy_to_mode_reg (GET_MODE (loc), arg_vals[i]);
}