aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.2.1-5666.3/gcc/varray.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.2.1-5666.3/gcc/varray.c')
-rw-r--r--gcc-4.2.1-5666.3/gcc/varray.c259
1 files changed, 0 insertions, 259 deletions
diff --git a/gcc-4.2.1-5666.3/gcc/varray.c b/gcc-4.2.1-5666.3/gcc/varray.c
deleted file mode 100644
index 9900f9e1b..000000000
--- a/gcc-4.2.1-5666.3/gcc/varray.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/* Virtual array support.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006
- Free Software Foundation, Inc.
- Contributed by Cygnus Solutions.
-
- This file is part of GCC.
-
- GCC is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- GCC is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
- License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING. If not, write to the Free
- the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "toplev.h"
-#include "varray.h"
-#include "ggc.h"
-#include "hashtab.h"
-
-#define VARRAY_HDR_SIZE (sizeof (struct varray_head_tag) - sizeof (varray_data))
-
-#ifdef GATHER_STATISTICS
-
-/* Store information about each particular varray. */
-struct varray_descriptor
-{
- const char *name;
- int allocated;
- int created;
- int resized;
- int copied;
-};
-
-/* Hashtable mapping varray names to descriptors. */
-static htab_t varray_hash;
-
-/* Hashtable helpers. */
-static hashval_t
-hash_descriptor (const void *p)
-{
- const struct varray_descriptor *d = p;
- return htab_hash_pointer (d->name);
-}
-static int
-eq_descriptor (const void *p1, const void *p2)
-{
- const struct varray_descriptor *d = p1;
- return d->name == p2;
-}
-
-/* For given name, return descriptor, create new if needed. */
-static struct varray_descriptor *
-varray_descriptor (const char *name)
-{
- struct varray_descriptor **slot;
-
- if (!varray_hash)
- varray_hash = htab_create (10, hash_descriptor, eq_descriptor, NULL);
-
- slot = (struct varray_descriptor **)
- htab_find_slot_with_hash (varray_hash, name,
- htab_hash_pointer (name),
- 1);
- if (*slot)
- return *slot;
- *slot = xcalloc (sizeof (**slot), 1);
- (*slot)->name = name;
- return *slot;
-}
-#endif
-
-/* Do not add any more non-GC items here. Please either remove or GC
- those items that are not GCed. */
-
-static const struct {
- unsigned char size;
- bool uses_ggc;
-} element[NUM_VARRAY_DATA] = {
- { sizeof (char), 1 },
- { sizeof (unsigned char), 1 },
- { sizeof (short), 1 },
- { sizeof (unsigned short), 1 },
- { sizeof (int), 1 },
- { sizeof (unsigned int), 1 },
- { sizeof (long), 1 },
- { sizeof (unsigned long), 1 },
- { sizeof (HOST_WIDE_INT), 1 },
- { sizeof (unsigned HOST_WIDE_INT), 1 },
- { sizeof (void *), 1 },
- { sizeof (void *), 0 },
- { sizeof (char *), 1 },
- { sizeof (struct rtx_def *), 1 },
- { sizeof (struct rtvec_def *), 1 },
- { sizeof (union tree_node *), 1 },
- { sizeof (struct bitmap_head_def *), 1 },
- { sizeof (struct reg_info_def *), 0 },
- { sizeof (struct basic_block_def *), 1 },
- { sizeof (struct elt_list *), 1 },
- { sizeof (struct edge_def *), 1 },
- { sizeof (tree *), 1 },
-};
-
-/* Allocate a virtual array with NUM_ELEMENT elements, each of which is
- ELEMENT_SIZE bytes long, named NAME. Array elements are zeroed. */
-varray_type
-varray_init (size_t num_elements, enum varray_data_enum element_kind,
- const char *name)
-{
- size_t data_size = num_elements * element[element_kind].size;
- varray_type ptr;
-#ifdef GATHER_STATISTICS
- struct varray_descriptor *desc = varray_descriptor (name);
-
- desc->created++;
- desc->allocated += data_size + VARRAY_HDR_SIZE;
-#endif
- if (element[element_kind].uses_ggc)
- ptr = ggc_alloc_cleared (VARRAY_HDR_SIZE + data_size);
- else
- ptr = xcalloc (VARRAY_HDR_SIZE + data_size, 1);
-
- ptr->num_elements = num_elements;
- ptr->elements_used = 0;
- ptr->type = element_kind;
- ptr->name = name;
- return ptr;
-}
-
-/* Grow/shrink the virtual array VA to N elements. Zero any new elements
- allocated. */
-varray_type
-varray_grow (varray_type va, size_t n)
-{
- size_t old_elements = va->num_elements;
- if (n != old_elements)
- {
- size_t elem_size = element[va->type].size;
- size_t old_data_size = old_elements * elem_size;
- size_t data_size = n * elem_size;
-#ifdef GATHER_STATISTICS
- struct varray_descriptor *desc = varray_descriptor (va->name);
- varray_type oldva = va;
-
- if (data_size > old_data_size)
- desc->allocated += data_size - old_data_size;
- desc->resized ++;
-#endif
-
-
- if (element[va->type].uses_ggc)
- va = ggc_realloc (va, VARRAY_HDR_SIZE + data_size);
- else
- va = xrealloc (va, VARRAY_HDR_SIZE + data_size);
- va->num_elements = n;
- if (n > old_elements)
- memset (&va->data.vdt_c[old_data_size], 0, data_size - old_data_size);
-#ifdef GATHER_STATISTICS
- if (oldva != va)
- desc->copied++;
-#endif
- }
-
- return va;
-}
-
-/* Reset a varray to its original state. */
-void
-varray_clear (varray_type va)
-{
- size_t data_size = element[va->type].size * va->num_elements;
-
- memset (va->data.vdt_c, 0, data_size);
- va->elements_used = 0;
-}
-
-/* Check the bounds of a varray access. */
-
-#if defined ENABLE_CHECKING && (GCC_VERSION >= 2007)
-
-void
-varray_check_failed (varray_type va, size_t n, const char *file, int line,
- const char *function)
-{
- internal_error ("virtual array %s[%lu]: element %lu out of bounds "
- "in %s, at %s:%d",
- va->name, (unsigned long) va->num_elements, (unsigned long) n,
- function, trim_filename (file), line);
-}
-
-void
-varray_underflow (varray_type va, const char *file, int line,
- const char *function)
-{
- internal_error ("underflowed virtual array %s in %s, at %s:%d",
- va->name, function, trim_filename (file), line);
-}
-
-#endif
-
-
-/* Output per-varray statistics. */
-#ifdef GATHER_STATISTICS
-
-/* Used to accumulate statistics about varray sizes. */
-struct output_info
-{
- int count;
- int size;
-};
-
-/* Called via htab_traverse. Output varray descriptor pointed out by SLOT
- and update statistics. */
-static int
-print_statistics (void **slot, void *b)
-{
- struct varray_descriptor *d = (struct varray_descriptor *) *slot;
- struct output_info *i = (struct output_info *) b;
-
- if (d->allocated)
- {
- fprintf (stderr, "%-21s %6d %10d %7d %7d\n", d->name,
- d->created, d->allocated, d->resized, d->copied);
- i->size += d->allocated;
- i->count += d->created;
- }
- return 1;
-}
-#endif
-
-/* Output per-varray memory usage statistics. */
-void
-dump_varray_statistics (void)
-{
-#ifdef GATHER_STATISTICS
- struct output_info info;
-
- fprintf (stderr, "\nVARRAY Kind Count Bytes Resized copied\n");
- fprintf (stderr, "-------------------------------------------------------\n");
- info.count = 0;
- info.size = 0;
- htab_traverse (varray_hash, print_statistics, &info);
- fprintf (stderr, "-------------------------------------------------------\n");
- fprintf (stderr, "%-20s %7d %10d\n",
- "Total", info.count, info.size);
- fprintf (stderr, "-------------------------------------------------------\n");
-#endif
-}