Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

113 lines (90 sloc) 3.454 kb
/* 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 */
Jump to Line
Something went wrong with that request. Please try again.