aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-05-29 20:23:11 +0000
committerRichard Stallman <rms@gnu.org>1992-05-29 20:23:11 +0000
commit5cd76fcd7f0db9c993fcbd14c1b4b3f4204fc497 (patch)
tree704071c48eebf73028e8ad4982ef08b89e5622c0 /gcc
parentd072107f2332b70700b7fbd9b27c802ff3cef1a2 (diff)
downloadgcc-5cd76fcd7f0db9c993fcbd14c1b4b3f4204fc497.zip
gcc-5cd76fcd7f0db9c993fcbd14c1b4b3f4204fc497.tar.gz
gcc-5cd76fcd7f0db9c993fcbd14c1b4b3f4204fc497.tar.bz2
*** empty log message ***
From-SVN: r1126
Diffstat (limited to 'gcc')
-rw-r--r--gcc/integrate.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/gcc/integrate.c b/gcc/integrate.c
index fae93a1..243f56d 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -1464,9 +1464,20 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
&& GET_CODE (pattern) == SET
&& GET_CODE (SET_DEST (pattern)) == REG
&& REG_FUNCTION_VALUE_P (SET_DEST (pattern)))
- break;
-
- copy = emit_insn (copy_rtx_and_substitute (pattern, map));
+ {
+ if (volatile_refs_p (SET_SRC (pattern)))
+ {
+ /* If we must not delete the source,
+ load it into a new temporary. */
+ copy = emit_insn (copy_rtx_and_substitute (pattern, map));
+ SET_DEST (pattern)
+ = gen_reg_rtx (GET_MODE (SET_DEST (pattern)));
+ }
+ else
+ break;
+ }
+ else
+ copy = emit_insn (copy_rtx_and_substitute (pattern, map));
/* REG_NOTES will be copied later. */
#ifdef HAVE_cc0