tree.h (BLOCK_ORIGIN): New.

2018-09-28  Richard Biener  <rguenther@suse.de>

	* tree.h (BLOCK_ORIGIN): New.
	* omp-expand.c (grid_expand_target_grid_body): Assign
	BLOCK_ORIGIN to BLOCK_ABSTRACT_ORIGIN.
	* tree-inline.c (remap_block): Likewise.

	* auto-profile.c (get_function_decl_from_block): Simplify
	by eliding the BLOCK_ABSTRACT_ORIGIN chasing.
	* langhooks.c (lhd_print_error_function): Likewise.
	* optinfo-emit-json.cc (optrecord_json_writer::inlining_chain_to):
	Likewise.
	* tree-ssa-live.c (remove_unused_scope_block_p): Likewise.
	* tree.c (block_nonartificial_location): Likewise.
	(block_ultimate_origin): Likewise.
	* tree-pretty-print.c (percent_K_format): Likewise.  Remove
	no longer needed LTO case.

	cp/
	* error.c (cp_print_error_function): Simplify by eliding
	the BLOCK_ABSTRACT_ORIGIN chasing.

From-SVN: r264689
This commit is contained in:
Richard Biener 2018-09-28 11:33:29 +00:00 committed by Richard Biener
parent 2bd4ca7ad5
commit dc16b00717
12 changed files with 30 additions and 83 deletions

View File

@ -1,3 +1,20 @@
2018-09-28 Richard Biener <rguenther@suse.de>
* tree.h (BLOCK_ORIGIN): New.
* omp-expand.c (grid_expand_target_grid_body): Assign
BLOCK_ORIGIN to BLOCK_ABSTRACT_ORIGIN.
* tree-inline.c (remap_block): Likewise.
* auto-profile.c (get_function_decl_from_block): Simplify
by eliding the BLOCK_ABSTRACT_ORIGIN chasing.
* langhooks.c (lhd_print_error_function): Likewise.
* optinfo-emit-json.cc (optrecord_json_writer::inlining_chain_to):
Likewise.
* tree-ssa-live.c (remove_unused_scope_block_p): Likewise.
* tree.c (block_nonartificial_location): Likewise.
(block_ultimate_origin): Likewise.
* tree-pretty-print.c (percent_K_format): Likewise. Remove
no longer needed LTO case.
2018-09-28 Andrew Stubbs <ams@codesourcery.com>
Jan Hubicka <jh@suse.cz>
Martin Jambor <mjambor@suse.cz>

View File

@ -354,17 +354,10 @@ get_combined_location (location_t loc, tree decl)
static tree
get_function_decl_from_block (tree block)
{
tree decl;
if (LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block)) == UNKNOWN_LOCATION)
if (!inlined_function_outer_scope_p (block))
return NULL_TREE;
for (decl = BLOCK_ABSTRACT_ORIGIN (block);
decl && (TREE_CODE (decl) == BLOCK);
decl = BLOCK_ABSTRACT_ORIGIN (decl))
if (TREE_CODE (decl) == FUNCTION_DECL)
break;
return decl;
return BLOCK_ABSTRACT_ORIGIN (block);
}
/* Store inline stack for STMT in STACK. */

View File

@ -1,3 +1,8 @@
2018-09-28 Richard Biener <rguenther@suse.de>
* error.c (cp_print_error_function): Simplify by eliding
the BLOCK_ABSTRACT_ORIGIN chasing.
2018-09-27 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/84940

View File

