rtlopt loop unroller question

Toon Moene toon@moene.indiv.nluug.nl
Thu Oct 23 21:40:00 GMT 2003


Daniel Jacobowitz wrote:

> On Wed, Oct 22, 2003 at 11:38:50PM +0200, Toon Moene wrote:

>>What I do not understand is why this part of the compiler thinks that:
>>
>>	LD	Rx,<const>(Ay)
>>	ADD	2^N,Ay			! sizeof(LD access) = 2^N
>>
>>can be replaced by
>>
>>	LD	Rx,<const>(Ay)+		! Using autoincrement
>>
>>By far the most architectures that do support autoincrement/decrement do 
>>not do so when the address register is offset ...

> Well, that suggests that ARM may be a good target to try related
> benchmarks on:
> 	ldr	r3, [ip, pc]!
> is "load [ip + pc] into r3 and update ip to ip + pc".  #8 works in
> place of pc, too.

Yeah, but that isn't the problem.  The problem is that the piece of code 
that Zdenek disabled takes [pseudo-code]

	(PLUS (PLUS REG 4) 4)

and then says:

1. This is a {PRE|POST}_INCREMENT target.
2. The inner constant (4) is equal to the outer constant (4).
3. And those are of the form 2^n.

-> Therefore I won't CSE these expressions as auto-increment will make
    efficient code out of it.

BUT:

Auto-increment doesn't work here, because

	LD	Rx,4(Ry)+

is not allowed, only

	LD	Rx,(Ry)+

-- 
Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html
GNU Fortran 95: http://gcc.gnu.org/fortran/ (under construction)



More information about the Gcc mailing list