re PR target/29512 (compile time hog / deadloop.)
authorRichard Guenther <rguenther@suse.de>
Sat, 21 Oct 2006 10:05:21 +0000 (10:05 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Sat, 21 Oct 2006 10:05:21 +0000 (10:05 +0000)
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

gcc/ChangeLog
gcc/config/i386/i386.c

index fd453292a7c17d3bb69c4069af11c91b7712af46..9719982f39694eed6233053cb47ad3cee446a7bb 100644 (file)
@@ -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.
index e4f711ea20bbc2630ee84755cd13e72aad08bf05..6be47cdb410243750bc937970e0aeae1e1f33241 100644 (file)
@@ -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