bitmap.c (bitmap_head::crashme): Define.

2018-12-06  Richard Biener  <rguenther@suse.de>

	* bitmap.c (bitmap_head::crashme): Define.
	* bitmap.h (bitmap_head): Add constexpr default constructor
	poisoning the obstack member.
	(bitmap_head::crashme): Declare.
	(bitmap_release): New function clearing a bitmap and poisoning
	the obstack member.
	* gengtype.c (main): Make it recognize CONSTEXPR.

	* lra-constraints.c (lra_inheritance): Use bitmap_release
	instead of bitmap_clear.

	* ira.c (ira): Work around class-memaccess warning.
	* regrename.c (create_new_chain): Likewise.

From-SVN: r266850
This commit is contained in:
Richard Biener 2018-12-06 11:32:09 +00:00 committed by Richard Biener
parent 98610dc5b6
commit 1c252ef3cb
7 changed files with 44 additions and 7 deletions

View File

@ -1,3 +1,17 @@
2018-12-06 Richard Biener <rguenther@suse.de>
* bitmap.c (bitmap_head::crashme): Define.
* bitmap.h (bitmap_head): Add constexpr default constructor
poisoning the obstack member.
(bitmap_head::crashme): Declare.
(bitmap_release): New function clearing a bitmap and poisoning
the obstack member.
* gengtype.c (main): Make it recognize CONSTEXPR.
* lra-constraints.c (lra_inheritance): Use bitmap_release
instead of bitmap_clear.
* ira.c (ira): Work around class-memaccess warning.
* regrename.c (create_new_chain): Likewise.
2018-12-06 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/85726

View File

@ -26,6 +26,10 @@ along with GCC; see the file COPYING3. If not see
/* Memory allocation statistics purpose instance. */
mem_alloc_description<bitmap_usage> bitmap_mem_desc;
/* Static zero-initialized bitmap obstack used for default initialization
of bitmap_head. */
bitmap_obstack bitmap_head::crashme;
static bitmap_element *bitmap_tree_listify_from (bitmap, bitmap_element *);
/* Register new bitmap. */

View File

@ -323,6 +323,12 @@ struct GTY((chain_next ("%h.next"), chain_prev ("%h.prev"))) bitmap_element {
already pointed to by the chain started by first, so GTY((skip)) it. */
struct GTY(()) bitmap_head {
static bitmap_obstack crashme;
/* Poison obstack to not make it not a valid initialized GC bitmap. */
CONSTEXPR bitmap_head()
: indx(0), tree_form(false), first(NULL), current(NULL),
obstack (&crashme)
{}
/* Index of last element looked at. */
unsigned int indx;
/* False if the bitmap is in list form; true if the bitmap is in tree form.
@ -441,6 +447,18 @@ bitmap_initialize (bitmap head, bitmap_obstack *obstack CXX_MEM_STAT_INFO)
bitmap_register (head PASS_MEM_STAT);
}
/* Release a bitmap (but not its head). This is suitable for pairing with
bitmap_initialize. */
static inline void
bitmap_release (bitmap head)
{
bitmap_clear (head);
/* Poison the obstack pointer so the obstack can be safely released.
Do not zero it as the bitmap then becomes initialized GC. */
head->obstack = &bitmap_head::crashme;
}
/* Allocate and free bitmaps from obstack, malloc and gc'd memory. */
extern bitmap bitmap_alloc (bitmap_obstack *obstack CXX_MEM_STAT_INFO);
#define BITMAP_ALLOC bitmap_alloc

View File

@ -5205,6 +5205,7 @@ main (int argc, char **argv)
POS_HERE (do_scalar_typedef ("void", &pos));
POS_HERE (do_scalar_typedef ("machine_mode", &pos));
POS_HERE (do_scalar_typedef ("fixed_size_mode", &pos));
POS_HERE (do_scalar_typedef ("CONSTEXPR", &pos));
POS_HERE (do_typedef ("PTR",
create_pointer (resolve_typedef ("void", &pos)),
&pos));

View File

@ -5417,7 +5417,7 @@ ira (FILE *f)
= ((struct ira_spilled_reg_stack_slot *)
ira_allocate (max_regno
* sizeof (struct ira_spilled_reg_stack_slot)));
memset (ira_spilled_reg_stack_slots, 0,
memset ((void *)ira_spilled_reg_stack_slots, 0,
max_regno * sizeof (struct ira_spilled_reg_stack_slot));
}
}

View File

@ -6651,11 +6651,11 @@ lra_inheritance (void)
inherit_in_ebb. */
update_ebb_live_info (BB_HEAD (start_bb), BB_END (bb));
}
bitmap_clear (&ebb_global_regs);
bitmap_clear (&temp_bitmap);
bitmap_clear (&live_regs);
bitmap_clear (&invalid_invariant_regs);
bitmap_clear (&check_only_regs);
bitmap_release (&ebb_global_regs);
bitmap_release (&temp_bitmap);
bitmap_release (&live_regs);
bitmap_release (&invalid_invariant_regs);
bitmap_release (&check_only_regs);
free (usage_insns);
timevar_pop (TV_LRA_INHERITANCE);

View File

@ -231,7 +231,7 @@ create_new_chain (unsigned this_regno, unsigned this_nregs, rtx *loc,
struct du_chain *this_du;
int nregs;
memset (head, 0, sizeof *head);
memset ((void *)head, 0, sizeof *head);
head->next_chain = open_chains;
head->regno = this_regno;
head->nregs = this_nregs;