[LLVMdev] How should I update LiveIntervals after removing a use of a register?

Andrew Trick atrick at apple.com
Sat Apr 5 00:36:19 PDT 2014


On Apr 3, 2014, at 6:29 PM, Tom Stellard <tom at stellard.net> wrote:

> Hi,
> 
> I am working on a simple copy propagation pass for the R600 backend that
> propagates immediates rather than registers.  For example, I want to
> transform:
> 
> ...
> %vreg1 = V_MOV_B32 1
> %vreg2 = V_ADD_I32 %vreg1, %vreg0
> ...
> 
> into:
> 
> %vreg1 = V_MOV_B32 1 ; <- Only delete this if it is dead
> %vreg2 = V_ADD_I32 1, %vreg0
> 
> For best results, I am trying to run this pass after the
> TwoAddressInstruction pass, which means I need to preserve
> the LiveIntervals analysis.
> 
> My question is: How do I update the LiveIntervals to reflect the fact
> that V_ADD_I32 no longer uses %vreg0?

Hi Tom,

Hopefully you figured this out ;) IIRC, the safe thing to do is call removeInterval and createAndComputeVirtRegInterval for both vreg0 and vreg1.

-Andy



More information about the llvm-dev mailing list