Hi.

As Honza noticed, there's still some leftover from MPX removal.
May I remove another bunch of fields now, or should I wait
for next stage1?

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Thanks,
Martin

gcc/ChangeLog:

2019-02-13  Martin Liska  <mli...@suse.cz>

        * builtins.h (expand_builtin_with_bounds): Remove declaration.
        * calls.c (struct arg_data): Remove special_slot, pointer_arg
        and pointer_offset fields.
        (initialize_argument_information): Remove usage of dead
        fields.
        * cgraph.h (struct cgraph_thunk_info): Remove
        add_pointer_bounds_args.
        * cgraphunit.c (cgraph_node::expand_thunk): Remove usage of dead
        fields.
        (cgraph_node::assemble_thunks_and_aliases): Remove usage of dead
        fields.
        * config/i386/i386.c (ix86_function_arg_advance): Remove
        unrelated comment.
        (struct builtin_isa): Remove leaf_p and nothrow_p fields.
        (def_builtin):  Remove usage of dead
        fields.
        (ix86_add_new_builtins): Likewise.
        * ipa-fnsummary.c (compute_fn_summary): Likewise.
        * ipa-icf.c (sem_function::equals_wpa): Likewise.
        (sem_function::init): Likewise.
        (sem_variable::merge): Likewise.
        * ipa-visibility.c (function_and_variable_visibility): Likewise.
        * ipa.c (symbol_table::remove_unreachable_nodes): Likewise.
        * lto-cgraph.c (lto_output_node): Likewise.
        (lto_output_varpool_node): Likewise.
        (input_node): Likewise.
        (input_varpool_node): Likewise.
        * lto-streamer-out.c (lto_output): Likewise.
        * tree-inline.c (expand_call_inline): Remove usage of
        assign_stmts.
        * tree-inline.h (struct copy_body_data): Likewise.
        * varpool.c (varpool_node::dump): Likewise.
---
 gcc/builtins.h         |  1 -
 gcc/calls.c            | 14 +-------------
 gcc/cgraph.h           |  7 -------
 gcc/cgraphunit.c       |  8 +-------
 gcc/config/i386/i386.c | 13 -------------
 gcc/ipa-fnsummary.c    | 18 +-----------------
 gcc/ipa-icf.c          |  5 -----
 gcc/ipa-visibility.c   |  1 -
 gcc/ipa.c              |  6 ------
 gcc/lto-cgraph.c       |  6 +-----
 gcc/lto-streamer-out.c |  3 +--
 gcc/tree-inline.c      |  2 --
 gcc/tree-inline.h      |  3 ---
 gcc/varpool.c          |  2 --
 14 files changed, 5 insertions(+), 84 deletions(-)


diff --git a/gcc/builtins.h b/gcc/builtins.h
index 3ec4ba09b66..599c96e72e1 100644
--- a/gcc/builtins.h
+++ b/gcc/builtins.h
@@ -119,7 +119,6 @@ extern void expand_builtin_trap (void);
 extern void expand_ifn_atomic_bit_test_and (gcall *);
 extern void expand_ifn_atomic_compare_exchange (gcall *);
 extern rtx expand_builtin (tree, rtx, rtx, machine_mode, int);
-extern rtx expand_builtin_with_bounds (tree, rtx, rtx, machine_mode, int);
 extern enum built_in_function builtin_mathfn_code (const_tree);
 extern tree fold_builtin_expect (location_t, tree, tree, tree, tree);
 extern bool avoid_folding_inline_builtin (tree);
diff --git a/gcc/calls.c b/gcc/calls.c
index e11977e98df..63c1bc52077 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -82,15 +82,6 @@ struct arg_data
   /* If REG is a PARALLEL, this is a copy of VALUE pulled into the correct
      form for emit_group_move.  */
   rtx parallel_value;
-  /* If value is passed in neither reg nor stack, this field holds a number
-     of a special slot to be used.  */
-  rtx special_slot;
-  /* For pointer bounds hold an index of parm bounds are bound to.  -1 if
-     there is no such pointer.  */
-  int pointer_arg;
-  /* If pointer_arg refers a structure, then pointer_offset holds an offset
-     of a pointer in this structure.  */
-  int pointer_offset;
   /* If REG was promoted from the actual mode of the argument expression,
      indicates whether the promotion is sign- or zero-extended.  */
   int unsignedp;
@@ -2129,10 +2120,7 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
 						argpos < n_named_args);
 
       if (args[i].reg && CONST_INT_P (args[i].reg))
-	{
-	  args[i].special_slot = args[i].reg;
-	  args[i].reg = NULL;
-	}
+	args[i].reg = NULL;
 
       /* If this is a sibling call and the machine has register windows, the
 	 register window has to be unwinded before calling the routine, so
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 75d4cec0ba8..2f6daa75a24 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -690,9 +690,6 @@ struct GTY(()) cgraph_thunk_info {
        the virtual one.  */
   bool virtual_offset_p;
 
-  /* ??? True for special kind of thunks, seems related to instrumentation.  */
-  bool add_pointer_bounds_args;
-
   /* Set to true when alias node (the cgraph_node to which this struct belong)
      is a thunk.  Access to any other fields is invalid if this is false.  */
   bool thunk_p;
@@ -1939,10 +1936,6 @@ public:
   /* Set when variable is scheduled to be assembled.  */
   unsigned output : 1;
 
-  /* Set when variable has statically initialized pointer
-     or is a static bounds variable and needs initalization.  */
-  unsigned need_bounds_init : 1;
-
   /* Set if the variable is dynamically initialized, except for
      function local statics.   */
   unsigned dynamically_initialized : 1;
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index a7c9b9ac249..32753397981 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1773,11 +1773,6 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk)
   tree thunk_fndecl = decl;
   tree a;
 
-  /* Instrumentation thunk is the same function with
-     a different signature.  Never need to expand it.  */
-  if (thunk.add_pointer_bounds_args)
-    return false;
-
   if (!force_gimple_thunk
       && this_adjusting
       && indirect_offset == 0
@@ -2114,8 +2109,7 @@ cgraph_node::assemble_thunks_and_aliases (void)
 
   for (e = callers; e;)
     if (e->caller->thunk.thunk_p
-	&& !e->caller->global.inlined_to
-	&& !e->caller->thunk.add_pointer_bounds_args)
+	&& !e->caller->global.inlined_to)
       {
 	cgraph_node *thunk = e->caller;
 
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 12bc7926f86..fd05873ba39 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -8324,8 +8324,6 @@ ix86_function_arg_advance (cumulative_args_t cum_v, machine_mode mode,
   else
     nregs = function_arg_advance_32 (cum, mode, type, bytes, words);
 
-  /* For pointers passed in memory we expect bounds passed in Bounds
-     Table.  */
   if (!nregs)
     {
       /* Track if there are outgoing arguments on stack.  */
@@ -30421,8 +30419,6 @@ struct builtin_isa {
   enum ix86_builtin_func_type tcode; /* type to use in the declaration */
   unsigned char const_p:1;	/* true if the declaration is constant */
   unsigned char pure_p:1;	/* true if the declaration has pure attribute */
-  bool leaf_p;			/* true if the declaration has leaf attribute */
-  bool nothrow_p;		/* true if the declaration has nothrow attribute */
   bool set_and_not_built_p;
 };
 
@@ -30493,8 +30489,6 @@ def_builtin (HOST_WIDE_INT mask, HOST_WIDE_INT mask2,
 	  ix86_builtins[(int) code] = NULL_TREE;
 	  ix86_builtins_isa[(int) code].tcode = tcode;
 	  ix86_builtins_isa[(int) code].name = name;
-	  ix86_builtins_isa[(int) code].leaf_p = false;
-	  ix86_builtins_isa[(int) code].nothrow_p = false;
 	  ix86_builtins_isa[(int) code].const_p = false;
 	  ix86_builtins_isa[(int) code].pure_p = false;
 	  ix86_builtins_isa[(int) code].set_and_not_built_p = true;
@@ -30574,13 +30568,6 @@ ix86_add_new_builtins (HOST_WIDE_INT isa, HOST_WIDE_INT isa2)
 	  ix86_builtins[i] = decl;
 	  if (ix86_builtins_isa[i].const_p)
 	    TREE_READONLY (decl) = 1;
-	  if (ix86_builtins_isa[i].pure_p)
-	    DECL_PURE_P (decl) = 1;
-	  if (ix86_builtins_isa[i].leaf_p)
-	    DECL_ATTRIBUTES (decl) = build_tree_list (get_identifier ("leaf"),
-						      NULL_TREE);
-	  if (ix86_builtins_isa[i].nothrow_p)
-	    TREE_NOTHROW (decl) = 1;
 	}
     }
 
diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c
index 057b364b379..260315da228 100644
--- a/gcc/ipa-fnsummary.c
+++ b/gcc/ipa-fnsummary.c
@@ -2449,13 +2449,7 @@ compute_fn_summary (struct cgraph_node *node, bool early)
       info->account_size_time (2 * ipa_fn_summary::size_scale, 0, t, t);
       ipa_update_overall_fn_summary (node);
       info->self_size = info->size;
-      /* We cannot inline instrumentation clones.  */
-      if (node->thunk.add_pointer_bounds_args)
-	{
-          info->inlinable = false;
-          node->callees->inline_failed = CIF_CHKP;
-	}
-      else if (stdarg_p (TREE_TYPE (node->decl)))
+      if (stdarg_p (TREE_TYPE (node->decl)))
 	{
 	  info->inlinable = false;
 	  node->callees->inline_failed = CIF_VARIADIC_THUNK;
@@ -2501,16 +2495,6 @@ compute_fn_summary (struct cgraph_node *node, bool early)
 	       node->local.can_change_signature = !e;
 	     }
 	 }
-       /* Functions called by instrumentation thunk can't change signature
-	  because instrumentation thunk modification is not supported.  */
-       if (node->local.can_change_signature)
-	 for (e = node->callers; e; e = e->next_caller)
-	   if (e->caller->thunk.thunk_p
-	       && e->caller->thunk.add_pointer_bounds_args)
-	     {
-	       node->local.can_change_signature = false;
-	       break;
-	     }
        analyze_function_body (node, early);
        pop_cfun ();
      }
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 849e9b4e9f5..e4c9dda0df1 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -548,9 +548,6 @@ sem_function::equals_wpa (sem_item *item,
         return return_false_with_msg ("thunk this_adjusting mismatch");
       if (cnode->thunk.virtual_offset_p != cnode2->thunk.virtual_offset_p)
         return return_false_with_msg ("thunk virtual_offset_p mismatch");
-      if (cnode->thunk.add_pointer_bounds_args
-	  != cnode2->thunk.add_pointer_bounds_args)
-        return return_false_with_msg ("thunk add_pointer_bounds_args mismatch");
     }
 
   /* Compare special function DECL attributes.  */
