Quoting Jan Hubicka <[EMAIL PROTECTED]>:

> If you make FPCTR/MXCSR real registers, you will need to add use to all
> the arithmetic and move pattern that would consume quite some memory and
> confuse optimizers.  I think you can get better around simply using volatile
> unspecs inserted by LCM pass  (this would limit scheduling, but I don't
> think it is that big deal)

  Ouch... I wrongly assumed that rouding bits affect only (int)->(float)
patterns - thanks for clearing this to me! (Perhaps adding a "nearest" i387_cw
attribute to arithmetic/move patterns could be used to switch back to default
rounding?)

> > Unfortunatelly, in first testcase, fldcw is not moved out of the loop,
> > because
> > fix_trunc<mode>_i387_2 is splitted after gcse-after-reload pass (Is this
> > intentional for gcse-after-reload pass?)
> 
> It is intentional for reload pass.  I guess gcse might be run after
> splitting, but not sure what the interferences are.

  I have added split_all_insns call before gcse_after_reload_main in passes.c.
To my suprise, it didn't break anything, but it also didn't get fldcw out of the
loop.

Uros.

Reply via email to