summaryrefslogtreecommitdiff
path: root/gcc/ipa-dfe.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ipa-dfe.h')
-rw-r--r--gcc/ipa-dfe.h26
1 files changed, 19 insertions, 7 deletions
diff --git a/gcc/ipa-dfe.h b/gcc/ipa-dfe.h
index 74cf8bfa863..b00575c5003 100644
--- a/gcc/ipa-dfe.h
+++ b/gcc/ipa-dfe.h
@@ -72,7 +72,8 @@ typedef std::map<const_tree, std::pair<tree, bool> > reorg_field_map_t;
class TypeReconstructor : public TypeWalker
{
public:
- TypeReconstructor (record_field_offset_map_t records) : _records (records)
+ TypeReconstructor (record_field_offset_map_t records, const char *suffix)
+ : _records (records), _suffix (suffix)
{};
/* Whether a type has already been modified. */
@@ -87,7 +88,8 @@ public:
/* Map RECORD_TYPE -> is_modified. */
typedef std::map<const_tree, bool> is_modified_map_t;
-private:
+protected:
+ const char *get_new_suffix ();
// Modifications to the current sub_type
std::stack<tree> in_progress;
@@ -108,6 +110,9 @@ private:
// Which records can be modified.
record_field_offset_map_t _records;
+ // The new suffix
+ const char *_suffix;
+
// Which fields will be deleted.
field_tuple_list_stack_t field_list_stack;
@@ -130,6 +135,7 @@ private:
// If the type has been modified.
bool get_is_modified (const_tree);
+private:
// Compute new FIELD_DECL list.
virtual void _walk_field_pre (const_tree);
virtual void _walk_field_post (const_tree);
@@ -153,8 +159,9 @@ private:
class ExprTypeRewriter : public ExprWalker
{
public:
- ExprTypeRewriter (reorg_record_map_t map, reorg_field_map_t map2)
- : _delete (false), _map (map), _map2 (map2)
+ ExprTypeRewriter (reorg_record_map_t map, reorg_field_map_t map2,
+ bool can_delete)
+ : _delete (false), _can_delete (can_delete), _map (map), _map2 (map2)
{
/* Create an inverse map new RECORD_TYPE -> old RECORD_TYPE. */
for (reorg_record_map_t::iterator i = map.begin (), e = map.end (); i != e; ++i)
@@ -180,6 +187,7 @@ public:
// Delete statement.
bool delete_statement ();
bool _delete;
+ bool _can_delete;
private:
// Old RECORD_TYPE -> new RECORD_TYPE.
@@ -209,8 +217,9 @@ private:
class GimpleTypeRewriter : public GimpleWalker
{
public:
- GimpleTypeRewriter (reorg_record_map_t map, reorg_field_map_t map2)
- : exprTypeRewriter (map, map2)
+ GimpleTypeRewriter (reorg_record_map_t map, reorg_field_map_t map2,
+ bool can_delete)
+ : exprTypeRewriter (map, map2, can_delete)
{};
void _rewrite_function_decl ();
@@ -244,6 +253,9 @@ get_types_replacement (record_field_offset_map_t record_field_offset_map,
// Substitute types.
void
substitute_types_in_program (reorg_record_map_t map,
- reorg_field_map_t field_map);
+ reorg_field_map_t field_map, bool _delete);
+
+tree
+get_new_identifier (const_tree type, const char *suffix);
#endif /* GCC_IPA_DFE */