This is the mail archive of the gcc-bugs@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


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]