Re: Code optimization only in loops

2009-07-13 Thread Jean Christophe Beyler
ideas, or anything I can do to give information or ideas, Jc On Fri, Jun 12, 2009 at 3:55 AM, Paolo Bonzini wrote: > Jean Christophe Beyler wrote: >> >> I've gone back to this problem (since I've solved another one ;-)). >> And I've moved forward a bit: >> &

Adding constraints.md to my port

2009-07-14 Thread Jean Christophe Beyler
./tm-preds.h:51:1: warning: "EXTRA_ADDRESS_CONSTRAINT" redefined Any ideas why this happens when I add a constraint to my machine description? As always, thank you very much for your time, Jean Christophe Beyler

Code optimization with GCSE

2009-07-14 Thread Jean Christophe Beyler
ficult to fix? Thanks ! Jean Christophe Beyler

Re: Adding constraints.md to my port

2009-07-14 Thread Jean Christophe Beyler
ue, Jul 14, 2009 at 3:53 PM, Ian Lance Taylor wrote: > Jean Christophe Beyler writes: > >> In file included from ./tm_p.h:5, >>                  from /home/toto/gcc-4.3.2/gcc/c-pragma.c:35: >> ./tm-preds.h:40:1: warning: "CONSTRAINT_LEN" redefined >> In fil

Re: Code optimization with GCSE

2009-07-15 Thread Jean Christophe Beyler
Ah ok, so I can see why it would not be able to perform that optimization around the loop but I changed the code to simply have this: uint64_t foo (void) { return data[0] + data[1] + data[2]; } And this generates : la r9,data la r7,data+8 ldd r6,0(r7) ldd r8,0(r9) ldd r

Re: Adding constraints.md to my port

2009-07-15 Thread Jean Christophe Beyler
I agree. I've actually pretty much finished that change and it seems to be stable. I think it will be more maintainable in the constraints.md state than it was before, Thanks again, Jc On Wed, Jul 15, 2009 at 1:30 AM, Paolo Bonzini wrote: > On 07/14/2009 10:31 PM, Jean Christophe Beyl

Re: Code optimization with GCSE

2009-07-15 Thread Jean Christophe Beyler
sn with uid = 17. deleting insn with uid = 17. ending the processing of deferred insns On Wed, Jul 15, 2009 at 12:25 PM, Adam Nemet wrote: > Jean Christophe Beyler writes: >> uint64_t foo (void) >> { >>     return data[0] + data[1] + data[2]; >> } >> >> A

Re: How to set the alignment

2009-08-04 Thread Jean Christophe Beyler
I had a similar issue on my port. I fixed it by adding a check_move before the generation of the move to look at the potential offset used. That allowed the compiler to not generate those wrong offsets depending on the mode on my port. It looks something like this : /* Check the operands of the m

GREG modifying the FIXED_REGISTERS...

2009-08-21 Thread Jean Christophe Beyler
why would it change it to r3 that was also a FIXED_REGISTER. As always, thanks for any input, Jean Christophe Beyler

Re: GREG modifying the FIXED_REGISTERS...

2009-08-22 Thread Jean Christophe Beyler
noticed that by modifying my constraints, I'm getting the generated code I was looking for. Thanks again, Jc On Fri, Aug 21, 2009 at 8:12 PM, Richard Henderson wrote: > On 08/21/2009 04:01 PM, Jean Christophe Beyler wrote: >> >>     /* If we have a 0, use r0 instead */ > > Don

Bit fields

2009-08-31 Thread Jean Christophe Beyler
:DI 3 "const_int_operand" "L")))] "check_extract (DImode, DImode, operands[2], operands[2])" "extr\\t%0,%1,%3,%2"; [(set_attr "type" "arith") (set_attr "mode" "DI") (set_attr "length" "1")]) For the moment, I haven't put anything in my expand because I don't know if anything is necessary yet. I was first looking at if GCC was generating the right code on simple examples. But I get this message: struct4.c: In function 'goo': struct4.c:32: internal compiler error: in simplify_subreg, at simplify-rtx.c:4923 Does anybody know how can I solve this issue ? Thanks again for all your help, Jean Christophe Beyler

Re: Bit fields

2009-08-31 Thread Jean Christophe Beyler
Sorry, you are correct. That line is the : gcc_assert (outermode != VOIDmode); of the simplify_subreg function. However, I've played around with it and saw that I made a mistake when writing up this question, I simplified what I had put in my MD file, and actually made a mistake. I apologize. I

