This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [tree-ssa] Patch ping
Hello,
> Anyway, the patch is fine.
here is the version with the change due to conflict with change of phi
node accessing. I have added a new function set_phi_nodes to hide the
technical details of moving the list of phi nodes.
Zdenek
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v
retrieving revision 1.903.2.149
diff -c -3 -p -r1.903.2.149 Makefile.in
*** Makefile.in 3 Dec 2003 01:09:13 -0000 1.903.2.149
--- Makefile.in 3 Dec 2003 17:45:58 -0000
*************** OBJS-common = \
*** 877,883 ****
tree-alias-common.o tree-ssa-ccp.o tree-browser.o @ANDER@ tree-ssa-dce.o \
tree-ssa-pre.o tree-ssa-live.o tree-must-alias.o \
tree-ssa-dom.o domwalk.o tree-tailcall.o gimple-low.o tree-iterator.o \
! tree-phinodes.o tree-ssanames.o tree-sra.o \
alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o \
cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o \
cfgloopanal.o cfgloopmanip.o loop-init.o loop-unswitch.o loop-unroll.o \
--- 877,883 ----
tree-alias-common.o tree-ssa-ccp.o tree-browser.o @ANDER@ tree-ssa-dce.o \
tree-ssa-pre.o tree-ssa-live.o tree-must-alias.o \
tree-ssa-dom.o domwalk.o tree-tailcall.o gimple-low.o tree-iterator.o \
! tree-phinodes.o tree-ssanames.o tree-sra.o tree-ssa-loop.o \
alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o \
cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o \
cfgloopanal.o cfgloopmanip.o loop-init.o loop-unswitch.o loop-unroll.o \
*************** tree-dfa.o : tree-dfa.c $(TREE_FLOW_H) $
*** 1589,1594 ****
--- 1589,1597 ----
tree-eh.o : tree-eh.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(RTL_H) $(TREE_H) $(TM_H) flags.h function.h except.h langhooks.h \
$(GGC_H) gt-tree-eh.h
+ tree-ssa-loop.o : tree-ssa-loop.c $(TREE_FLOW_H) $(CONFIG_H) \
+ $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) \
+ output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H)
tree-optimize.o : tree-optimize.c $(TREE_FLOW_H) $(CONFIG_H) \
$(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) \
$(GGC_H) output.h diagnostic.h errors.h flags.h tree-alias-common.h \
Index: common.opt
===================================================================
RCS file: /cvs/gcc/gcc/gcc/common.opt,v
retrieving revision 1.14.2.12
diff -c -3 -p -r1.14.2.12 common.opt
*** common.opt 25 Nov 2003 02:09:34 -0000 1.14.2.12
--- common.opt 3 Dec 2003 17:45:58 -0000
*************** ftree-dominator-opts
*** 715,720 ****
--- 715,724 ----
Common
Enable dominator optimizations
+ ftree-loop-optimize
+ Common
+ Enable loop optimizations on trees
+
ftree-must-alias
Common
Detect must-alias relations to remove pointer de-references
Index: flags.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/flags.h,v
retrieving revision 1.86.2.40
diff -c -3 -p -r1.86.2.40 flags.h
*** flags.h 20 Nov 2003 20:54:38 -0000 1.86.2.40
--- flags.h 3 Dec 2003 17:45:58 -0000
*************** extern int flag_tree_dom;
*** 737,742 ****
--- 737,745 ----
/* Enable promotion of virtual to real operands in must-alias situations. */
extern int flag_tree_must_alias;
+ /* Enable loop optimization on tree-ssa. */
+ extern int flag_tree_loop;
+
/* Enable scalar replacement of aggregates. */
extern int flag_tree_sra;
Index: opts.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/opts.c,v
retrieving revision 1.31.2.20
diff -c -3 -p -r1.31.2.20 opts.c
*** opts.c 25 Nov 2003 02:09:50 -0000 1.31.2.20
--- opts.c 3 Dec 2003 17:45:58 -0000
*************** decode_options (unsigned int argc, const
*** 535,540 ****
--- 535,541 ----
flag_tree_ccp = 1;
flag_tree_dce = 1;
flag_tree_dom = 1;
+ flag_tree_loop = 1;
flag_tree_must_alias = 1;
flag_tree_pre = 1;
flag_tree_ter = 1;
*************** common_handle_option (size_t scode, cons
*** 1415,1420 ****
--- 1416,1425 ----
case OPT_ftree_must_alias:
flag_tree_must_alias = value;
+ break;
+
+ case OPT_ftree_loop_optimize:
+ flag_tree_loop = value;
break;
case OPT_ftree_sra:
Index: timevar.def
===================================================================
RCS file: /cvs/gcc/gcc/gcc/timevar.def,v
retrieving revision 1.14.2.24
diff -c -3 -p -r1.14.2.24 timevar.def
*** timevar.def 25 Nov 2003 02:09:53 -0000 1.14.2.24
--- timevar.def 3 Dec 2003 17:45:58 -0000
*************** DEFTIMEVAR (TV_TREE_SRA , "
*** 76,81 ****
--- 76,82 ----
DEFTIMEVAR (TV_TREE_CCP , "tree CCP")
DEFTIMEVAR (TV_TREE_PRE , "tree PRE")
DEFTIMEVAR (TV_TREE_DCE , "tree DCE")
+ DEFTIMEVAR (TV_TREE_LOOP , "tree loop optimization")
DEFTIMEVAR (TV_TREE_SSA_TO_NORMAL , "tree SSA to normal")
DEFTIMEVAR (TV_DOM_FRONTIERS , "dominance frontiers")
DEFTIMEVAR (TV_OVERLOAD , "overload resolution")
Index: toplev.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/toplev.c,v
retrieving revision 1.654.2.81
diff -c -3 -p -r1.654.2.81 toplev.c
*** toplev.c 29 Nov 2003 12:43:09 -0000 1.654.2.81
--- toplev.c 3 Dec 2003 17:45:58 -0000
*************** int flag_tree_dce = 0;
*** 980,985 ****
--- 980,988 ----
/* Enable promotion of virtual to real operands in must-alias situations. */
int flag_tree_must_alias = 0;
+ /* Enable loop optimization on tree-ssa. */
+ int flag_tree_loop = 0;
+
/* Enable scalar replacement of aggregates. */
int flag_tree_sra = 0;
*************** static const lang_independent_options f_
*** 1189,1195 ****
{ "tree-dominator-opts", &flag_tree_dom, 1 },
{ "tree-combine-temps", &flag_tree_combine_temps, 1 },
{ "tree-ter", &flag_tree_ter, 1 },
! { "tree-must-alias", &flag_tree_must_alias, 1 }
};
/* Here is a table, controlled by the tm.h file, listing each -m switch
--- 1192,1199 ----
{ "tree-dominator-opts", &flag_tree_dom, 1 },
{ "tree-combine-temps", &flag_tree_combine_temps, 1 },
{ "tree-ter", &flag_tree_ter, 1 },
! { "tree-must-alias", &flag_tree_must_alias, 1 },
! { "tree-loop-optimize", &flag_tree_loop, 1 }
};
/* Here is a table, controlled by the tm.h file, listing each -m switch
Index: tree-cfg.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-cfg.c,v
retrieving revision 1.1.4.227
diff -c -3 -p -r1.1.4.227 tree-cfg.c
*** tree-cfg.c 3 Dec 2003 16:06:34 -0000 1.1.4.227
--- tree-cfg.c 3 Dec 2003 17:45:59 -0000
*************** build_tree_cfg (tree *fnbody)
*** 186,207 ****
make_edges ();
}
- #if 0
- {
- /* The loop analyzer should be initialized right after the CFG
- construction because some loops will need latch blocks, and these
- need to be added before we do anything else. If you use this
- structure you'll have to ensure that optimizers don't invalidate the
- information gathered in the loops structure via modifications to the
- underlying structure: the CFG. */
- struct loops *loops = loop_optimizer_init (NULL);
-
- /* Once initialized, it's not really necessary to keep the loop data
- structures around. They may be rescanned using flow_loops_find. */
- loop_optimizer_finalize (loops, NULL);
- }
- #endif
-
timevar_pop (TV_TREE_CFG);
/* Debugging dumps. */
--- 186,191 ----
*************** static basic_block
*** 3098,3107 ****
tree_make_forwarder_block (basic_block bb, int redirect_latch,
int redirect_nonlatch, edge except, int conn_latch)
{
! edge e, next_e, fallthru;
basic_block dummy;
- /* Create the new basic block. */
dummy = create_bb (NULL, bb->prev_bb);
create_block_annotation (dummy);
dummy->count = bb->count;
--- 3082,3093 ----
tree_make_forwarder_block (basic_block bb, int redirect_latch,
int redirect_nonlatch, edge except, int conn_latch)
{
! edge e, next_e, new_e, fallthru;
basic_block dummy;
+ tree phi, new_phi, var, label;
+ bool first;
+ block_stmt_iterator bsi, bsi_tgt;
dummy = create_bb (NULL, bb->prev_bb);
create_block_annotation (dummy);
dummy->count = bb->count;
*************** tree_make_forwarder_block (basic_block b
*** 3114,3139 ****
for (e = dummy->pred; e; e = e->pred_next)
e->dest = dummy;
fallthru = make_edge (dummy, bb, EDGE_FALLTHRU);
HEADER_BLOCK (dummy) = 0;
HEADER_BLOCK (bb) = 1;
/* Redirect back edges we want to keep. */
for (e = dummy->pred; e; e = next_e)
{
next_e = e->pred_next;
! if (e == except
! || !((redirect_latch && LATCH_EDGE (e))
! || (redirect_nonlatch && !LATCH_EDGE (e))))
! {
! dummy->frequency -= EDGE_FREQUENCY (e);
! dummy->count -= e->count;
! if (dummy->frequency < 0)
! dummy->frequency = 0;
! if (dummy->count < 0)
! dummy->count = 0;
! redirect_edge_succ (e, bb);
}
}
--- 3100,3173 ----
for (e = dummy->pred; e; e = e->pred_next)
e->dest = dummy;
+ /* Move the phi nodes to the dummy block. */
+ set_phi_nodes (dummy, phi_nodes (bb));
+ set_phi_nodes (bb, NULL_TREE);
+
+ /* Move the labels to the new basic block. */
+ for (bsi = bsi_start (bb), bsi_tgt = bsi_start (dummy); !bsi_end_p (bsi); )
+ {
+ label = bsi_stmt (bsi);
+ if (TREE_CODE (label) != LABEL_EXPR)
+ break;
+
+ bsi_remove (&bsi);
+ bsi_insert_after (&bsi_tgt, label, BSI_NEW_STMT);
+ }
+
fallthru = make_edge (dummy, bb, EDGE_FALLTHRU);
+ alloc_aux_for_block (dummy, sizeof (int));
HEADER_BLOCK (dummy) = 0;
HEADER_BLOCK (bb) = 1;
+ first = true;
+
/* Redirect back edges we want to keep. */
for (e = dummy->pred; e; e = next_e)
{
next_e = e->pred_next;
! if (e != except
! && ((redirect_latch && LATCH_EDGE (e))
! || (redirect_nonlatch && !LATCH_EDGE (e))))
! continue;
!
! dummy->frequency -= EDGE_FREQUENCY (e);
! dummy->count -= e->count;
! if (dummy->frequency < 0)
! dummy->frequency = 0;
! if (dummy->count < 0)
! dummy->count = 0;
!
! new_e = tree_redirect_edge_and_branch_1 (e, bb, true);
!
! if (first)
! {
! first = false;
!
! /* The first time we redirect a branch we must create new phi nodes
! on the start of bb. */
! for (phi = phi_nodes (dummy); phi; phi = TREE_CHAIN (phi))
! {
! var = PHI_RESULT (phi);
! new_phi = create_phi_node (var, bb);
! SSA_NAME_DEF_STMT (var) = new_phi;
! PHI_RESULT (phi) = make_ssa_name (SSA_NAME_VAR (var), phi);
! add_phi_arg (&new_phi, PHI_RESULT (phi), fallthru);
! }
!
! /* Ensure that the phi node chains are in the same order. */
! set_phi_nodes (bb, nreverse (phi_nodes (bb)));
! }
!
! /* Move the argument of the phi node. */
! for (phi = phi_nodes (dummy), new_phi = phi_nodes (bb);
! phi;
! phi = TREE_CHAIN (phi), new_phi = TREE_CHAIN (new_phi))
! {
! var = PHI_ARG_DEF (phi, phi_arg_from_edge (phi, e));
! add_phi_arg (&new_phi, var, new_e);
! remove_phi_arg (phi, e->src);
}
}
*************** tree_loop_optimizer_init (FILE *dumpfile
*** 3173,3180 ****
--- 3207,3218 ----
free (loops->cfg.dfs_order);
loops->cfg.dfs_order = NULL;
+ #if 0
+ /* Does not work just now. It will be easier to fix it in the no-gotos
+ form. */
/* Force all latches to have only single successor. */
force_single_succ_latches (loops);
+ #endif
/* Mark irreducible loops. */
mark_irreducible_loops (loops);
*************** tree_try_redirect_by_replacing_jump (edg
*** 3461,3467 ****
}
/* Redirect E to DEST. Return NULL on failure, edge representing redirected
! branch otherwise */
static edge
tree_redirect_edge_and_branch_1 (edge e, basic_block dest, bool splitting)
--- 3499,3505 ----
}
/* Redirect E to DEST. Return NULL on failure, edge representing redirected
! branch otherwise. */
static edge
tree_redirect_edge_and_branch_1 (edge e, basic_block dest, bool splitting)
Index: tree-dump.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-dump.c,v
retrieving revision 1.6.2.55
diff -c -3 -p -r1.6.2.55 tree-dump.c
*** tree-dump.c 20 Nov 2003 20:54:39 -0000 1.6.2.55
--- tree-dump.c 3 Dec 2003 17:45:59 -0000
*************** static struct dump_file_info dump_files[
*** 664,669 ****
--- 664,670 ----
{".dom1", "tree-dom1", 0, 0},
{".ssa2", "tree-ssa2", 0, 0},
{".dce1", "tree-dce1", 0, 0},
+ {".loop", "tree-loop", 0, 0},
{".tail", "tree-tail", 0, 0},
{".mustalias", "tree-mustalias", 0, 0},
{".ssa3", "tree-ssa3", 0, 0},
Index: tree-flow-inline.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-flow-inline.h,v
retrieving revision 1.1.2.59
diff -c -3 -p -r1.1.2.59 tree-flow-inline.h
*** tree-flow-inline.h 1 Dec 2003 22:30:49 -0000 1.1.2.59
--- tree-flow-inline.h 3 Dec 2003 17:45:59 -0000
*************** phi_nodes (basic_block bb)
*** 278,283 ****
--- 278,294 ----
return VARRAY_TREE (tree_phi_root, bb->index);
}
+ /* Set list of phi nodes of a basic block BB to L. */
+
+ static inline void
+ set_phi_nodes (basic_block bb, tree l)
+ {
+ tree phi;
+
+ VARRAY_TREE (tree_phi_root, bb->index) = l;
+ for (phi = l; phi; phi = TREE_CHAIN (phi))
+ set_bb_for_stmt (phi, bb);
+ }
/* Return the phi index number for an edge. */
static inline int
Index: tree-flow.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-flow.h,v
retrieving revision 1.1.4.162
diff -c -3 -p -r1.1.4.162 tree-flow.h
*** tree-flow.h 3 Dec 2003 16:06:34 -0000 1.1.4.162
--- tree-flow.h 3 Dec 2003 17:45:59 -0000
*************** typedef struct bb_ann_d *bb_ann_t;
*** 325,330 ****
--- 325,331 ----
/* Accessors for basic block annotations. */
static inline bb_ann_t bb_ann (basic_block);
static inline tree phi_nodes (basic_block);
+ static inline void set_phi_nodes (basic_block, tree);
static inline void add_dom_child (basic_block, basic_block);
static inline bitmap dom_children (basic_block);
*************** extern void propagate_copy (tree *, tree
*** 531,536 ****
--- 532,539 ----
/* In tree-ssa-dce.c */
void tree_ssa_dce (tree, enum tree_dump_index);
+ /* In tree-ssa-loop.c */
+ void tree_ssa_loop_opt (tree, enum tree_dump_index);
/* In tree-flow-inline.h */
static inline int phi_arg_from_edge (tree, edge);
Index: tree-optimize.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-optimize.c,v
retrieving revision 1.1.4.84
diff -c -3 -p -r1.1.4.84 tree-optimize.c
*** tree-optimize.c 3 Dec 2003 16:06:34 -0000 1.1.4.84
--- tree-optimize.c 3 Dec 2003 17:45:59 -0000
*************** optimize_function_tree (tree fndecl, tre
*** 122,127 ****
--- 122,130 ----
ggc_collect ();
+ if (flag_tree_loop)
+ tree_ssa_loop_opt (fndecl, TDI_loop);
+
#if 0
/* Eliminate tail recursion calls. */
tree_optimize_tail_calls (false, TDI_tail1);
Index: tree-ssa-loop.c
===================================================================
RCS file: tree-ssa-loop.c
diff -N tree-ssa-loop.c
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- tree-ssa-loop.c 3 Dec 2003 17:45:59 -0000
***************
*** 0 ****
--- 1,68 ----
+ /* Loop optimizations over tree-ssa.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING. If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA. */
+
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "tree.h"
+ #include "rtl.h"
+ #include "tm_p.h"
+ #include "hard-reg-set.h"
+ #include "basic-block.h"
+ #include "output.h"
+ #include "diagnostic.h"
+ #include "basic-block.h"
+ #include "tree-flow.h"
+ #include "tree-dump.h"
+ #include "timevar.h"
+
+ /* Dump file and flags. */
+ static FILE *dump_file;
+ static int dump_flags;
+
+ /* The main entry into loop optimization pass. PHASE indicates which dump file
+ from the DUMP_FILES array to use when dumping debugging information.
+ FNDECL is the current function decl. */
+
+ void
+ tree_ssa_loop_opt (tree fndecl, enum tree_dump_index phase)
+ {
+ #ifdef ENABLE_CHECKING
+ struct loops *loops;
+
+ /* Does nothing for now except for checking that we are able to build the
+ loops. */
+
+ dump_file = dump_begin (phase, &dump_flags);
+
+ timevar_push (TV_TREE_LOOP);
+ loops = loop_optimizer_init (dump_file);
+ loop_optimizer_finalize (loops,
+ (dump_flags & TDF_DETAILS) ? dump_file : NULL);
+ timevar_pop (TV_TREE_LOOP);
+
+ if (dump_file)
+ {
+ dump_function_to_file (fndecl, dump_file, dump_flags);
+ dump_end (phase, dump_file);
+ }
+ #endif
+ }
Index: tree.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree.h,v
retrieving revision 1.342.2.143
diff -c -3 -p -r1.342.2.143 tree.h
*** tree.h 2 Dec 2003 04:21:54 -0000 1.342.2.143
--- tree.h 3 Dec 2003 17:46:00 -0000
*************** enum tree_dump_index
*** 3588,3593 ****
--- 3588,3594 ----
TDI_dom_1,
TDI_ssa_2,
TDI_dce_1,
+ TDI_loop,
TDI_tail, /* dump after tail recursion elimination */
TDI_mustalias,
TDI_ssa_3,
Index: doc/invoke.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/invoke.texi,v
retrieving revision 1.152.2.61
diff -c -3 -p -r1.152.2.61 invoke.texi
*** doc/invoke.texi 25 Nov 2003 02:10:57 -0000 1.152.2.61
--- doc/invoke.texi 3 Dec 2003 17:46:03 -0000
*************** in the following sections.
*** 255,261 ****
-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
-fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
-fdump-tree-must-alias@r{[}-@var{n}@r{]} -fdump-tree-dom@r{[}-@var{n}@r{]}@gol
! -fdump-tree-sra@r{[}-@var{n}@r{]}
-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
-feliminate-unused-debug-symbols -fmem-report -fprofile-arcs @gol
-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
--- 255,261 ----
-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
-fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
-fdump-tree-must-alias@r{[}-@var{n}@r{]} -fdump-tree-dom@r{[}-@var{n}@r{]}@gol
! -fdump-tree-loop@r{[}-@var{n}@r{]} -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
-feliminate-unused-debug-symbols -fmem-report -fprofile-arcs @gol
-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
*************** in the following sections.
*** 305,311 ****
-funswitch-loops -fold-unroll-loops -fold-unroll-all-loops @gol
-ftree-pre -ftree-ccp -ftree-dce -ftree-copyprop @gol
-fdisable-tree-ssa -ftree-dominator-opts -ftree-must-alias @gol
! -ftree-sra @gol
--param @var{name}=@var{value}
-O -O0 -O1 -O2 -O3 -Os}
--- 305,311 ----
-funswitch-loops -fold-unroll-loops -fold-unroll-all-loops @gol
-ftree-pre -ftree-ccp -ftree-dce -ftree-copyprop @gol
-fdisable-tree-ssa -ftree-dominator-opts -ftree-must-alias @gol
! -ftree-loop-optimize -ftree-sra @gol
--param @var{name}=@var{value}
-O -O0 -O1 -O2 -O3 -Os}
*************** file name is made by appending @file{.sr
*** 3573,3578 ****
--- 3573,3583 ----
Dump each function after applying dominator tree optimizations. The file
name is made by appending @file{.dom} to the source file name.
+ @item loop
+ @opindex fdump-tree-loop
+ Dump each function after applying tree-level loop optimizations. The file
+ name is made by appending @file{.loop} to the source file name.
+
@item all
@opindex fdump-tree-all
Enable all the available tree dumps with the flags provided in this option.
*************** default at -O and higher.
*** 4321,4326 ****
--- 4326,4335 ----
@item -ftree-dominator-opts
Perform dead code elimination (DCE) on trees. This flag is enabled by
+ default at -O and higher.
+
+ @item -ftree-loop-optimize
+ Perform loop optimization on trees. This flag is enabled by
default at -O and higher.
@item -ftree-must-alias