Commit 27bddc4a by Jan Hubicka Committed by Jan Hubicka

tree-ssa-threadbackward.c: Include tree-inline.h


	* tree-ssa-threadbackward.c: Include tree-inline.h
	(profitable_jump_thread_path): Use estimate_num_insns to estimate
	size of copied block; for cold paths reduce duplication.
	(find_jump_threads_backwards): Remove redundant tests.
	(pass_thread_jumps::gate): Enable for -Os.
	* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Update testcase.

From-SVN: r239219
parent 4a9f8a9f
2016-08-07 Jan Hubicka <hubicka@ucw.cz>
* tree-ssa-threadbackward.c: Include tree-inline.h
(profitable_jump_thread_path): Use estimate_num_insns to estimate
size of copied block; for cold paths reduce duplication.
(find_jump_threads_backwards): Remove redundant tests.
(pass_thread_jumps::gate): Enable for -Os.
2016-08-07 Jakub Jelinek <jakub@redhat.com> 2016-08-07 Jakub Jelinek <jakub@redhat.com>
PR c/72816 PR c/72816
......
2016-08-07 Jan Hubicka <hubicka@ucw.cz>
* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Update testcase.
2016-08-07 Jakub Jelinek <jakub@redhat.com> 2016-08-07 Jakub Jelinek <jakub@redhat.com>
PR c/72816 PR c/72816
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-thread1-stats -fdump-tree-thread2-stats -fdump-tree-thread3-stats -fdump-tree-dom3-stats -fdump-tree-vrp2-stats" } */ /* { dg-options "-O2 -fdump-tree-thread1-stats -fdump-tree-thread2-stats -fdump-tree-thread3-stats -fdump-tree-dom3-stats -fdump-tree-vrp2-stats -fno-guess-branch-probability" } */
/* { dg-final { scan-tree-dump "Jumps threaded: 16" "thread1" } } */ /* { dg-final { scan-tree-dump "Jumps threaded: 16" "thread1" } } */
/* { dg-final { scan-tree-dump "Jumps threaded: 11" "thread2" } } */ /* { dg-final { scan-tree-dump "Jumps threaded: 6" "thread2" } } */
/* { dg-final { scan-tree-dump "Jumps threaded: 3" "thread3" } } */ /* { dg-final { scan-tree-dump "Jumps threaded: 3" "thread3" } } */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom3" } } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom3" } } */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp2" } } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp2" } } */
......
...@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-pass.h" #include "tree-pass.h"
#include "gimple-ssa.h" #include "gimple-ssa.h"
#include "tree-phinodes.h" #include "tree-phinodes.h"
#include "tree-inline.h"
static int max_threaded_paths; static int max_threaded_paths;
...@@ -223,7 +224,7 @@ profitable_jump_thread_path (vec<basic_block, va_gc> *&path, ...@@ -223,7 +224,7 @@ profitable_jump_thread_path (vec<basic_block, va_gc> *&path,
&& !(gimple_code (stmt) == GIMPLE_ASSIGN && !(gimple_code (stmt) == GIMPLE_ASSIGN
&& gimple_assign_rhs_code (stmt) == ASSERT_EXPR) && gimple_assign_rhs_code (stmt) == ASSERT_EXPR)
&& !is_gimple_debug (stmt)) && !is_gimple_debug (stmt))
++n_insns; n_insns += estimate_num_insns (stmt, &eni_size_weights);
} }
/* We do not look at the block with the threaded branch /* We do not look at the block with the threaded branch
...@@ -251,13 +252,15 @@ profitable_jump_thread_path (vec<basic_block, va_gc> *&path, ...@@ -251,13 +252,15 @@ profitable_jump_thread_path (vec<basic_block, va_gc> *&path,
threaded_through_latch = true; threaded_through_latch = true;
} }
gimple *stmt = get_gimple_control_stmt ((*path)[0]);
gcc_assert (stmt);
/* We are going to remove the control statement at the end of the /* We are going to remove the control statement at the end of the
last block in the threading path. So don't count it against our last block in the threading path. So don't count it against our
statement count. */ statement count. */
n_insns--;
gimple *stmt = get_gimple_control_stmt ((*path)[0]); n_insns-= estimate_num_insns (stmt, &eni_size_weights);
gcc_assert (stmt);
/* We have found a constant value for ARG. For GIMPLE_SWITCH /* We have found a constant value for ARG. For GIMPLE_SWITCH
and GIMPLE_GOTO, we use it as-is. However, for a GIMPLE_COND and GIMPLE_GOTO, we use it as-is. However, for a GIMPLE_COND
we need to substitute, fold and simplify so we can determine we need to substitute, fold and simplify so we can determine
...@@ -303,12 +306,24 @@ profitable_jump_thread_path (vec<basic_block, va_gc> *&path, ...@@ -303,12 +306,24 @@ profitable_jump_thread_path (vec<basic_block, va_gc> *&path,
return NULL; return NULL;
} }
if (n_insns >= PARAM_VALUE (PARAM_MAX_FSM_THREAD_PATH_INSNS)) if (optimize_edge_for_speed_p (taken_edge))
{
if (n_insns >= PARAM_VALUE (PARAM_MAX_FSM_THREAD_PATH_INSNS))
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "FSM jump-thread path not considered: "
"the number of instructions on the path "
"exceeds PARAM_MAX_FSM_THREAD_PATH_INSNS.\n");
path->pop ();
return NULL;
}
}
else if (n_insns > 1)
{ {
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "FSM jump-thread path not considered: " fprintf (dump_file, "FSM jump-thread path not considered: "
"the number of instructions on the path " "duplication of %i insns is needed and optimizing for size.\n",
"exceeds PARAM_MAX_FSM_THREAD_PATH_INSNS.\n"); n_insns);
path->pop (); path->pop ();
return NULL; return NULL;
} }
...@@ -612,10 +627,6 @@ fsm_find_control_statement_thread_paths (tree name, ...@@ -612,10 +627,6 @@ fsm_find_control_statement_thread_paths (tree name,
void void
find_jump_threads_backwards (basic_block bb) find_jump_threads_backwards (basic_block bb)
{ {
if (!flag_expensive_optimizations
|| optimize_function_for_size_p (cfun))
return;
gimple *stmt = get_gimple_control_stmt (bb); gimple *stmt = get_gimple_control_stmt (bb);
if (!stmt) if (!stmt)
return; return;
...@@ -680,8 +691,7 @@ public: ...@@ -680,8 +691,7 @@ public:
bool bool
pass_thread_jumps::gate (function *fun ATTRIBUTE_UNUSED) pass_thread_jumps::gate (function *fun ATTRIBUTE_UNUSED)
{ {
return (flag_expensive_optimizations return flag_expensive_optimizations;
&& ! optimize_function_for_size_p (cfun));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment