diff options
author | Alexandre Oliva <oliva@adacore.com> | 2024-07-03 07:33:08 -0300 |
---|---|---|
committer | Alexandre Oliva <oliva@gnu.org> | 2024-07-03 07:49:36 -0300 |
commit | 640f0f3e2b771e23665924f24527e6b1a5db8d3c (patch) | |
tree | c636d2ff3fa6e3ad1a5e3cc21a1902d2fd2d8d04 /gcc/tree-vect-patterns.cc | |
parent | 113c4826f5e1ff88a9e1625980ff0b617583279c (diff) | |
download | gcc-640f0f3e2b771e23665924f24527e6b1a5db8d3c.zip gcc-640f0f3e2b771e23665924f24527e6b1a5db8d3c.tar.gz gcc-640f0f3e2b771e23665924f24527e6b1a5db8d3c.tar.bz2 |
Deduplicate explicitly-sized types
When make_type_from_size is called with a biased type, for an entity
that isn't explicitly biased, we may refrain from reusing the given
type because it doesn't seem to match, and then proceed to create an
exact copy of that type.
Compute earlier the biased status of the expected type, early enough
for the suitability check of the given type. Modify for_biased
instead of biased_p, so that biased_p remains with the given type's
status for the comparison.
Avoid creating unnecessary copies of types in make_type_from_size, by
caching and reusing previously-created identical types, similarly to
the caching of packable types.
While at that, fix two vaguely related issues:
- TYPE_DEBUG_TYPE's storage is shared with other sorts of references
to types, so it shouldn't be accessed unless
TYPE_CAN_HAVE_DEBUG_TYPE_P holds.
- When we choose the narrower/packed variant of a type as the main
debug info type, we fail to output its name if we fail to follow debug
type for the TYPE_NAME decl type in modified_type_die.
for gcc/ada/ChangeLog
* gcc-interface/misc.cc (gnat_get_array_descr_info): Only follow
TYPE_DEBUG_TYPE if TYPE_CAN_HAVE_DEBUG_TYPE_P.
* gcc-interface/utils.cc (sized_type_hash): New struct.
(sized_type_hasher): New struct.
(sized_type_hash_table): New variable.
(init_gnat_utils): Allocate it.
(destroy_gnat_utils): Release it.
(sized_type_hasher::equal): New.
(hash_sized_type): New.
(canonicalize_sized_type): New.
(make_type_from_size): Use it to cache packed variants. Fix
type reuse by combining biased_p and for_biased earlier. Hold
the combination in for_biased, adjusting later uses.
for gcc/ChangeLog
* dwarf2out.cc (modified_type_die): Follow name's debug type.
for gcc/testsuite/ChangeLog
* gnat.dg/bias1.adb: Count occurrences of -7.*DW_AT_GNU_bias.
Diffstat (limited to 'gcc/tree-vect-patterns.cc')
0 files changed, 0 insertions, 0 deletions