This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: FAIL: gcc.c-torture/execute/950628-1.c execution, -O1
- To: dave at hiauly1 dot hia dot nrc dot ca (John David Anglin)
- Subject: Re: FAIL: gcc.c-torture/execute/950628-1.c execution, -O1
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- Date: Tue, 23 Jan 2001 17:07:05 -0500 (EST)
- Cc: gcc-bugs at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org, law at redhat dot com, rth at redhat dot com, jakub at redhat dot com
> > It can be seen for example that the MEM in insn 46 is referenced latter
> > in insn 61. Possibly, the MEM is not invalidated on the pbi->mem_set_list
> > because the reference is indirect via register SI 113.
I examined some more of the gcc testsuite failures
<http://gcc.gnu.org/ml/gcc-testresults/2001-01/msg00279.html> that occur with
the current cvs source under hpux 10.20, namely 960215-1.c, 960513-1.c
and regstack-1.c. The common thread seemed to be that these involve
an optimisation failure in handling long doubles.
Guessing that the origin of these failures was similar to that for 950628-1.c,
I disabled the addition of MEM sets to the pbi->mem_set_list in both locations
where this occurs in flow.c (see below). I have manually compiled the above
tests and they no longer appear to fail. Thus, there is a problem with MEMs
associated with small structs and long doubles. I will post the complete
test results when the run completes.
The test 20010119-1.c was recently installed. It fails because `undef (code)'
is an unsatisfied symbol. Nominally, this is a regression against the
previous version since the call is supposed to be eliminated as dead code.
However, given the above, my preference would be not to be overly agressive
in trying to eliminate dead code.
Dave
--
J. David Anglin dave.anglin@nrc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)
2001-01-23 John David Anglin <dave@hiauly1.hia.nrc.ca>
* flow.c (init_propagate_block_info): Disable scan for stores to the
frame in blocks with no successors because invalidate_mems_from_set
doesn't correctly detect all cases where the entry is not valid,
resulting in the store being deleted.
(mark_set_1): Same.
--- flow.c.orig Fri Jan 19 13:40:40 2001
+++ flow.c Tue Jan 23 15:01:52 2001
@@ -4083,7 +4083,7 @@
used later in the block are dead. So make a pass over the block
recording any such that are made and show them dead at the end. We do
a very conservative and simple job here. */
- if (optimize
+ if (0 && optimize
&& ! (TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
&& (TYPE_RETURNS_STACK_DEPRESSED
(TREE_TYPE (current_function_decl))))
@@ -4753,7 +4753,7 @@
if (insn && GET_CODE (reg) == MEM)
invalidate_mems_from_autoinc (pbi, insn);
- if (pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN
+ if (0 && pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN
&& GET_CODE (reg) == MEM && ! side_effects_p (reg)
/* ??? With more effort we could track conditional memory life. */
&& ! cond