aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraphunit.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-06-18 14:14:00 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-06-18 14:14:00 +0000
commit31ee20ba67b2020f64f5068444f2b0409d128881 (patch)
tree4c5453344740133739cf76909604ad591cc0c77f /gcc/cgraphunit.c
parentac0511f2335deb48bc4c53b4305b1720e2cd7b73 (diff)
downloadgcc-31ee20ba67b2020f64f5068444f2b0409d128881.zip
gcc-31ee20ba67b2020f64f5068444f2b0409d128881.tar.gz
gcc-31ee20ba67b2020f64f5068444f2b0409d128881.tar.bz2
Makefile.in (cgraphunit.o): Add $(CFGLOOP_H) dependency.
2013-06-18 Richard Biener <rguenther@suse.de> * Makefile.in (cgraphunit.o): Add $(CFGLOOP_H) dependency. * cgraphunit.c: Include cfgloop.h. (init_lowered_empty_function): Initialize the loop tree. (assemble_thunk): Insert new BBs into loops. From-SVN: r200169
Diffstat (limited to 'gcc/cgraphunit.c')
-rw-r--r--gcc/cgraphunit.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 016a6e4..51365eb 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -192,6 +192,7 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-utils.h"
#include "lto-streamer.h"
#include "except.h"
+#include "cfgloop.h"
#include "regset.h" /* FIXME: For reg_obstack. */
/* Queue of cgraph nodes scheduled to be added into cgraph. This is a
@@ -1196,18 +1197,24 @@ init_lowered_empty_function (tree decl, bool in_ssa)
init_tree_ssa (cfun);
init_ssa_operands (cfun);
cfun->gimple_df->in_ssa_p = true;
+ cfun->curr_properties |= PROP_ssa;
}
DECL_INITIAL (decl) = make_node (BLOCK);
DECL_SAVED_TREE (decl) = error_mark_node;
- cfun->curr_properties |=
- (PROP_gimple_lcf | PROP_gimple_leh | PROP_cfg | PROP_ssa | PROP_gimple_any);
+ cfun->curr_properties |= (PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_any
+ | PROP_cfg | PROP_loops);
+
+ set_loops_for_fn (cfun, ggc_alloc_cleared_loops ());
+ init_loops_structure (cfun, loops_for_fn (cfun), 1);
+ loops_for_fn (cfun)->state |= LOOPS_MAY_HAVE_MULTIPLE_LATCHES;
/* Create BB for body of the function and connect it properly. */
bb = create_basic_block (NULL, (void *) 0, ENTRY_BLOCK_PTR);
- make_edge (ENTRY_BLOCK_PTR, bb, 0);
+ make_edge (ENTRY_BLOCK_PTR, bb, EDGE_FALLTHRU);
make_edge (bb, EXIT_BLOCK_PTR, 0);
+ add_bb_to_loop (bb, ENTRY_BLOCK_PTR->loop_father);
return bb;
}
@@ -1452,6 +1459,9 @@ assemble_thunk (struct cgraph_node *node)
then_bb = create_basic_block (NULL, (void *) 0, bb);
return_bb = create_basic_block (NULL, (void *) 0, then_bb);
else_bb = create_basic_block (NULL, (void *) 0, else_bb);
+ add_bb_to_loop (then_bb, bb->loop_father);
+ add_bb_to_loop (return_bb, bb->loop_father);
+ add_bb_to_loop (else_bb, bb->loop_father);
remove_edge (single_succ_edge (bb));
true_label = gimple_block_label (then_bb);
stmt = gimple_build_cond (NE_EXPR, restmp,