This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: c/3917


The following reply was made to PR c/3917; it has been noted by GNATS.

From: Jim Wilson <wilson@redhat.com>
To: gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org, gbv@ctv.es,
   gcc-bugs@gcc.gnu.org, wilson@gcc.gnu.org
Cc:  
Subject: Re: c/3917
Date: Mon, 17 Sep 2001 22:28:53 -0700

 I included the patch as a file attachment, and it didn't get included in
 the mail
 message.  Maybe that wasn't smart, so I am including it again here.
 
 
 Index: ia64.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/config/ia64/ia64.c,v
 retrieving revision 1.120
 diff -p -r1.120 ia64.c
 *** ia64.c	2001/08/23 19:27:54	1.120
 --- ia64.c	2001/09/14 02:08:41
 *************** itanium_split_issue (p, begin)
 *** 5153,5161 ****
         enum attr_type t = (t0 == TYPE_L ? TYPE_F
   			  : t0 == TYPE_X ? TYPE_I
   			  : t0);
 !       int max = (t == TYPE_B ? 3 : t == TYPE_F ? 1 : 2);
         if (type_count[t] == max)
   	return i;
         type_count[t]++;
       }
     return split;
 --- 5153,5165 ----
         enum attr_type t = (t0 == TYPE_L ? TYPE_F
   			  : t0 == TYPE_X ? TYPE_I
   			  : t0);
 ! 
 !       /* Itanium can execute up to 3 branches, 2 floating point, 2
 memory, and! 	 2 integer per cycle.  */
 !       int max = (t == TYPE_B ? 3 : 2);
         if (type_count[t] == max)
   	return i;
 + 
         type_count[t]++;
       }
     return split;
 *************** insn_matches_slot (p, itype, slot, insn)
 *** 5347,5353 ****
   	{
   	  int i;
   	  for (i = sched_data.first_slot; i < slot; i++)
 ! 	    if (p->t[i] == stype)
   	      return 0;
   	}
         if (GET_CODE (insn) == CALL_INSN)
 --- 5351,5359 ----
   	{
   	  int i;
   	  for (i = sched_data.first_slot; i < slot; i++)
 ! 	    if (p->t[i] == stype
 ! 		|| (stype == TYPE_F && p->t[i] == TYPE_L)
 ! 		|| (stype == TYPE_I && p->t[i] == TYPE_X))
   	      return 0;
   	}
         if (GET_CODE (insn) == CALL_INSN)
 *************** cycle_end_fill_slots (dump)
 *** 5487,5492 ****
 --- 5493,5504 ----
   	  sched_data.types[slot] = packet->t[slot];
   	  sched_data.insns[slot] = 0;
   	  sched_data.stopbit[slot] = 0;
 + 
 + 	  /* ??? TYPE_L instructions always fill up two slots, but we don't
 + 	     support TYPE_L nops.  */
 + 	  if (packet->t[slot] == TYPE_L)
 + 	    abort ();
 + 
   	  slot++;
   	}
         /* Do _not_ use T here.  If T == TYPE_A, then we'd risk changing
 the
 *************** cycle_end_fill_slots (dump)
 *** 5495,5500 ****
 --- 5507,5515 ----
         sched_data.insns[slot] = tmp_insns[i];
         sched_data.stopbit[slot] = 0;
         slot++;
 +       /* TYPE_L instructions always fill up two slots.  */
 +       if (t == TYPE_L)
 + 	slot++;
       }
   
     /* This isn't right - there's no need to pad out until the forced
 split;
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3917&database=gcc


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]