@@ -1407,7 +1404,6 @@ sem_function::init (void)
       hstate.add_hwi (cnode->thunk.virtual_value);
       hstate.add_flag (cnode->thunk.this_adjusting);
       hstate.add_flag (cnode->thunk.virtual_offset_p);
-      hstate.add_flag (cnode->thunk.add_pointer_bounds_args);
       gcode_hash = hstate.end ();
     }
 }
@@ -2205,7 +2201,6 @@ sem_variable::merge (sem_item *alias_item)
       DECL_INITIAL (alias->decl) = NULL;
       ((symtab_node *)alias)->call_for_symbol_and_aliases (clear_decl_rtl,
 							   NULL, true);
-      alias->need_bounds_init = false;
       alias->remove_all_references ();
       if (TREE_ADDRESSABLE (alias->decl))
         original->call_for_symbol_and_aliases (set_addressable, NULL, true);
diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c
index d9ef8f53735..84585b52e46 100644
--- a/gcc/ipa-visibility.c
+++ b/gcc/ipa-visibility.c
@@ -721,7 +721,6 @@ function_and_variable_visibility (bool whole_program)
 	localize_node (whole_program, node);
 
       if (node->thunk.thunk_p
-	  && !node->thunk.add_pointer_bounds_args
 	  && TREE_PUBLIC (node->decl))
 	{
 	  struct cgraph_node *decl_node = node;
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 26268bc0c7c..2496694124c 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -548,12 +548,6 @@ symbol_table::remove_unreachable_nodes (FILE *file)
 	      node->remove_callees ();
 	      node->remove_all_references ();
 	      changed = true;
-	      if (node->thunk.thunk_p
-		  && node->thunk.add_pointer_bounds_args)
-		{
-		  node->thunk.thunk_p = false;
-		  node->thunk.add_pointer_bounds_args = false;
-		}
 	    }
 	}
       else
diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
index b941c76a878..4dfa2862be3 100644
--- a/gcc/lto-cgraph.c
+++ b/gcc/lto-cgraph.c
@@ -556,8 +556,7 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node,
       streamer_write_uhwi_stream
 	 (ob->main_stream,
 	  1 + (node->thunk.this_adjusting != 0) * 2
-	  + (node->thunk.virtual_offset_p != 0) * 4
-	  + (node->thunk.add_pointer_bounds_args != 0) * 8);
+	  + (node->thunk.virtual_offset_p != 0) * 4);
       streamer_write_uhwi_stream (ob->main_stream, node->thunk.fixed_offset);
       streamer_write_uhwi_stream (ob->main_stream, node->thunk.virtual_value);
       streamer_write_uhwi_stream (ob->main_stream, node->thunk.indirect_offset);
@@ -631,7 +630,6 @@ lto_output_varpool_node (struct lto_simple_output_block *ob, varpool_node *node,
   bp_pack_value (&bp, node->tls_model, 3);
   bp_pack_value (&bp, node->used_by_single_function, 1);
   bp_pack_value (&bp, node->dynamically_initialized, 1);
-  bp_pack_value (&bp, node->need_bounds_init, 1);
   streamer_write_bitpack (&bp);
 
   group = node->get_comdat_group ();
@@ -1311,7 +1309,6 @@ input_node (struct lto_file_decl_data *file_data,
       node->thunk.indirect_offset = indirect_offset;
       node->thunk.this_adjusting = (type & 2);
       node->thunk.virtual_offset_p = (type & 4);
-      node->thunk.add_pointer_bounds_args = (type & 8);
     }
   if (node->alias && !node->analyzed && node->weakref)
     node->alias_target = get_alias_symbol (node->decl);
@@ -1382,7 +1379,6 @@ input_varpool_node (struct lto_file_decl_data *file_data,
   node->tls_model = (enum tls_model)bp_unpack_value (&bp, 3);
   node->used_by_single_function = (enum tls_model)bp_unpack_value (&bp, 1);
   node->dynamically_initialized = bp_unpack_value (&bp, 1);
-  node->need_bounds_init = bp_unpack_value (&bp, 1);
   group = read_identifier (ib);
   if (group)
     {
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index b26c883b732..a72016a4843 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -2412,8 +2412,7 @@ lto_output (void)
       if (cgraph_node *node = dyn_cast <cgraph_node *> (snode))
 	{
 	  if (lto_symtab_encoder_encode_body_p (encoder, node)
-	      && !node->alias
-	      && (!node->thunk.thunk_p || !node->thunk.add_pointer_bounds_args))
+	      && !node->alias)
 	    {
 	      if (flag_checking)
 		{
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 5c0c4c5ab91..98cfbe31b82 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -4554,7 +4554,6 @@ expand_call_inline (basic_block bb, gimple *stmt, copy_body_data *id)
 
   /* We will be inlining this callee.  */
   id->eh_lp_nr = lookup_stmt_eh_lp (stmt);
-  id->assign_stmts.create (0);
 
   /* Update the callers EH personality.  */
   if (DECL_FUNCTION_PERSONALITY (fn))
@@ -4916,7 +4915,6 @@ expand_call_inline (basic_block bb, gimple *stmt, copy_body_data *id)
       TREE_USED (gimple_assign_rhs1 (stmt)) = 1;
     }
 
-  id->assign_stmts.release ();
   id->add_clobbers_to_eh_landing_pads = 0;
 
   /* Output the inlining info for this abstract function, since it has been
diff --git a/gcc/tree-inline.h b/gcc/tree-inline.h
index 11f596e3a74..9c2915edc6c 100644
--- a/gcc/tree-inline.h
+++ b/gcc/tree-inline.h
@@ -63,9 +63,6 @@ struct copy_body_data
   /* The VAR_DECL for the return value.  */
   tree retvar;
 
-  /* Assign statements that need bounds copy.  */
-  vec<gimple *> assign_stmts;
-
   /* The map from local declarations in the inlined function to
      equivalents in the function into which it is being inlined.  */
   hash_map<tree, tree> *decl_map;
diff --git a/gcc/varpool.c b/gcc/varpool.c
index edffa551ee6..8e5a9372656 100644
--- a/gcc/varpool.c
+++ b/gcc/varpool.c
@@ -226,8 +226,6 @@ varpool_node::dump (FILE *f)
     fprintf (f, " output");
   if (used_by_single_function)
     fprintf (f, " used-by-single-function");
-  if (need_bounds_init)
-    fprintf (f, " need-bounds-init");
   if (TREE_READONLY (decl))
     fprintf (f, " read-only");
   if (ctor_useable_for_folding_p ())

Reply via email to