From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/ipa-struct-reorg.h | 112 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 gcc/ipa-struct-reorg.h (limited to 'gcc/ipa-struct-reorg.h') diff --git a/gcc/ipa-struct-reorg.h b/gcc/ipa-struct-reorg.h new file mode 100644 index 000000000..e6df1cf90 --- /dev/null +++ b/gcc/ipa-struct-reorg.h @@ -0,0 +1,112 @@ +/* Struct-reorg optimization. + Copyright (C) 2002, 2003-2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Olga Golovanevsky + +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 +. */ + +#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 */ -- cgit v1.2.3