Compiling without the use of static registers in IA-64
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
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
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
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
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
> 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
> 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
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
> [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
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
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
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