X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftracer.c;h=602e7580d994c4f24be7e5f33e65c70d9541f729;hb=d4107d7c17c6f69e7ff93546e24d1490757cf49a;hp=fab2f49fa9f56a52f7ccb18b8972884942969916;hpb=75a70cf95f65fe9204b15ad9aba31c571381d224;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tracer.c b/gcc/tracer.c index fab2f49fa9f..602e7580d99 100644 --- a/gcc/tracer.c +++ b/gcc/tracer.c @@ -1,7 +1,7 @@ /* The tracer pass for the GNU compiler. Contributed by Jan Hubicka, SuSE Labs. Adapted to work on GIMPLE instead of RTL by Robert Kidd, UIUC. - Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GCC. @@ -90,10 +90,19 @@ bb_seen_p (basic_block bb) static bool ignore_bb_p (const_basic_block bb) { + gimple g; + if (bb->index < NUM_FIXED_BLOCKS) return true; - if (!maybe_hot_bb_p (bb)) + if (optimize_bb_for_size_p (bb)) + return true; + + /* A transaction is a single entry multiple exit region. It must be + duplicated in its entirety or not at all. */ + g = last_stmt (CONST_CAST_BB (bb)); + if (g && gimple_code (g) == GIMPLE_TRANSACTION) return true; + return false; } @@ -306,7 +315,7 @@ tail_duplicate (void) nduplicated += counts [bb2->index]; e = find_edge (bb, bb2); - + copy = duplicate_block (bb2, e, bb); flush_pending_stmts (e); @@ -393,8 +402,7 @@ struct gimple_opt_pass pass_tracer = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_dump_func - | TODO_update_ssa + TODO_update_ssa | TODO_verify_ssa /* todo_flags_finish */ } };