New x86 backend and my regstack changes...
Richard Henderson
rth@cygnus.com
Thu Jul 1 17:27:00 GMT 1999
On Thu, Jul 01, 1999 at 05:57:07PM +0200, Jan Hubicka wrote:
> Also I've discovered, that new backends works much better now that it
> worked last time I've tested it, so I've started to play with it. I've
> updated my two patches accepted to old backend (for changing non pairable
> negs to xors)
I've applied these bits. Note that to use reg_dead_p, the resource
code must be active. Which means using define_peephole2 rather than
define_split.
> and to avoid nonpairable forms of test instructions.
I have questions about this one.
> WIth "new backend coding style" I was able to make them better than
> originals, so hope you will like this changes. Are you interested in
> updated versions of my other i386.* patches as well?
Yes, but as independant (or at least sequential) patches, instead
of mixing up several in one patch.
> I've also found few small bugs that I've fixed (incorrect predicates
> causing compiler to crash, one forgotten tab and few others)
Applied as well. The first attachment is the result.
> I've changed the fp operations schedulings according the docs I have and
> verified they by benchmarks, that they are correct (the fp operations really
> takes 3 cycles instead of two and FADD+FMUL can be in the pipeline
> simultaenously. A loop of FMULS and FMUL+FADD+FADD takes same time, so
> FMUL really don't block whole pipe for two cycles.
Ok.
> I've did some deeper changes to integer instruction scheduling. I've
> implemented the immediate/displacement rule and showed to scheduler
> that read/modify and read/modify/write instructions are longer. Also
> I've changed the ix86_reorder function to attempt pair instruction
> with same lengths. This helps, because pentium always waits for next
> instruciton to go in before both instructions finishes.
> This helps gcc to beat Intel compiler on my tests and makes me more happy :)
Cool. I'll be applying this one shortly as well.
> I was just unable to stop myself from playing with such nice new toy.
Hehe.
> (define_insn "testsi_1"
> [(set (reg:CCNO 17)
> ! (compare:CCNO (and:SI (match_operand:SI 0 "nonimmediate_operand" "%a,rm")
> ! (match_operand:SI 1 "general_operand" "in,rin"))
> (const_int 0)))]
My question here is whether we should be preferencing ax as you are.
Do you get better (or smaller, for some reasonably large source) code
if you use "%*a,rm" instead?
Also, I didn't like the change from memory_address_length to
memory_address_info. A significantly better solution is to
commonize _all_ of the address identification code. This I
present in the second patch.
r~
More information about the Gcc-patches
mailing list