On Mon, May 31, 2010 at 12:31 PM, Vladimir Makarov <vmaka...@redhat.com> wrote: > 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.
The new backend pass is run as the last pass and doesn't deal with pseudo registers. I have df_chain_add_problem (DF_UD_CHAIN + DF_DU_CHAIN); <<< Is this correct? df_analyze (); FOR_EACH_BB (curr_block) { bool upper_128bits_live = false; bitmap live_in = DF_LIVE_IN (curr_block); ... } df_finish_pass (false); > on x86 pseudo of FLOAT_INT_REGS in DFmode cant take 2 general registers and > 1 float reg. > Thanks. -- H.J.