view gcc/ipa-struct-reorg.h @ 15:11a6cbe2d14c

The configure script which is produced from configure.ac was changed. but this script cannot be generated in this repository. You can use GCC's original subversion repository to generate it. See CbC-memo.ja. And _CbC_return's nested function was made supporting any return type.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Thu, 24 Sep 2009 12:44:28 +0900
parents a06113de4d67
children 77e2b8dfacca
line wrap: on
line source

/* Struct-reorg optimization.
   Copyright (C) 2002, 2003-2007, 2008, 2009 Free Software Foundation, Inc.
   Contributed by Olga Golovanevsky <olga@il.ibm.com>

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, 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 COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

#ifndef IPA_STRUCT_REORG_H
#define IPA_STRUCT_REORG_H

/* This file contains data structures and interfaces required
   for struct-reorg optimizations.  */

/* An access site of the structure field.
   We consider an access to be of the following form:

   D.2166_21 = i.6_20 * 8;
   D.2167_22 = (struct str_t *) D.2166_21;
   D.2168_24 = D.2167_22 + p.5_23;
   D.2169_25 = D.2168_24->b;
*/

struct field_access_site
{
  /* Statement in which the access site occurs.  */
  gimple stmt;           /* D.2169_25 = D.2168_24->b;  */
  tree comp_ref;         /* D.2168_24->b  */
  tree field_decl;       /* b */
  tree ref;              /* D.2168_24  */
  tree num;              /* i.6_20  */
  tree offset;           /* D2167_22  */
  tree base;             /* p.5_23  */
  gimple ref_def_stmt;   /* D.2168_24 = D.2167_22 + p.5_23;  */
  gimple cast_stmt;      /* D.2167_22 = (struct str_t *) D.2166_21;
                            This statement is not always present.  */
};

/* A non-field structure access site.  */
struct access_site
{
  /* A statement in which the access site occurs.  */
  gimple stmt;
  /* A list of structure variables in the access site.  */
  VEC (tree, heap) *vars;
};

/* A field of the structure.  */
struct field_entry
{
  /* A field index.  */
  int index;
  /* Number of times the field is accessed (according to profiling).  */
  gcov_type count;
  tree decl;
  /* A type of a new structure this field belongs to.  */
  tree field_mapping;
  htab_t acc_sites;
};

/* This structure represents a result of the structure peeling.
   The original structure is decomposed into substructures, or clusters.  */
struct field_cluster
{
  /* A bitmap of field indices. The set bit indicates that the field 
     corresponding to it is a part of this cluster.  */
  sbitmap fields_in_cluster;
  struct field_cluster *sibling;
};

/* An information about an individual structure type (RECORD_TYPE) required
   by struct-reorg optimizations to perform a transformation.  */
struct data_structure
{

  /* A main variant of the structure type.  */
  tree decl;

  /* Number of fields in the structure.  */
  int num_fields;

  /* A structure access count collected through profiling.  */
  gcov_type count;

  /* An array of the structure fields, indexed by field ID.  */
  struct field_entry *fields;

  /* Non-field accesses of the structure.  */
  htab_t accs;

  /* A data structure representing a reorganization decision.  */
  struct field_cluster *struct_clustering;

  /* New types to replace the original structure type.  */
  VEC(tree, heap) *new_types;
};

typedef struct data_structure * d_str;

#endif /* IPA_STRUCT_REORG_H */