From: Scott D. <sc...@da...> - 2001-10-18 13:40:07
|
On 18 Oct 2001, Petr Slansky wrote: > Hi! > > there is an example of peep-hole optimiser in the chapter 4.1 of > sdccman(.pdf): > > replace restart { > pop %1 > push %1 } by { > ; nop > } > > I think this is a "bug", as this code can be useful and sometimes cannot = > be > removed! What can be removed is this: > > replace restart { > push %1 > pop %1 } by { > ; nop > } > > Mayby that SDCC generates a code POP %1; PUSH %1, that can be removed but= > when > I hand code in assembly language, I can use somethink like this: > > ; PARAMETR IS IN ACC, ACC is not changed after return > SUB: > PUSH ACC ; SAVE ACC > CALL SUB2 ; PARAMETR IS IN ACC, ACC is changed in subrutine > POP ACC ; !! CANNOT BE REMOVED !! > PUSH ACC ; RESTORE ACC, as it is a parametr for SUB2 > CALL SUB2 ; PARAMETR IS IN ACC, ACC is changed in subrutine > POP ACC ; RESTORE ACC > RET > > So, removing of POP ACC, PUSH ACC in such case will be harmful... Yes, you are right. This is another case where flow analysis is necessary in peep hole optimizing. Adding this though is not trivial. I've got it in the PIC port, but I'm not sure when if ever it'll make it to the other ports. Scott |