I just found that the current RTL code hoisting cannot optimize
REG = ...
if (cond)
{
r0 = REG;
....
}
else
{
r0 = REG;
...
}
to
REG = ...
r0 = REG;
if (cond)
{
....
}
else
{
...
}
where REG is a pseudo register and r0 is a physical register. I have
looked at the code of RTL hoisting pass. But I cannot find a simple way
to extend it to deal with this case. And the hoisting pass is only
enabled when -Os. So I'm going to implement another hoisting pass to do
this optimization. Is it a good idea? Does anyone know if there is an
existing pass which should have handled or be able to be easily adapted
to handle this case? Thanks!
--
Jie Zhang
CodeSourcery
(650) 331-3385 x735