Re: Could not identify that register is clobbered already
Georg-Johann Lay <[email protected]>
| Newsgroups | gmane.comp.hardware.avr.gcc |
|---|---|
| Message-ID | <[email protected]> |
I answered to this on the GCC list:
http://gcc.gnu.org/ml/gcc/2013-02/msg00129.html
Please f'up there.
S, Pitchumani a écrit:
> Hi,
>
> I was analyzing an issue for avr target (gcc-4.7.2).
>
> Issue is that already clobbered register is used after the transformation
> in post reload pass.
>
> insns after reload pass:
>
> set (reg:HI r24
> (const:HI (plus:HI (symbol_ref:HI ("array"))
> (const_int 4))
> ))
> ...
> parallel set (reg:HI r14
> (and:HI (reg:HI r14)
> (const_int 3)))
> clobber:QI r25
> ...
> set (reg:HI r28
> (const:HI (plus:HI (symbol_ref:HI ("array"))
> (const_int 4))
> ))
>
> After post reload pass, insn-3 transformed as follows:
>
> set (reg:HI r28
> reg:HI r24)
>
> this transformation happened in reload_cse_move2add function.
>
> Since r25 is clobbered in insn-2, above transformation (r28/29 <= r24/25)
> become incorrect.
>
> Function 'move2add_use_add3_insn' sets only r24 info for insn-1 instead
> of setting info for both r24/25. Function 'validate_change' checks only r24
> info for insn-3 transformation.
> is it possible to identify clobbered register and avoid transformation?
>
> Regards,
> Pitchumani