[fpc-devel] More peephole
Florian Klämpfl
florian at freepascal.org
Tue Jan 21 22:28:35 CET 2014
Am 20.01.2014 01:18, schrieb Martin:
> Just been looking at the peehole opt (i386). Other than the 2 items
> already mailed, I found that:
>
> 1) Gode as follows is sometimes generated (at various opt levels)
>
> .Ll2:
> # [36] i := 1;
> movl $1,%eax
> .Ll3:
> # [38] i := i + 1;
> movl $2,%eax
>
> I could not find any code dealing with it,
There is none I think.
> and added some. It does catch
> a noticeable amount of occurrences during build of fpc and lazarus.
Go ahead. According to me experience a good mean besides testing
compiler and lazarus to quickly catch errors in the peephole optimizer
is to compare assembler before and after.
>
> 2)
> Commented existing code (apparently since revision 1) for
> {movl [mem1],reg1 to movl [mem1],reg1
> movl [mem1],reg2 movl reg1,reg2 }
The code was commented 15 years ago :) with the comment
* split the optimizer
by Jonas. So I think such statements were caught by the old assembler
cse optimizer which is disabled now.
>
> It used
> (taicpu(p).oper[1]^.reg<>taicpu(hp1).oper[0]^^.ref^.base) and
> (taicpu(p).oper[1]^.reg<>taicpu(hp1).oper[0]^^.ref^.index) then
> but should only compare the supregister part
> I replaced that
> not(RegInOp(getsupreg(taicpu(p).oper[1]^.reg),taicpu(hp1).oper[0]^)) then
>
> uncommented, and tested.
> It does catch a big lot of occurrences.
Can you post some example code? It might be worth to think about
improving this already in at the node level.
More information about the fpc-devel
mailing list