diff options
Diffstat (limited to 'gcc/ipa-dfe.h')
-rw-r--r-- | gcc/ipa-dfe.h | 26 |
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 */ |