This is the mail archive of the
mailing list for the GCC project.
Re: [tree-ssa] DCE with control dependence again (with numbers, for a change)
- From: law at redhat dot com
- To: Steven Bosscher <s dot bosscher at student dot tudelft dot nl>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 20 Jan 2004 14:19:23 -0700
- Subject: Re: [tree-ssa] DCE with control dependence again (with numbers, for a change)
- Reply-to: law at redhat dot com
In message <firstname.lastname@example.org>, Steven Bosscher
>On Tuesday 20 January 2004 20:22, email@example.com wrote:
>> As I mentioned, a few minor nits in the code:
>> #include "bitmap.h"
>> bitmap.h is already included by tree-flow.h a few lines later.
>Hmm I didn't want to rely on that. IMO every file should pull in its
>own dependencies, or suddenly your code will fail to compile when you
>try something smart in one of the include files (like testing ebitmaps
Generally true, except we do have certain things you can rely upon
for GCC because we have hard dependencies in the header files themselves.
You can get a list of the hard dependencies within the header files by
looking at Makefile.in for variables of the form:
FOO_H = <list of header files >
As I said, I wouldn't consider this a major issue. If you'd really prefer
to have it explicitly included, then I won't object any further.
>> It appears that you mark all GOTO_EXPRs as being inherently necessary -- I
>> would think that the only ones you need to mark as inherently necessary
>> would be those which create abnormal edges. ie, you don't want a block to
>> be marked as necessary just because it ends with a goto statement. Right?
>> Or am I missing something? [ I see the old code also had that behavior.
>> Odd. ]
>Hmmm, in my first post (somewhere in the archives) I did not mark simple
>gotos inherently necessary... Later I decided that they were, though
>the original patch did work. I suppose was misguided by all the
>discussions about the CFG and control statements, but I think the first
>choice was right after all. I'll fix this up.
I think you can just remove the case statement for GOTO_EXPR.
The goto will still get marked later in the same routine via:
/* If the statement has volatile operands, it needs to be preserved. Same
for statements that can alter control flow in unpredictable ways. */
|| is_ctrl_altering_stmt (stmt))
mark_stmt_necessary (stmt, true);
I'd leave the latter hunk in for now -- while I think it could ultimately
be removed, I believe doing so will require adjustments elsewhere -- and
I don't really want to hold up the improved tree-ssa-dom.c on this trivial
>> /* If we have determined that a conditional branch statement contributes
>> nothing to the program, then we not only remove it, but change the
>> flowgraph so that the block points directly to the immediate
>> post-dominator. The flow graph will remove the blocks we are
>> circumventing, and this block will then simply fall-thru to the
>> post-dominator. This prevents us from having to add any branch
>> instuctions to replace the conditional statement. */
>> "The flow graph will remove ..." -> "The blocks we are circumventing will
>> be removed by cleanup_cfg as they will have become unreachable." or
>> something like that. Think of "the flow graph" as a passive noun -- it's a
>Ah yes, the comment is a literal copy of the old RTL ssa-dce code.
Then it's even possible that's my thinko. I certainly recognized some
of the other comments in the updated tree-ssa-dce.c