diff options
author | J"orn Rennecke <joern.rennecke@st.com> | 2005-07-22 12:15:37 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2005-07-22 13:15:37 +0100 |
commit | 475a3eef78ce1a81c2eb9e391327d4163a4f7556 (patch) | |
tree | 363ae1ad1f346c2e619e649976ddbde63a75a5f6 /gcc | |
parent | 29c1846ba31b9d54b8b784143b14a9e93efabdb8 (diff) | |
download | gcc-475a3eef78ce1a81c2eb9e391327d4163a4f7556.zip gcc-475a3eef78ce1a81c2eb9e391327d4163a4f7556.tar.gz gcc-475a3eef78ce1a81c2eb9e391327d4163a4f7556.tar.bz2 |
re PR rtl-optimization/21848 (load_mems / replace_loop_mems bug causes miscompilation of jcf-io.c / SEGV while processing java/lang/AbstractMethodError)
PR rtl-optimization/21848
* calls.c (emit_library_call_value_1): For const functions, add
USEs of the stack slots to CALL_INSN_FUNCTION_USAGE.
From-SVN: r102281
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/calls.c | 22 |
2 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f49ff82..afaf918 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2005-07-22 J"orn Rennecke <joern.rennecke@st.com> + PR rtl-optimization/21848 + * calls.c (emit_library_call_value_1): For const functions, add + USEs of the stack slots to CALL_INSN_FUNCTION_USAGE. + PR rtl-optimization/22445 * cselib.c (target.h): Include. (rtx_equal_for_cselib_p): Allow commutative matches. diff --git a/gcc/calls.c b/gcc/calls.c index f21426f..8e87886 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -3623,6 +3623,28 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value, stack_usage_map[i] = 1; NO_DEFER_POP; + + if (flags & ECF_CONST) + { + rtx use; + + /* Indicate argument access so that alias.c knows that these + values are live. */ + if (argblock) + use = plus_constant (argblock, + argvec[argnum].locate.offset.constant); + else + /* When arguemnts are pushed, trying to tell alias.c where + exactly this argument is won't work, because the + auto-increment causes confusion. So we merely indicate + that we access something with a known mode somewhere on + the stack. */ + use = gen_rtx_PLUS (Pmode, virtual_outgoing_args_rtx, + gen_rtx_SCRATCH (Pmode)); + use = gen_rtx_MEM (argvec[argnum].mode, use); + use = gen_rtx_USE (VOIDmode, use); + call_fusage = gen_rtx_EXPR_LIST (VOIDmode, use, call_fusage); + } } } |