Re: Bit fields

2009-08-31 Thread Jean Christophe Beyler
On Mon, Aug 31, 2009 at 4:36 PM, Richard Henderson wrote: > On 08/31/2009 01:07 PM, Jean Christophe Beyler wrote: >> >> If I replace this : >> (define_insn "extzv" >>   [(set (match_operand 0 "register_operand" "") &g

Re: Bit fields

2009-08-31 Thread Jean Christophe Beyler
On Mon, Aug 31, 2009 at 5:27 PM, Richard Henderson wrote: > On 08/31/2009 02:07 PM, Jean Christophe Beyler wrote: >> >> I am going to try this but shouldn't it be : >> >> (set (reg:QI new-scratch)) >>       (zero_extract:DI ...)) > > No. Ok, I th

Replacing certain operations with function calls

2009-09-01 Thread Jean Christophe Beyler
check the symbol_ref to see what function is called. I can then modify the call at that point. My question is: is this a good approach or is there another solution that you would use? Thanks again for your time, Jean Christophe Beyler

Re: Replacing certain operations with function calls

2009-09-01 Thread Jean Christophe Beyler
4 PM, Ian Lance Taylor wrote: > Jean Christophe Beyler writes: > >> I have been also been looking into how to generate a function call for >> certain operations. I've looked at various other targets for a similar >> problem/solution but have not seen anything. On my targe

Re: Replacing certain operations with function calls

2009-09-01 Thread Jean Christophe Beyler
this instead: mult tmp1, a, b mult tmp2, c, d mov output1, tmp1 mov output2, tmp2 call bar in which case, I know I can do what I am currently doing. Thanks again for your help and I apologize for these basic questions... Jc On Tue, Sep 1, 2009 at 2:30 PM, Jean Christophe Beyler wrote: > I h

Re: Replacing certain operations with function calls

2009-09-01 Thread Jean Christophe Beyler
o-registers and then moves them to the actual output registers. It's the next phases that will combine the two to save a move. On Tue, Sep 1, 2009 at 6:26 PM, Ian Lance Taylor wrote: > Jean Christophe Beyler writes: > >> First off: does this seem correct? > > Awkward though it

Re: Replacing certain operations with function calls

2009-09-01 Thread Jean Christophe Beyler
will be kept. This could be a solution to the second issue but I'll wait to understand what you meant first. Jc On Tue, Sep 1, 2009 at 6:35 PM, Jean Christophe Beyler wrote: > I don't think I quite understand what you're meaning. I want to use > the standard ABI, basically I want

Re: Replacing certain operations with function calls

2009-09-02 Thread Jean Christophe Beyler
> Yes. Though I do wonder why you are avoiding using the normal libcall > machinery. If all you really care about is changing the function name, then > all you need to do is modify the appropriate optab. See, for instance, > arm_init_libfuncs. I guess both could work. I had seen the TARGET_INIT

Constraints and reload

2009-09-14 Thread Jean Christophe Beyler
be correct anyway. My theory is that reload needs the o EVEN IF what it will be trying to do is illegal and it will figure that out and finally generate the right thing afterwards. Thus, why the o is necessary and not the R. Is this correct? Thanks, Jean Christophe Beyler

Re: Constraints and reload

2009-09-16 Thread Jean Christophe Beyler
(reg:DF 10 r10) It is theorically possible that my code fails for integer modes but that my code example doesn't force the compiler in the same route and thus I don't see a fail. But I don't really think so. Any ideas ? Thanks a lot, Jc On Mon, Sep 14, 2009 at 2:16 PM, Jean Chri

Re: Constraints and reload

2009-09-16 Thread Jean Christophe Beyler
> Not that I can think of.  Did you provide all of the secondary reload > stuff that you need?  Probably not. Probably not, I've been working at cleaning up what was done before. What exactly is needed to be done to define the secondary reload stuff ? > You'll do much better by rejecting these ad

Turning off unrolling to certain loops

2009-10-05 Thread Jean Christophe Beyler
Dear all, I was wondering if it was possible to turn off the unrolling to certain loops. Basically, I'd like the compiler not to consider certain loops for unrolling but fail to see how exactly I can achieve that. I've traced the unrolling code to multiple places in the code (I'm working with the

Re: Turning off unrolling to certain loops

2009-10-06 Thread Jean Christophe Beyler
Yes, I'd be happy to look into how you did it or where you were up to. I don't know what I'll be able to do but it might lead me in the right direction and allow me to finish what you started. Thanks, Jc On Tue, Oct 6, 2009 at 2:53 AM, Zdenek Dvorak wrote: > Hi, > >> I was wondering if it was p

Re: Turning off unrolling to certain loops

2009-10-08 Thread Jean Christophe Beyler
Dear all, I've been working on a loop unrolling scheme and I have a few questions: 1) Is there an interest in having a loop unrolling scheme for GCC? I'm working on the 4.3.2 version but can port it afterwards to the 4.5 version or any version you think is appropriate. 2) I was using a simple ex

Re: Turning off unrolling to certain loops

2009-10-08 Thread Jean Christophe Beyler
Hi, > such an epilogue is needed when the # of iterations is not known in the > compile time; it should be fairly easy to modify the unrolling not to > emit it when it is not necessary, Agreed, that is why I was surprised to see this in my simple example. It seems to me that the whole unrolling p

Re: Turning off unrolling to certain loops

2009-10-14 Thread Jean Christophe Beyler
Ok, I've actually gone a different route. Instead of waiting for the middle end to perform this, I've directly modified the parser stage to unroll the loop directly there. Basically, I take the parser of the for and modify how it adds the various statements. Telling it to, instead of doing in the

Re: Turning off unrolling to certain loops

2009-10-15 Thread Jean Christophe Beyler
You are entirely correct, I hadn't thought that through enough. So I backtracked and have just merged what Bingfeng Mei has done with your code and have now a corrected version of the loop unrolling. What I did was directly modified tree_unroll_loop to handle the case of a perfect unroll or not i

Re: Turning off unrolling to certain loops

2009-10-15 Thread Jean Christophe Beyler
optimization. I still have problem in handling > combination of unroll and ivdep. > > Bingfeng > >> -Original Message- >> From: fearyours...@gmail.com [mailto:fearyours...@gmail.com] >> On Behalf Of Jean Christophe Beyler >> Sent: 15 October 2009 16:3

Re: Turning off unrolling to certain loops

2009-10-16 Thread Jean Christophe Beyler
Original Message- >> From: fearyours...@gmail.com [mailto:fearyours...@gmail.com] >> On Behalf Of Jean Christophe Beyler >> Sent: 15 October 2009 17:27 >> To: Bingfeng Mei >> Cc: Zdenek Dvorak; gcc@gcc.gnu.org >> Subject: Re: Turning off unrolling to certain

Re: Why does GCC Preprocessor NOT support such macro?

2009-10-23 Thread Jean Christophe Beyler
It works no problem for me. This is what I get: $ gcc -Wall -o "Test.exe" "macro.cpp" -lstdc++ -s -v Using built-in specs. Target: i686-pc-linux-gnu Configured with: ./configure --enable-compiler=c --enable-language=c --prefix=/home/beyler/tmp/gcc-4.3.2/bin Thread model: posix gcc version 4.3.2 (

Re: Preserving the argument spills for GDB

2009-11-03 Thread Jean Christophe Beyler
ts correct. Thanks for any input, Jc On Tue, Nov 3, 2009 at 2:01 PM, Jean Christophe Beyler wrote: > Dear all, > > I've been working on handling the Debugging information for the use of > GDB on my port. Though I definitely know that, when compiling in -O3, > some information

Preserving the argument spills for GDB

2009-11-03 Thread Jean Christophe Beyler
Dear all, I've been working on handling the Debugging information for the use of GDB on my port. Though I definitely know that, when compiling in -O3, some information is lost and the debugger can't always have all the information, I'd like to at least keep the values of the arguments when doing a

Re: Preserving the argument spills for GDB

2009-11-04 Thread Jean Christophe Beyler
ns). It seems that, in the O0 case, the Dwarf information is automatically propagated to say "The input register is now here", but when I do it in O3, I'm issuing the information in the same way. What am I exactly missing? Any ideas why GDB would not have enough information in this case? Thanks, Jean Christophe Beyler

Re: Preserving the argument spills for GDB

2009-11-09 Thread Jean Christophe Beyler
case that there is no function call or no alloca. But I have a case where there is a function call and it is still removed. Any ideas ? Thank you very much for your input, Jc On Wed, Nov 4, 2009 at 11:45 AM, Ian Lance Taylor wrote: > Jean Christophe Beyler writes: > >>> You can

Re: Preserving the argument spills for GDB

2009-11-09 Thread Jean Christophe Beyler
solution but it seems to be that, because I restore it in the epilogue, it considers the move as being useless since it doesn't realize it is needed by subsequent function calls in the function code. Thanks for any input, Jc On Mon, Nov 9, 2009 at 10:40 AM, Ian Lance Taylor wrote: > Jean Ch

Re: Preserving the argument spills for GDB

2009-11-12 Thread Jean Christophe Beyler
Dear all, As I continue to work on this I have found something that is surprising. I wrote this code : int foo (int argc, int argv) { bar (argv, argc); return 0; } On my architecture, this is transformed into the following assembly code: mov r6 = InputReg1 mov InputReg1 = InputReg2 mov I

Re: Preserving the argument spills for GDB

2009-11-12 Thread Jean Christophe Beyler
Of course: mov r6 = InputReg1 mov InputReg1 = InputReg2 mov InputReg2 = tmp should read: mov r6 = InputReg1 mov InputReg1 = InputReg2 mov InputReg2 = r6 Sorry about that. Jc On Thu, Nov 12, 2009 at 12:07 PM, Jean Christophe Beyler wrote: > Dear all, > > As I continue to work on th

Bitfields problem

2009-12-11 Thread Jean Christophe Beyler
why I get all these instructions. I know that because it's signed, it is more complicated but I would prefer to get an unsigned extract and the a shift left/shift right. Thus 3 instructions. Right now, I get so many more instructions that represent what I showed from the final cleanup. Any reason for all these instructions or ideas on how to get to my 3 instructions ? Thank you for your help and time, Jean Christophe Beyler

Re: Bitfields problem

2009-12-11 Thread Jean Christophe Beyler
rescanning insn with uid = 16. deleting insn with uid = 16. ending the processing of deferred insns ;; Combiner totals: 16 attempts, 16 substitutions (2 requiring new space), ;; 6 successes. On Fri, Dec 11, 2009 at 11:57 AM, Jean Christophe Beyler wrote: > As I continue my work on the machine descri

New RTL instruction for my port

2009-12-14 Thread Jean Christophe Beyler
Dear all, I wanted to add an instruction via a builtin to allow users to take advantage of some special instructions that are on my architecture. However, the latency of the instruction is not 1 so I'll also need to handle it in the rtx_costs function. I had first tried to explain with the curre

Re: New RTL instruction for my port

2009-12-14 Thread Jean Christophe Beyler
On Mon, Dec 14, 2009 at 5:04 PM, Daniel Jacobowitz wrote: > On Mon, Dec 14, 2009 at 04:46:59PM -0500, Jean Christophe Beyler wrote: >> My current solution: >> >> - Define a new rtl in rtl.def > > Just use an unspec or unspec_volatile.  You don't need a new RTL >

Re: New RTL instruction for my port

2009-12-15 Thread Jean Christophe Beyler
instruction "z = ...;", then the compiler will optimize out my first builtin call. Thanks for your help and input, Jc On Mon, Dec 14, 2009 at 6:10 PM, Daniel Jacobowitz wrote: > On Mon, Dec 14, 2009 at 05:52:50PM -0500, Jean Christophe Beyler wrote: >> I thought of that but th

Re: New RTL instruction for my port

2009-12-15 Thread Jean Christophe Beyler
:08:02AM -0500, Jean Christophe Beyler wrote: >> You are correct. So I should be changing things in the adjust_cost >> function instead. >> >> I was also wondering, these instructions modify an internal register >> that has been set as a fixed register. However, the c

GMP and GCC 4.3.2

2009-12-16 Thread Jean Christophe Beyler
Dear all, Found on http://gmplib.org/. "N.B. gcc 4.3.2 miscompiles GMP 4.3.x on 64-bit machines. The problem is specific to that very release; specifically gcc 4.3.1 and 4.3.3 seem to work fine." Since porting to a newer version is difficult for me right now, I was wondering if anybody worked on

Re: GMP and GCC 4.3.2

2009-12-16 Thread Jean Christophe Beyler
Guenther wrote: > On Wed, Dec 16, 2009 at 7:50 PM, Jean Christophe Beyler > wrote: >> Dear all, >> >> Found on http://gmplib.org/. >> >> "N.B. gcc 4.3.2 miscompiles GMP 4.3.x on 64-bit machines. The problem >> is specific to that very release; specifi

Re: GMP and GCC 4.3.2

2009-12-17 Thread Jean Christophe Beyler
Actually, I just finished updating my 4.3.2 to 4.3.3 and tested it and I still have the same issue. This seems to be a problem more than "just" 4.3.2. Here is the test program: #include #include int main() { mpz_t a,b; mpz_init_set_str(a, "100", 10); // program works with 10^9,

Re: GMP and GCC 4.3.2

2009-12-18 Thread Jean Christophe Beyler
myarch64 is my port. Then perhaps this is an back-end problem on my port. I'll try to determine this today and keep you posted. Jc On Thu, Dec 17, 2009 at 9:29 PM, Jie Zhang wrote: > On 12/18/2009 06:27 AM, Jean Christophe Beyler wrote: >> >> Actually, I just finished

Re: New RTL instruction for my port

2010-01-07 Thread Jean Christophe Beyler
ue, Dec 15, 2009 at 10:48 AM, Jean Christophe Beyler wrote: > EPILOGUE_USES does not seem to work, the code still gets optimized out. > > However, unspec_volatile works but then, as you have said, the > compiler doesn't optimize out things that it then could. > > I hav

Re: New RTL instruction for my port

2010-01-07 Thread Jean Christophe Beyler
I am almost convinced I had tried that already but apparently not. This seems to have fixed my problem, thank you :-) Jc On Thu, Jan 7, 2010 at 4:14 PM, Richard Henderson wrote: > On 01/07/2010 12:58 PM, Jean Christophe Beyler wrote: >> >> Dear all, >> >> I've go

Changing the ABI

2010-01-18 Thread Jean Christophe Beyler
have to set back the old zones (3) and (4). Hopefully this email made some sense and some one will have an idea or a direction I can look into, Thanks again for all your time, Jean Christophe Beyler

Re: Changing the ABI

2010-01-20 Thread Jean Christophe Beyler
help, Jean Christophe Beyler On Tue, Jan 19, 2010 at 9:04 AM, Mikael Pettersson wrote: > On Mon, 18 Jan 2010 13:55:16 -0500, Jean Christophe Beyler wrote: >>I have a current issue on my port. Basically the stack is defined as follows : >> >>1) CALL_USED save area >&g

Zero extractions and zero extends

2010-02-09 Thread Jean Christophe Beyler
Jean Christophe Beyler

Definition of an instruction

2010-03-04 Thread Jean Christophe Beyler
lues and that the result was operand 0. I added a clobber to the accumulator to say: it's been changed. However, now if I have two myInst, the first gets optimized out... I therefore need to define this instruction differently, any ideas ? Thanks a lot, Jean Christophe Beyler

Re: Definition of an instruction

2010-03-04 Thread Jean Christophe Beyler
Yeah that's what I had tried first but I get : genextract: Internal error: abort in VEC_safe_set_locstr And I can't seem to get rid of that error. Any idea why this happens? Jc On Thu, Mar 4, 2010 at 6:28 PM, Andrew Pinski wrote: > Maybe try this: > > (define_insn "myInst" >  [ >  (set (match_

Re: Definition of an instruction

2010-03-05 Thread Jean Christophe Beyler
> On Thu, Mar 4, 2010 at 3:38 PM, Jean Christophe Beyler > wrote: >> Yeah that's what I had tried first but I get : >> >> genextract: Internal error: abort in VEC_safe_set_locstr >> >> And I can't seem to get rid of that error. >> >> Any id

Passing options down to assembler and linker

2010-04-23 Thread Jean Christophe Beyler
Dear all, I've been working on a side port for an architectural variant and therefore there are a few differences in the assembler and linker to be handled. I know we can pass -Wl,option, -Wa,option from gcc down to as and ld however if I have to write : gcc -mArch2 -Wl,--arch2 -Wa,--arch2 hello

Re: Passing options down to assembler and linker

2010-04-23 Thread Jean Christophe Beyler
That's exactly what I needed, thanks a lot :-) Worked like a charm ! Jc On Fri, Apr 23, 2010 at 2:09 PM, Nathan Froyd wrote: > On Fri, Apr 23, 2010 at 01:55:48PM -0400, Jean Christophe Beyler wrote: >> I know we can pass -Wl,option, -Wa,option from gcc down to as and ld >>

Constant folding and Constant propagation

2009-02-05 Thread Jean Christophe Beyler
eally done in that respect. Thanks for your help, Jean Christophe Beyler

Re: Constant folding and Constant propagation

2009-02-05 Thread Jean Christophe Beyler
,r9,0x5 #Loading the second immediate addi r11,r9,0xf #Loading the third immediate So my question is, can I explain this in the machine description alone and if so, does anybody know where? Thanks again, Jean Christophe Beyler On Thu, Feb 5, 2009 at 4:02 PM, Jo

Re: Constant folding and Constant propagation

2009-02-06 Thread Jean Christophe Beyler
n. Since I don't seem to get a choice between a set 0xcb03 and a (plus 0xcafe 5), how can I tell the compiler the different costs? Jc On Thu, Feb 5, 2009 at 4:10 PM, Ian Lance Taylor wrote: > Jean Christophe Beyler writes: > >> I'm currently working on removing the constant

Re: Constant folding and Constant propagation

2009-02-07 Thread Jean Christophe Beyler
Ok, thanks for all this information and if you can dig that up it would be nice too. I'll start looking at that patch and PR33699 to see if I can adapt them to my needs. Any reason why you wouldn't recommend it? I will keep you posted of anything I do for latter reference, Jean Christo

Machine description question

2009-02-07 Thread Jean Christophe Beyler
Dear all, I have a question about the way the machine description works and how it affects the different passes of the compiler. I was reading the GNU Compiler Collection Internals and I found this part (in section 14.8.1): (define_insn "" [(set (match_operand:SI 0 "general_operand" "

Re: Machine description question

2009-02-09 Thread Jean Christophe Beyler
Ok, I understand now. Thank you very much for your explanations, Jean Christophe Beyler On Sat, Feb 7, 2009 at 5:13 PM, Michael Meissner wrote: > On Sat, Feb 07, 2009 at 03:54:51PM -0500, Jean Christophe Beyler wrote: >> Dear all, >> >> I have a question about the way th

Fwd: Constant folding and Constant propagation

2009-02-25 Thread Jean Christophe Beyler
Dear all, I was working on the machine description so I was postponing a bit this problem but now I have a bit more time on my hands to handle it. I'm starting to look at the various links and code you've provided me and will keep you posted if I make any headway or not ;-). > For the GCC port I

No address_cost calls when inlining ?

2009-03-09 Thread Jean Christophe Beyler
es not seem to be called anymore. Any ideas why ? Thanks in advance, Jean Christophe Beyler

Re: No address_cost calls when inlining ?

2009-03-10 Thread Jean Christophe Beyler
Ahhh ok, so basically I've hit the same wall as for the constant folding and constant propagation! Oh well, I will see how important it is for me to try to fix it in this case. Thanks for the answer, Jc On Tue, Mar 10, 2009 at 4:18 AM, Paolo Bonzini wrote: > >> I want the version of foo because

Re: Constant folding and Constant propagation

2009-03-13 Thread Jean Christophe Beyler
I set up your patch and I get an internal error on this test program: extern void foo(int, int); extern int bar(void); int startup; void foobar() { int i; while(1) { if (bar()) { foo(0,0); } } } Here's the error: /home/beyler/cyclops64/src/tnt/kernel/process_manager/testn

Re: Constant folding and Constant propagation

2009-03-14 Thread Jean Christophe Beyler
If I replace your lines: if ((GET_CODE (sets[i].src_elt->exp) == CONST_INT)) insert_const_anchors (dest, sets[i].src_elt, GET_MODE (dest)); with: if ((GET_CODE (sets[i].src_elt->exp) == CONST_INT) && (INTVAL (sets[i].src_elt->exp) != 0)) insert_const_anchors (dest, sets[i

Difference between local/global/parameter array handling

2009-03-16 Thread Jean Christophe Beyler
Dear all, I've been working on explaining to GCC the cost of loads/stores on my target and I arrived to this problem. Consider the following code: uint64_t sum = 0; for(i=0; i

Variable length arrays : aligned on stack

2009-03-23 Thread Jean Christophe Beyler
t len) { long arr[512]; ... } Simply moves the stack pointer 512*sizeof(long) bytes down. I suppose this is a Machine Description problem but was wondering if you had any tips on where to look? Thanks for your help, Jean Christophe Beyler

Inefficient loads in certain loops depending on data declaration

2009-04-21 Thread Jean Christophe Beyler
Dear all, As I work through handling load multiples and store multiples for my target architecture, I came in front of this scenario: int foo(int data[10240]) { int w0, w1; int part = 0,i ; for (i=0; i<1;i+=2){ w0 = data[i]; w1 = data[i+1]; part += w0 + w1

Re: Reserving a number of consecutive registers

2009-04-21 Thread Jean Christophe Beyler
Ok, I've been working at this and have actually made a bit of progress. - I now have a framework that finds the group of loads (let's assume they stay together). - With the DF framework, I'm able to figure out which registers are being used and which are free to be used. - I've pretty much got i

Machine description

2009-04-22 Thread Jean Christophe Beyler
Dear all, I've been working on the Machine description of my target and was wondering if you could help me out here. I've been trying to force GCC out of it's habit of generating this code : (insn 28 8 10 2 glob.c:13 (set (reg:DI 9 r9) (mem/s:DI (symbol_ref:DI ("data") ) [4 data+0 S8 A64]

Re: Machine description

2009-04-23 Thread Jean Christophe Beyler
x_cost but that's my next step. Any comments, ideas? Jc On Wed, Apr 22, 2009 at 4:08 PM, Ian Lance Taylor wrote: > Jean Christophe Beyler writes: > >> I've been working on the Machine description of my target and was >> wondering if you could help me out here. >> >

Re: Reserving a number of consecutive registers

2009-04-30 Thread Jean Christophe Beyler
I don't see how to do to handle this case neatly, any ideas? Thanks in advance, Jc On Tue, Apr 21, 2009 at 5:23 PM, Jean Christophe Beyler wrote: > Ok, I've been working at this and have actually made a bit of progress. > > - I now have a framework that finds the group of loads

Re: Reserving a number of consecutive registers

2009-05-01 Thread Jean Christophe Beyler
Yes, I have done that and now am looking to limit those numbers. For example, I don't copy back the ones that are not live-out registers. It works well but I am have an issue when recompiling the whole compiler. I've simplified this to this, if in my reorg function, I do only this : FOR_EACH

Re: Reserving a number of consecutive registers

2009-05-01 Thread Jean Christophe Beyler
33 PM, Jean Christophe Beyler wrote: > Yes, I have done that and now am looking to limit those numbers. For > example, I don't copy back the ones that are not live-out registers. > It works well but I am have an issue when recompiling the whole > compiler. > > I've simpli

Code optimization only in loops

2009-05-07 Thread Jean Christophe Beyler
Dear all, I come back to you with another weirdness due to bad code generation on my target architecture. I have a very simplified (for the moment) rtx_costs and my address_cost is inspired by the i386 version. However, I actually patched in the whole i386_rtx_cost function, constraints, predicate

Re: Code optimization only in loops

2009-05-13 Thread Jean Christophe Beyler
Ok, for the i386 port, I use uint32_t instead of uint64_t because otherwise the assembly code generated is a bit complicated (I'm on a 32 bit machine). The tree dump from final_cleanup are the same for the goo function: goo (i) { : return data[i + 13] + data[i]; } However, the first RTL dump

Re: internal compiler error: in reload_combine_note_use, at postreload.c:1093

2009-05-14 Thread Jean Christophe Beyler
Except if I'm mistaken, force_reg will generally call gen_reg_rtx which does check for those two flags internally (via can_create_pseudo_p). So you should not have that error in this case. I suggest you use a debug_rtx on the operand that's a problem, and first check if gen_reg_rtx is used to crea

Re: Expanding a load instruction

2009-06-09 Thread Jean Christophe Beyler
an emit my first move and then the second but for some reason, the compiler reassembles them back together. Any ideas why I am getting that? Am I doing anything wrong? After I expand this, I use the DONE macro... Thanks, Jc On Fri, Jun 5, 2009 at 1:17 PM, Jean Christophe Beyler wrote: > It&#

Re: Expanding a load instruction

2009-06-10 Thread Jean Christophe Beyler
into this, Jc On Tue, Jun 9, 2009 at 6:36 PM, Dave Korn wrote: > Jean Christophe Beyler wrote: >> Dear all, >> >> I've moved forward on this issue. Again, the problem is not that the >> data is not aligned but that the compiler tries to generate this >> instructi

Re: Expanding a load instruction

2009-06-10 Thread Jean Christophe Beyler
latest version of GCC. Thanks again, Jc On Wed, Jun 10, 2009 at 10:29 AM, Dave Korn wrote: > Jean Christophe Beyler wrote: >> I'll be looking into this but I thought that GO_IF_LEGITIMATE_ADDRESS >> is for branches ? > >  No, absolutely not.  GILA is a general filter tha

Re: Expanding a load instruction

2009-06-11 Thread Jean Christophe Beyler
Thanks, I've pretty much finished this part of the implementation and it seems to be working well. Thank you all very much for your help, Jc On Wed, Jun 10, 2009 at 11:12 AM, Dave Korn wrote: > Jean Christophe Beyler wrote: > >> It seems that I should do the same as them n

Re: Code optimization only in loops

2009-06-11 Thread Jean Christophe Beyler
again, Jean Christophe On Wed, May 13, 2009 at 4:58 PM, Jean Christophe Beyler wrote: > Ok, for the i386 port, I use uint32_t instead of uint64_t because > otherwise the assembly code generated is a bit complicated (I'm on a > 32 bit machine). > > The tree dump from final_c

Immediates propagated wrongly in stores

2009-07-01 Thread Jean Christophe Beyler
Jean Christophe Beyler

Re: Immediates propagated wrongly in stores

2009-07-01 Thread Jean Christophe Beyler
: unrecognizable insn: (insn 41 40 42 3 st4.c:22 (set (reg/f:DI 119) (symbol_ref:DI ("data") )) -1 (nil)) For me this doesn't make sense since in this set, the predicate should check the first register. The test of the if should be true, therefore matching the second operan

Re: Immediates propagated wrongly in stores

2009-07-01 Thread Jean Christophe Beyler
turn 0; } bool my_move_ok(rtx op0, rtx op1) { if (MEM_P (op0)) return register_operand (op1, VOIDmode); return true; } This seems to do what I want, now I'm going to clean up all those constraints and see if they are compatible and work on from there. Thanks for your help,

Re: Immediates propagated wrongly in stores

2009-07-06 Thread Jean Christophe Beyler
put that test. On Wed, Jul 1, 2009 at 5:33 PM, Richard Henderson wrote: > On 07/01/2009 02:02 PM, Jean Christophe Beyler wrote: >> >>             ((reload_in_progress | reload_completed) == 0&& >>             MEM_P (op0)&&  !REG_P (op1))) >>     { >

Inserting function calls

2006-08-30 Thread jean-christophe . beyler
Dear all, I have been trying to insert function calls during a new pass in the compiler but it does not seem to like my way of doing it. The basic idea is to insert a function call before any load in the program (later on I'll be selecting a few loads but for now I just want to do it for

Re: Inserting function calls

2006-08-30 Thread jean-christophe . beyler
Browse through omp-low.c. In particular create_omp_child_function I understand the beginning of the function with its declaration of the function but I have a question about these lines : /* Allocate memory for the function structure. The call to allocate_struct_function clobbers CFUN

Re: Inserting function calls

2006-08-30 Thread jean-christophe . beyler
In create_omp_child_function, an identifier for the new function is created. We then create a call to it using build_function_call_expr in expand_parallel_call. Ok so that's what I saw, is this call necessary for what I'd need : decl = lang_hooks.decls.pushdecl (decl); Then simplifying the

Re: Inserting function calls

2006-08-31 Thread jean-christophe . beyler
what you do seems basically OK to me. The problem is that you also need to fix the ssa form for the virtual operands of the added calls (i.e., you must call mark_new_vars_to_rename for each of the calls, and update_ssa once at the end of tree_handle_loop). Zdenek Ok, by inserting the mark_new

Trans.: Re: Inserting function calls

2006-08-31 Thread jean-christophe . beyler
Dear all, Any idea why ? I've looked around in the code to see how they parse the data dependance tree but I don't see a difference. Interesting. So what statements *are* in the list of data dependences if not these. Ok apparently it's more a problem of optimization levels in O3 the compiler

Re: Inserting function calls

2006-08-31 Thread jean-christophe . beyler
is there the data reference for it in the datarefs array? Zdenek Using this code after the construction of the data dependance : datarefs = VEC_alloc (data_reference_p, heap, 10); dependence_relations = VEC_alloc (ddr_p, heap, 10 * 10); compute_data_dependences_for_loop (lo

Re: Inserting function calls

2006-09-01 Thread jean-christophe . beyler
First of all, thanx all for all your help, I'm finally seeing the light at the end of this long tunnel ;-) one possibility is that the t[i-1] load got moved out of the loop by PRE; could you check that the load is still present in the loop? Zdenek You're right, the load was moved to the out