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.

Reply via email to