File pr29512.patch of Package gcc41

Author: rguenth
Date: Sat Oct 21 10:05:21 2006
New Revision: 117927

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=117927
Log:
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.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/i386/i386.c


Index: gcc/config/i386/i386.c
===================================================================
*** gcc/config/i386/i386.c	(revision 122254)
--- gcc/config/i386/i386.c	(working copy)
*************** classify_argument (enum machine_mode mod
*** 2621,2652 ****
        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))
  	    {
--- 2621,2626 ----
*************** classify_argument (enum machine_mode mod
*** 2714,2723 ****
  	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)
--- 2688,2693 ----
*************** contains_128bit_aligned_vector_p (tree t
*** 3397,3414 ****
  	  {
  	    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.  */
  	    for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
  	      {
  		if (TREE_CODE (field) == FIELD_DECL
--- 3367,3373 ----
  	  {
  	    tree field;
  	    
! 	    /* Walk all the structure fields.  */
  	    for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
  	      {
  		if (TREE_CODE (field) == FIELD_DECL
openSUSE Build Service is sponsored by