tree.h (BLOCK_ORIGIN): New.
authorRichard Biener <rguenther@suse.de>
Fri, 28 Sep 2018 11:33:29 +0000 (11:33 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 28 Sep 2018 11:33:29 +0000 (11:33 +0000)
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

12 files changed:
gcc/ChangeLog
gcc/auto-profile.c
gcc/cp/ChangeLog
gcc/cp/error.c
gcc/langhooks.c
gcc/omp-expand.c
gcc/optinfo-emit-json.cc
gcc/tree-inline.c
gcc/tree-pretty-print.c
gcc/tree-ssa-live.c
gcc/tree.c
gcc/tree.h

index 5b685e4243322452b20eb0ab7d57f1d66e51ea01..7c5e78b61fc334ac918ec6b542d4e76f72b8aa03 100644 (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>
index 68abe327cce9da174e166c18224f53750a2817dc..f7ba32c30ac227cfb99c573cfe423c79f9fdb692 100644 (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.  */
index a28b6150d8f5df53fa47dbc2708a23c3c163a133..f5d602de026dd0d78bc047aef8d37bf604b6be3f 100644 (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
index 601f6d2c264ee4fd05c81bc983346307213b4b23..0b14dccba3a125581eb79bc47d4d17e36bad5da3 100644 (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;
index 4e6179f248a5f8863168714c0bd16b1bbf0e4afd..9d7c2d3425d3d1e7929ce69837290bd662fcde31 100644 (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;
index d2a77c067c6c306382704c33a1e7285c8a3ef9ad..e8abde413dbb73e99c7ab2d5a2d50ee7b20272db 100644 (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;
index 992960ec8d200a5b2cccd2edab46e89ec40e3cf4..efdbdb3ae014359ec90fde428098da84fa7a3795 100644 (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;
index b2cddc223120406f748e004d123837df55d674c5..42c33d23b9b45a89aad400a0b6cf3e4602d1a076 100644 (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));
index 2c089b11751b84be97f8544c536f311b915d7016..75b939a9418df970d04e6a134602618e7a5a986a 100644 (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;
index 2623d9b2b0005e5ef4641c87cdce544eb2d42452..eee21a63bd708072f8f7cdbe7faf48d7fc681643 100644 (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)
index 64d9e0bfe818341e8c2c528044d0b82f52cfd889..2bd209b564836bf1dd67b558b4162513d1778c51 100644 (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.
index dcf8253c3bc823afb08c07889e6843213bb541c2..35536f372a300280e000c8f19170c7e9b0c295f4 100644 (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)