aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2006-10-21 10:05:21 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2006-10-21 10:05:21 +0000
commit1faf92ae7981649ecfab6499ab2212a0d2d15540 (patch)
tree0c964e4831bfaf0f06d9cad8b2ccf66d3c0c1c4c /gcc
parent1b0c64fdcd254550b8af2e03db6718c6e42a7e62 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c43
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