@ -3339,10 +3339,6 @@ cp_print_error_function (diagnostic_context *context,
if (abstract_origin)
{
ao = BLOCK_ABSTRACT_ORIGIN (abstract_origin);
while (TREE_CODE (ao) == BLOCK
&& BLOCK_ABSTRACT_ORIGIN (ao)
&& BLOCK_ABSTRACT_ORIGIN (ao) != ao)
ao = BLOCK_ABSTRACT_ORIGIN (ao);
gcc_assert (TREE_CODE (ao) == FUNCTION_DECL);
fndecl = ao;
}
@ -3364,12 +3360,6 @@ cp_print_error_function (diagnostic_context *context,
&& BLOCK_ABSTRACT_ORIGIN (block))
{
ao = BLOCK_ABSTRACT_ORIGIN (block);
while (TREE_CODE (ao) == BLOCK
&& BLOCK_ABSTRACT_ORIGIN (ao)
&& BLOCK_ABSTRACT_ORIGIN (ao) != ao)
ao = BLOCK_ABSTRACT_ORIGIN (ao);
if (TREE_CODE (ao) == FUNCTION_DECL)
{
fndecl = ao;

View File

@ -385,10 +385,6 @@ lhd_print_error_function (diagnostic_context *context, const char *file,
if (abstract_origin)
{
ao = BLOCK_ABSTRACT_ORIGIN (abstract_origin);
while (TREE_CODE (ao) == BLOCK
&& BLOCK_ABSTRACT_ORIGIN (ao)
&& BLOCK_ABSTRACT_ORIGIN (ao) != ao)
ao = BLOCK_ABSTRACT_ORIGIN (ao);
gcc_assert (TREE_CODE (ao) == FUNCTION_DECL);
fndecl = ao;
}
@ -416,12 +412,6 @@ lhd_print_error_function (diagnostic_context *context, const char *file,
&& BLOCK_ABSTRACT_ORIGIN (block))
{
ao = BLOCK_ABSTRACT_ORIGIN (block);
while (TREE_CODE (ao) == BLOCK
&& BLOCK_ABSTRACT_ORIGIN (ao)
&& BLOCK_ABSTRACT_ORIGIN (ao) != ao)
ao = BLOCK_ABSTRACT_ORIGIN (ao);
if (TREE_CODE (ao) == FUNCTION_DECL)
{
fndecl = ao;

View File

@ -7629,7 +7629,7 @@ grid_expand_target_grid_body (struct omp_region *target)
SET_DECL_ASSEMBLER_NAME (kern_fndecl, DECL_NAME (kern_fndecl));
tree tgtblock = gimple_block (tgt_stmt);
tree fniniblock = make_node (BLOCK);
BLOCK_ABSTRACT_ORIGIN (fniniblock) = tgtblock;
BLOCK_ABSTRACT_ORIGIN (fniniblock) = BLOCK_ORIGIN (tgtblock);
BLOCK_SOURCE_LOCATION (fniniblock) = BLOCK_SOURCE_LOCATION (tgtblock);
BLOCK_SOURCE_END_LOCATION (fniniblock) = BLOCK_SOURCE_END_LOCATION (tgtblock);
BLOCK_SUPERCONTEXT (fniniblock) = kern_fndecl;

View File

@ -299,12 +299,6 @@ optrecord_json_writer::inlining_chain_to_json (location_t loc)
&& BLOCK_ABSTRACT_ORIGIN (block))
{
tree ao = BLOCK_ABSTRACT_ORIGIN (block);
while (TREE_CODE (ao) == BLOCK
&& BLOCK_ABSTRACT_ORIGIN (ao)
&& BLOCK_ABSTRACT_ORIGIN (ao) != ao)
ao = BLOCK_ABSTRACT_ORIGIN (ao);
if (TREE_CODE (ao) == FUNCTION_DECL)
{
fndecl = ao;

View File

@ -704,7 +704,7 @@ remap_block (tree *block, copy_body_data *id)
old_block = *block;
new_block = make_node (BLOCK);
TREE_USED (new_block) = TREE_USED (old_block);
BLOCK_ABSTRACT_ORIGIN (new_block) = old_block;
BLOCK_ABSTRACT_ORIGIN (new_block) = BLOCK_ORIGIN (old_block);
BLOCK_SOURCE_LOCATION (new_block) = BLOCK_SOURCE_LOCATION (old_block);
BLOCK_NONLOCALIZED_VARS (new_block)
= vec_safe_copy (BLOCK_NONLOCALIZED_VARS (old_block));

View File

@ -3976,35 +3976,11 @@ percent_K_format (text_info *text, location_t loc, tree block)
gcc_assert (pp_ti_abstract_origin (text) != NULL);
*pp_ti_abstract_origin (text) = NULL;
if (in_lto_p)
{
/* ??? LTO drops all BLOCK_ABSTRACT_ORIGINs apart from those
representing the outermost block of an inlined function.
So walk the BLOCK tree until we hit such a scope. */
while (block
&& TREE_CODE (block) == BLOCK)
{
if (inlined_function_outer_scope_p (block))
{
*pp_ti_abstract_origin (text) = block;
break;
}
block = BLOCK_SUPERCONTEXT (block);
}
return;
}
while (block
&& TREE_CODE (block) == BLOCK
&& BLOCK_ABSTRACT_ORIGIN (block))
{
tree ao = BLOCK_ABSTRACT_ORIGIN (block);
while (TREE_CODE (ao) == BLOCK
&& BLOCK_ABSTRACT_ORIGIN (ao)
&& BLOCK_ABSTRACT_ORIGIN (ao) != ao)
ao = BLOCK_ABSTRACT_ORIGIN (ao);
if (TREE_CODE (ao) == FUNCTION_DECL)
{
*pp_ti_abstract_origin (text) = block;

View File

@ -561,12 +561,7 @@ remove_unused_scope_block_p (tree scope, bool in_ctor_dtor_block)
will not be emitted properly. */
if (inlined_function_outer_scope_p (scope))
{
tree ao = scope;
while (ao
&& TREE_CODE (ao) == BLOCK
&& BLOCK_ABSTRACT_ORIGIN (ao) != ao)
ao = BLOCK_ABSTRACT_ORIGIN (ao);
tree ao = BLOCK_ORIGIN (scope);
if (ao
&& TREE_CODE (ao) == FUNCTION_DECL
&& DECL_DECLARED_INLINE_P (ao)

View File

@ -11964,12 +11964,6 @@ block_nonartificial_location (tree block)
&& BLOCK_ABSTRACT_ORIGIN (block))
{
tree ao = BLOCK_ABSTRACT_ORIGIN (block);
while (TREE_CODE (ao) == BLOCK
&& BLOCK_ABSTRACT_ORIGIN (ao)
&& BLOCK_ABSTRACT_ORIGIN (ao) != ao)
ao = BLOCK_ABSTRACT_ORIGIN (ao);
if (TREE_CODE (ao) == FUNCTION_DECL)
{
/* If AO is an artificial inline, point RET to the
@ -12150,16 +12144,7 @@ block_ultimate_origin (const_tree block)
return NULL_TREE;
else
{
tree ret_val;
tree lookahead = immediate_origin;
do
{
ret_val = lookahead;
lookahead = (TREE_CODE (ret_val) == BLOCK
? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
}
while (lookahead != NULL && lookahead != ret_val);
tree ret_val = immediate_origin;
/* The block's abstract origin chain may not be the *ultimate* origin of
the block. It could lead to a DECL that has an abstract origin set.

View File

@ -1789,6 +1789,8 @@ extern tree maybe_wrap_with_location (tree, location_t);
#define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
#define BLOCK_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.chain)
#define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin)
#define BLOCK_ORIGIN(NODE) \
(BLOCK_ABSTRACT_ORIGIN(NODE) ? BLOCK_ABSTRACT_ORIGIN(NODE) : (NODE))
#define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag)
#define BLOCK_DIE(NODE) (BLOCK_CHECK (NODE)->block.die)