tree-ssa-propagate.c (set_rhs): Preserve the histogram and the eh region information.
2008-05-28 Seongbae Park <seongbae.park@gmail.com> * tree-ssa-propagate.c (set_rhs): Preserve the histogram and the eh region information. * value-prof.c (gimple_move_stmt_histograms): New function. * value-prof.h (gimple_move_stmt_histograms): New function declaration. From-SVN: r136124
This commit is contained in:
parent
77da4248a9
commit
b608a1bc71
4 changed files with 46 additions and 4 deletions
|
@ -1,3 +1,10 @@
|
|||
2008-05-28 Seongbae Park <seongbae.park@gmail.com>
|
||||
|
||||
* tree-ssa-propagate.c (set_rhs): Preserve the histogram
|
||||
and the eh region information.
|
||||
* value-prof.c (gimple_move_stmt_histograms): New function.
|
||||
* value-prof.h (gimple_move_stmt_histograms): New function declaration.
|
||||
|
||||
2008-05-28 Andreas Tobler <a.tobler@schweiz.org>
|
||||
|
||||
* config/pa/pa.md: Remove extern frame_pointer_needed declaration.
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "langhooks.h"
|
||||
#include "varray.h"
|
||||
#include "vec.h"
|
||||
#include "value-prof.h"
|
||||
|
||||
/* This file implements a generic value propagation engine based on
|
||||
the same propagation used by the SSA-CCP algorithm [1].
|
||||
|
@ -680,9 +681,10 @@ bool
|
|||
set_rhs (tree *stmt_p, tree expr)
|
||||
{
|
||||
tree stmt = *stmt_p, op;
|
||||
stmt_ann_t ann;
|
||||
tree new_stmt;
|
||||
tree var;
|
||||
ssa_op_iter iter;
|
||||
int eh_region;
|
||||
|
||||
if (!valid_gimple_expression_p (expr))
|
||||
return false;
|
||||
|
@ -733,9 +735,22 @@ set_rhs (tree *stmt_p, tree expr)
|
|||
default:
|
||||
/* Replace the whole statement with EXPR. If EXPR has no side
|
||||
effects, then replace *STMT_P with an empty statement. */
|
||||
ann = stmt_ann (stmt);
|
||||
*stmt_p = TREE_SIDE_EFFECTS (expr) ? expr : build_empty_stmt ();
|
||||
(*stmt_p)->base.ann = (tree_ann_t) ann;
|
||||
new_stmt = TREE_SIDE_EFFECTS (expr) ? expr : build_empty_stmt ();
|
||||
*stmt_p = new_stmt;
|
||||
|
||||
/* Preserve the annotation, the histograms and the EH region information
|
||||
associated with the original statement. The EH information
|
||||
needs to be preserved only if the new statement still can throw. */
|
||||
new_stmt->base.ann = (tree_ann_t) stmt_ann (stmt);
|
||||
gimple_move_stmt_histograms (cfun, new_stmt, stmt);
|
||||
if (tree_could_throw_p (new_stmt))
|
||||
{
|
||||
eh_region = lookup_stmt_eh_region (stmt);
|
||||
/* We couldn't possibly turn a nothrow into a throw statement. */
|
||||
gcc_assert (eh_region >= 0);
|
||||
remove_stmt_from_eh_region (stmt);
|
||||
add_stmt_to_eh_region (new_stmt, eh_region);
|
||||
}
|
||||
|
||||
if (gimple_in_ssa_p (cfun)
|
||||
&& TREE_SIDE_EFFECTS (expr))
|
||||
|
|
|
@ -336,6 +336,25 @@ gimple_duplicate_stmt_histograms (struct function *fun, tree stmt,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/* Move all histograms associated with OSTMT to STMT. */
|
||||
|
||||
void
|
||||
gimple_move_stmt_histograms (struct function *fun, tree stmt, tree ostmt)
|
||||
{
|
||||
histogram_value val = gimple_histogram_value (fun, ostmt);
|
||||
if (val)
|
||||
{
|
||||
/* The following three statements can't be reordered,
|
||||
because histogram hashtab relies on stmt field value
|
||||
for finding the exact slot. */
|
||||
set_histogram_value (fun, ostmt, NULL);
|
||||
for (; val != NULL; val = val->hvalue.next)
|
||||
val->hvalue.stmt = stmt;
|
||||
set_histogram_value (fun, stmt, val);
|
||||
}
|
||||
}
|
||||
|
||||
static bool error_found = false;
|
||||
|
||||
/* Helper function for verify_histograms. For each histogram reachable via htab
|
||||
|
|
|
@ -116,6 +116,7 @@ void dump_histograms_for_stmt (struct function *, FILE *, tree);
|
|||
void gimple_remove_histogram_value (struct function *, tree, histogram_value);
|
||||
void gimple_remove_stmt_histograms (struct function *, tree);
|
||||
void gimple_duplicate_stmt_histograms (struct function *, tree, struct function *, tree);
|
||||
void gimple_move_stmt_histograms (struct function *, tree, tree);
|
||||
void verify_histograms (void);
|
||||
void free_histograms (void);
|
||||
void stringop_block_profile (tree, unsigned int *, HOST_WIDE_INT *);
|
||||
|
|
Loading…
Add table
Reference in a new issue