[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