[llvm-dev] [Help]: How to update the live ranges after deleting a machine instruction?

Quentin Colombet via llvm-dev llvm-dev at lists.llvm.org
Mon Mar 25 12:22:59 PDT 2019


Hi Abhilash,

I am only half surprised that eliminateDeadDefs does not do what you want.

This method is expected to be called on live-ranges that are dead, i.e., that don’t have any connection to uses.
In a nutshell, this method removes the live-range of the definition and shrinks the live-ranges of the values used by this definition.

At this point, you have two options:
- Update the interval by hand (look at LiveIntervals::handleMove for some inspiration)
- Unmark the LiveIntervals pass as preserved in your pass and rely on it being recomputed

Cheers,
-Quentin

> On Mar 20, 2019, at 7:37 AM, abhilash bhandari via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hi,
> 
> I'm trying to delete a redundant instruction (machine Non-SSA) and I'm having trouble updating the live ranges.
> 
> Consider the example,
> bb.191 (%ir-block.1008):
> ; predecessors: %bb.183, %bb.188, %bb.190
>   successors: %bb.192(0x50000000), %bb.194(0x30000000); %bb.192(62.50%), %bb.194(37.50%)
>   ...
>   %231:fr64 = FsFLD0SD
>   JLE_1 %bb.194, implicit killed $eflags
>   JMP_1 %bb.192
> 
> bb.192 (%ir-block.1023):
> ; predecessors: %bb.191
>   successors: %bb.193(0x80000000); %bb.193(100.00%)
> 
>   ...
>   %231:fr64 = FsFLD0SD
>   ...  
> 
> 
> bb.193 (%ir-block.1024):
> ; predecessors: %bb.192, %bb.193
>   successors: %bb.194(0x04000000), %bb.193(0x7c000000); %bb.194(3.12%), %bb.193(96.88%)
> 
>   ....
>   %231:fr64 = nnan ninf nsz arcp contract afn reassoc VADDSDrr %231:fr64(tied-def 0), %1270:fr64, %1269:fr64
>   ....
> 
> 
> The definition for virtual register (%231) in bb.192 is redundant as the same instruction is present in bb.191.
> I want to delete the redundant instruction in bb.192 so that all the uses of this definition, now point to the definition in bb.191.
> How to update the Live Ranges in this case?
> The redundancy is evident only during the Register Coalescing and hence my fix includes marking the instruction in bb.192 as dead and then deleting it.
> I was expecting that the API "eliminateDeadDefs" in LiveRangeUpdater would handle updating the live ranges, but apparently something is wrong.
> Probably "eliminateDeadDefs" is not intended for this purpose.
> I was not able to find any other API which would tell me that the uses of deleted instruction (in bb.192) will now use the definition in bb.191.
> Any pointers/solutions would be really helpful.
> 
> Thanks,
> Abhilash
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190325/e1ca2b50/attachment.html>


More information about the llvm-dev mailing list