regmove pass with x87 sincos() instruction

Uros Bizjak uros@kss-loka.si
Tue Apr 6 08:19:00 GMT 2004


Jim Wilson wrote:

>> I would like to ask somebody with more knowledge in this area, if 
>> there is a way to make some kind of peephole2-like optimization 
>> _before_ regmove pass, which would detect unused register and in this 
>> case convert sincos() instruction back to sin() instruction before 
>> regmove starts to insert move instructions.
>
>
> The problem seems to be that sin uses the 'u' constraint, and thus 
> will always get the second FP register, even if the cos result is not 
> used, which is not what we want.
>
> I don't see an easy solution to this.  Maybe it can be worked around 
> with some hackery in reg-stack.c?
>
> It doesn't seem reasonable to add an extra optimization pass before 
> regpass to handle this special case.

I agree. I have solved this problem with define_split instead of 
define_peephole2, with define_split guarded with (!reload_completed && 
!reload_in_progress). By using define_split, sincosdf3 is changed back 
to *sindf2 in lreg pass. Sincos intruction is handled with a little 
hackery in reg-stack.c, and everything works as expected now. Please, 
see complete patch in 
http://gcc.gnu.org/ml/gcc-patches/2004-04/msg00239.html .

Thanks,
Uros.



More information about the Gcc mailing list