Re: subreg pass

2007-03-06 Thread Andi Kleen
Roman Zippel <[EMAIL PROTECTED]> writes: > The new subreg lowering pass seems to generate a bit worse code on m68k > than before, let's take simple example: FWIW I see the opposite on i386: I have a function that strangely ran slower with -fomit-frame-pointer than without on 4.1. With a 4.3 s

Re: subreg pass

2007-03-06 Thread Roman Zippel
On Tue, 6 Mar 2007, Roman Zippel wrote: > Reload has now to match (reg %d0) and (reg 38) above in insn 32 and after > pseudo register replacement it looks like this: > > (insn 32 10 30 2 (parallel [ > (set (strict_low_part (reg:SI 1 %d1 [orig:38+4 ] [38])) > (mult:S

Re: subreg pass

2007-03-06 Thread Roman Zippel
only the umulsidi3 pattern are relevant for this) and I think found a bug somwhere, although I'm not sure whether the subreg pass causes it or only trigggers it (it goes away with -fno-split-wide-types). I removed the '%' from the constraint to test proper reloads (which may

Re: subreg pass

2007-03-05 Thread Richard Henderson
On Mon, Mar 05, 2007 at 02:29:05PM +0100, Roman Zippel wrote: > challenges, as m68k is still a cc0 target and with instructions like > addx.l above, so far I avoided splitting these at all. It would be possible to add an X register to model that one bit from the flags, since X is generally preser

Re: subreg pass

2007-03-05 Thread Roman Zippel
Hi, On Mon, 5 Mar 2007, Ian Lance Taylor wrote: > > whereas with -fno-split-wide-types it generates this: > > > > move.l 16(%sp),%d0 > > move.l 20(%sp),%d1 > > move.l 8(%sp),%d2 > > add.l 12(%sp),%d1 > > addx.l %d2,%d0 > > > > How can I get rid of these e

Re: subreg pass

2007-03-05 Thread Ian Lance Taylor
Roman Zippel <[EMAIL PROTECTED]> writes: > The new subreg lowering pass seems to generate a bit worse code on m68k > than before, let's take simple example: > > unsigned long long f(unsigned long long a, unsigned long long b) > { > return a + b; > } > > where currently gcc generates code

subreg pass

2007-03-05 Thread Roman Zippel
Hi, The new subreg lowering pass seems to generate a bit worse code on m68k than before, let's take simple example: unsigned long long f(unsigned long long a, unsigned long long b) { return a + b; } where currently gcc generates code like this: move.l 16(%sp),%d1 move.l