How to find out register information at the beginning of a basic block?
Vladimir Makarov
vmakarov@redhat.com
Mon May 31 19:34:00 GMT 2010
H.J. Lu wrote:
> Hi,
>
> I am working on generating vzeroupper to avoid AVX->SSE transition
> penalty.
>
> I have generated vzeroupper on function return as well as function
> call. I am working on a backend pass to eliminate those vzeroupper
> instructions when I can prove that the upper 128bits of AVX registers
> are dead at the point where vzeroupper is added. To do that, I need
> to find out if a register is live at the beginning of a basic block as well
> as its size. I thought dataflow might give me such info. But I couldn't
> find a way to access such information. Does anyone have any pointers?
>
>
DF_LR_IN (bb) returns bitmap of livings prseudo regnos.
DF_LIVE_IN (bb) takes availability info into account.
Size of hard registers is defined by hard_regno_nregs.
It is more complicated if you need the size of pseudo. The class of
pseudo is necessary for this but even if you know this there are
complicated situations, e.g.
on x86 pseudo of FLOAT_INT_REGS in DFmode cant take 2 general registers
and 1 float reg.
> BTW, I have a PDF file to describe how vzeroupper is added. But
> the PDF attachment was rejected by the gcc mailing list. Please send
> me an email if you want it.
>
>
More information about the Gcc
mailing list