diff options
author | Richard Guenther <rguenther@suse.de> | 2006-10-21 10:05:21 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2006-10-21 10:05:21 +0000 |
commit | 1faf92ae7981649ecfab6499ab2212a0d2d15540 (patch) | |
tree | 0c964e4831bfaf0f06d9cad8b2ccf66d3c0c1c4c /gcc | |
parent | 1b0c64fdcd254550b8af2e03db6718c6e42a7e62 (diff) | |
download | gcc-1faf92ae7981649ecfab6499ab2212a0d2d15540.zip gcc-1faf92ae7981649ecfab6499ab2212a0d2d15540.tar.gz gcc-1faf92ae7981649ecfab6499ab2212a0d2d15540.tar.bz2 |
re PR target/29512 (compile time hog / deadloop.)
2006-10-21 Richard Guenther <rguenther@suse.de>
PR target/29512
* config/i386/i386.c (classify_argument): Remove redundant
walking of the BINFOs.
(contains_128bit_aligned_vector_p): Likewise.
From-SVN: r117927
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 43 |
2 files changed, 8 insertions, 42 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fd45329..9719982 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2006-10-21 Richard Guenther <rguenther@suse.de> + + PR target/29512 + * config/i386/i386.c (classify_argument): Remove redundant + walking of the BINFOs. + (contains_128bit_aligned_vector_p): Likewise. + 2006-10-20 Mark Mitchell <mark@codesourcery.com> * BASE-VER: Set to 4.3.0. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index e4f711e..6be47cd 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -2951,32 +2951,6 @@ classify_argument (enum machine_mode mode, tree type, switch (TREE_CODE (type)) { case RECORD_TYPE: - /* For classes first merge in the field of the subclasses. */ - if (TYPE_BINFO (type)) - { - tree binfo, base_binfo; - int basenum; - - for (binfo = TYPE_BINFO (type), basenum = 0; - BINFO_BASE_ITERATE (binfo, basenum, base_binfo); basenum++) - { - int num; - int offset = tree_low_cst (BINFO_OFFSET (base_binfo), 0) * 8; - tree type = BINFO_TYPE (base_binfo); - - num = classify_argument (TYPE_MODE (type), - type, subclasses, - (offset + bit_offset) % 256); - if (!num) - return 0; - for (i = 0; i < num; i++) - { - int pos = (offset + (bit_offset % 64)) / 8 / 8; - classes[i + pos] = - merge_classes (subclasses[i], classes[i + pos]); - } - } - } /* And now merge the fields of structure. */ for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) { @@ -3044,10 +3018,6 @@ classify_argument (enum machine_mode mode, tree type, case QUAL_UNION_TYPE: /* Unions are similar to RECORD_TYPE but offset is always 0. */ - - /* Unions are not derived. */ - gcc_assert (!TYPE_BINFO (type) - || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type))); for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) { if (TREE_CODE (field) == FIELD_DECL) @@ -3735,18 +3705,7 @@ contains_128bit_aligned_vector_p (tree type) { tree field; - if (TYPE_BINFO (type)) - { - tree binfo, base_binfo; - int i; - - for (binfo = TYPE_BINFO (type), i = 0; - BINFO_BASE_ITERATE (binfo, i, base_binfo); i++) - if (contains_128bit_aligned_vector_p - (BINFO_TYPE (base_binfo))) - return true; - } - /* And now merge the fields of structure. */ + /* Walk all the structure fields. */ for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) { if (TREE_CODE (field) == FIELD_DECL |