[fpc-devel] Question about internal compiler functions

J. Gareth Moreton gareth at moreton-family.com
Sun Aug 23 13:36:25 CEST 2020


That saved me so much work!  I found the incorrect code - thanks Jonas!

Trunk:

...
	mov	x0,x22
	bl	SYSTEM_$$_NEWUNICODESTRING$INT64$$POINTER
	mov	x23,x0
	lsl	x2,x22,#1
	mov	x1,x23
	cbnz	x20,.Lj3808
	adrp	x20,:got:FPC_EMPTYCHAR
	ldr	x20,[x20, :got_lo12:FPC_EMPTYCHAR]
.Lj3808:
	add	x0,x20,x21,lsl #1
	bl	SYSTEM_$$_MOVE$formal$formal$INT64
	stur	x22,[x23, #-8]
...

Faulty optimisation:

...
	mov	x0,x22
	bl	SYSTEM_$$_NEWUNICODESTRING$INT64$$POINTER
        // mov x23,0 gets removed because the optimiser thinks x23 is no longer in use
	lsl	x2,x22,#1
	mov	x1,x0 (*) <-- x0 changed to x23
	cbnz	x20,.Lj3808
	adrp	x20,:got:FPC_EMPTYCHAR
	ldr	x20,[x20, :got_lo12:FPC_EMPTYCHAR]
.Lj3808:
	add	x0,x20,x21,lsl #1
	bl	SYSTEM_$$_MOVE$formal$formal$INT64
	stur	x22,[x23, #-8]  <-- x23 is still in use (ERROR!)
...

Now I just have to work out why the peephole optimiser thinks x23 is no longer in use after it 
changes (*), and why it hasn't caused a more obvious failure elsewhere.

Gareth aka. Kit


On Sun 23/08/20 12:09 , "J. Gareth Moreton via fpc-devel" fpc-devel at lists.freepascal.org sent:
> Thanks Jonas - I'll see if I can pinpoint it now.
> 
> 
> 
> Gareth aka. Kit
> 
> 
> 
> On Sun 23/08/20 13:09 , Jonas Maebe via fpc-devel fpc-devel at lists.freepascal.org sent:
> > On 23/08/2020 12:48, J. Gareth Moreton via
> fpc-devel wrote:
> > 
> 
> > > I've found a pretty big optimisation that
> 
> > benefits most ARM platforms, including AArch64,
> but I'm getting a few
> > random test failures.  My investigations suggest
> that functions like
> > "fpc_chararray_to_unicodestr" and 
> 
> > > other string conversion routines are not
> being
> > optimised properly (they're raising Runtime
> Error 216, which generally
> > implies a fatal exception).  For aarch64 in
> particular, which unit contains
> > the source code or 
> 
> > > implementation for these functions?
> 
> > 
> 
> > 
> 
> > 
> 
> > They're in the system unit (for all platforms).
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > Jonas
> 
> > 
> 
> > _______________________________________________
> 
> > 
> 
> > fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> 
> 
> _______________________________________________
> 
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
> 
> 
> 
> 
> 



More information about the fpc-devel mailing list