Compiling without the use of static registers in IA-64

2007-03-13 Thread mcrosier
All-
I was wondering if anyone knew how I could modify gcc to not use static
general purpose registers on an IA-64 machine?  Specifically, I only want
the compiler to allocate registers from the register stack engine (RSE)
and the system defined registers (e.g., stack pointer, global pointer,
etc).  I do not want to allocate general purpose registers 2-11 or 14-31. 
Any ideas?

 Thanks,
  Chad Rosier

ps. please reply to my email address as well as the mailing list as I'm
not currently subscribing to the list.  :(  Thanks!


#pragma support to guide autovectorizer

2005-07-26 Thread mcrosier
I was wondering if any addition work had been completed toward pragma
support for the autovectorization branch (see
http://gcc.gnu.org/ml/gcc-patches/2005-02/msg01560.html)?

 Thanks..

  Chad Rosier



Build DDG from multiple BBs

2005-09-20 Thread mcrosier
Does GCC have a function to build a data dependence graph (DDG) across
multiple basic blocks?  I think sched-rgn.c has something similar, but I
was hoping for a more general interface.

 Thanks,
  Chad



Types of allowed regions in sched-rgn.c

2005-10-05 Thread mcrosier
I'm interested in studying different region formation algorithms for the
interblock scheduling code.  Can someone please tell me the restrictions
on the form of these regions? (i.e., what does the Haifa scheduler
expect?) Specifically, I am interested in forming treegions (tree
regions).

If interested see this reference:
W. A. Havanki, S. Banerjia and T. M. Conte, "Treegion scheduling for
wide-issue processors," Proceedings of the 4th International Symposium on
High-Performance Computer Architecture (HPCA-4), (Las Vegas), Feb. 1998.

or

H. Zhou and T.M. Conte, "Code Size Efficiency in Global Scheduling for ILP
Processors," Proceedings of the 6th Annual Workshop on the Interaction
between Compilers and Computer Architectures, February 2002.

 Thanks,
   Chad



Basic block duplication

2005-10-12 Thread mcrosier
During the instruction scheduling pass (before reload) I'm interested in
doing some basic block duplication. Specifically, I'm working in the
sched-rgn.c code. I've looked through the tracer.c and bb-reorder.c code,
but I'm missing something!  To begin testing I just made the reorder chain
the same as the original chain:

-
  unsigned int liveness_flags;

  liveness_flags = (!HAVE_conditional_execution ? CLEANUP_UPDATE_LIFE : 0);
  cfg_layout_initialize (liveness_flags);

  /* Build the reorder chain from the original order of blocks */
  FOR_EACH_BB (bb)
if(bb->next_bb != EXIT_BLOCK_PTR)
  bb->rbi->next = bb->next_bb;

  cfg_layout_finalize ();
  cleanup_cfg (CLEANUP_EXPENSIVE | liveness_flags);
-

For very small procedures (3-5 basic blocks) I don't have a problem, but
for larger (> 5 basic block) procedures I go boom.  Can someone please
shed some light on my error?  I'm thinking it has something to do with
block reordering and liveness info?

 Thanks,
  Chad






Re: Basic block duplication

2005-10-12 Thread mcrosier
> On Wed, Oct 12, 2005 at 10:38:50AM -0400, [EMAIL PROTECTED] wrote:
>> For very small procedures (3-5 basic blocks) I don't have a problem, but
>> for larger (> 5 basic block) procedures I go boom.  Can someone please
>> shed some light on my error?
>
> You didn't say how you go boom.
>
>
> r~
>

For this test program:
-
#include 

int acker(int, int);

int
main(void)
{
int n = acker(3,6);
if (n != 509)
printf("acker(3,6) = %d != 509\n", n);
return(0);
}

int
acker(int x,int y)
{
if (x==0)
return(y+1);
else if (y==0)
return(acker(x-1,1));
else
return(acker(x-1, acker(x, y-1)));
}
-
I get this error:
test03.c: In function 'acker':
test03.c:23: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html> for instructions.

Big help huh!

>From gdb the segfault occurs at:
lists.c:51  link = XEXP (prev_link, 1);

And here's the backtrace:
#0  free_list (listp=0x600d5ed8, unused_listp=0x60019b50)
at ../../src/gcc-4.0.2/gcc/lists.c:51
#1  0x406646d0 in free_deps (deps=0x6fffb250) at
../../src/gcc-4.0.2/gcc/sched-deps.c:1481
#2  0x40673ec0 in compute_block_backward_dependences (bb=0) at
../../src/gcc-4.0.2/gcc/sched-rgn.c:2851
#3  0x40674980 in schedule_region (rgn=1) at
../../src/gcc-4.0.2/gcc/sched-rgn.c:3008
#4  0x40676110 in schedule_insns (dump_file=0x2) at
../../src/gcc-4.0.2/gcc/sched-rgn.c:3288
#5  0x4050cde0 in rest_of_handle_sched () at
../../src/gcc-4.0.2/gcc/passes.c:625


So, I'm going boom when the dependency chains are begin manipulated. For
another test case I get a similar error, but it happens at
haifa-sched.c:604

Any help/ideas would be *greatly* appreciated!

 Chad



Re: Basic block duplication

2005-10-12 Thread mcrosier
> On Wed, Oct 12, 2005 at 10:38:50AM -0400, [EMAIL PROTECTED] wrote:
>> For very small procedures (3-5 basic blocks) I don't have a problem, but
>> for larger (> 5 basic block) procedures I go boom.  Can someone please
>> shed some light on my error?
>
> You didn't say how you go boom.
>
>
> r~
>

I found the error.  I was initializing the Haifa scheduler data structures
with the original cfg info, then calling the cfg_layout_initialize which
resulted in an inconsistency that caused the errors.

 Thanks regardless...



Duplicating immediate predecessor of EXIT_BLOCK

2005-10-13 Thread mcrosier
I'm interested in duplicating the immediate predecessor basic block of the
EXIT_BLOCK, but this makes the EXIT_BLOCK have 2 predecessors which isn't
allowed.  Can someone give me some guidances as to how I can insert a
bogus block between the two to allow the duplication?

 Thanks,
  Chad Rosier



Re: Duplicating immediate predecessor of EXIT_BLOCK

2005-10-13 Thread mcrosier
> [EMAIL PROTECTED] writes:
>
>> I'm interested in duplicating the immediate predecessor basic block of
>> the
>> EXIT_BLOCK, but this makes the EXIT_BLOCK have 2 predecessors which
>> isn't
>> allowed.  Can someone give me some guidances as to how I can insert a
>> bogus block between the two to allow the duplication?
>
> Why can't EXIT_BLOCK have two predecessors?
>
> Ian
>

>From can_duplicate_block_p():
/* Duplicating fallthru block to exit would require adding a jump and
splitting the real last BB. */
e = find_edge (bb, EXIT_BLOCK_PTR);
if ( e && (e->flags & EDGE_FALLTHRU))
  return false;



creating a new branch webpage

2005-12-16 Thread mcrosier
Dear all,
I'm opening a new branch and would like to request some assistance
updating the online material.  Specifically, how do I add the branch
information to http://gcc.gnu.org/svn.html#devbranches.  Also, would it be
possible to create an associated project page (e.g.,
http://gcc.gnu.org/projects/tree-profiling.html)?

 Thanks,
  Chad Rosier



keeping branch up to date with mainline

2006-01-03 Thread mcrosier
All,
I've recently opened a new branch for treegion (tree-region) scheduling. 
I'm new at this and was just wondering if someone could tell me how to
keep my branch updated with the mainline?

 Thanks,
   Chad Rosier




emit-rtl.c: 5048 assert

2006-03-13 Thread mcrosier
All-
I'm having problems with an assert on line 5048 of emit-rtl.c

  gcc_assert (i < MAX_RECOG_OPERANDS);

The assert is in the copy_insn_1() function and is asserted when the
number of copied scratch registers exceeds MAX_RECOG_OPERANDS.  For my
particular machine (IA-64) this number is 30.  This happens when I make a
call to duplicate_block() in my code.

I've just started the debugging process and was just wondering if there
was a simple way (besides recursing through the expression) to check for
the number of scatch registers used by an instruction?

 Thanks,
   Chad