This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/33389] [4.3 Regression] Revision 128239 causes libgomp failure
- From: "wilson at specifix dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 12 Sep 2007 23:35:22 -0000
- Subject: [Bug tree-optimization/33389] [4.3 Regression] Revision 128239 causes libgomp failure
- References: <bug-33389-682@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #22 from wilson at specifix dot com 2007-09-12 23:35 -------
Subject: Re: [4.3 Regression] Revision 128239
causes libgomp failure
jakub at gcc dot gnu dot org wrote:
> No matter whether it is right or wrong in tree-ssa-operands.c, I think
> sdse should just avoid removing VAR_DECL DECL_HARD_REGISTER store elimination.
This isn't a volatile register, nor a global register variable, so there
should be no problem performing dead store elimination on it. I think
tree-ssa-operands.c needs to be fixed.
I'm not a tree-ssa expert, but the fix needed in tree-ssa-operands.c
seems simple enough. The append_vuse function does two things, it keeps
a list of v_uses, and it keeps a list of loads. We don't want a v_use
if we already have a v_def, but we still need to mark it as a load. We
can do that with a little rearrangement of the code. Like this.
This works for the testcase, but has had no other testing as yet.
2007-09-12 James E. Wilson <wilson@specifix.com>
* tree-ssa-operands.c (append_vuse): If ann->in_vdef_list true,
then set build_loads before returning.
Index: tree-ssa-operands.c
===================================================================
--- tree-ssa-operands.c (revision 128394)
+++ tree-ssa-operands.c (working copy)
@@ -1164,8 +1164,15 @@
/* Don't allow duplicate entries. */
ann = get_var_ann (var);
- if (ann->in_vuse_list || ann->in_vdef_list)
+ if (ann->in_vuse_list)
return;
+ else if (ann->in_vdef_list)
+ {
+ /* We don't want a vuse if we already have a vdef, but we must
+ still put this in build_loads. */
+ bitmap_set_bit (build_loads, DECL_UID (var));
+ return;
+ }
ann->in_vuse_list = true;
sym = var;
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33389