Dongrui She via llvm-dev
2016-May-09 18:30 UTC
[llvm-dev] Is it possible to avoid inserting spill/split code in certain instruction sequence in RA?
Hi all, I am working on an out-of-tree target. I am wondering if it is possible to force the register allocator (and/or spiller) to not break certain instruction sequence. For example: phys_reg = MI1 vreg1 vreg 2 = MI2 phys_reg Is there a way to tell RA/spiller not to insert COPY or spill between MI1 and MI2? I am using greedy register allocator and inline spiller. -- Regards, Dongrui -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160509/03c0b3e6/attachment.html>
Krzysztof Parzyszek via llvm-dev
2016-May-09 18:35 UTC
[llvm-dev] Is it possible to avoid inserting spill/split code in certain instruction sequence in RA?
On 5/9/2016 1:30 PM, Dongrui She via llvm-dev wrote:> > I am working on an out-of-tree target. I am wondering if it is possible > to force the register allocator (and/or spiller) to not break certain > instruction sequence. > > For example: > > phys_reg = MI1 vreg1 > vreg 2 = MI2 phys_reg > > Is there a way to tell RA/spiller not to insert COPY or spill between > MI1 and MI2?You can make a pseudo-instruction that corresponds to the combination MI1/MI2, then expand it into the actual instructions in TII::expandPostRAPseudo. -Krzysztof -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Dongrui She via llvm-dev
2016-May-12 18:58 UTC
[llvm-dev] Is it possible to avoid inserting spill/split code in certain instruction sequence in RA?
Hi, Thanks for the suggestion. For my target making pseudo instructions for this is a bit too much, because there are many possible combinations. I tried making a bundle in this situation, and it seems to work fine (with a little bit hacking). Regards, Dongrui On Mon, May 9, 2016 at 8:35 PM, Krzysztof Parzyszek via llvm-dev < llvm-dev at lists.llvm.org> wrote:> On 5/9/2016 1:30 PM, Dongrui She via llvm-dev wrote: > >> >> I am working on an out-of-tree target. I am wondering if it is possible >> to force the register allocator (and/or spiller) to not break certain >> instruction sequence. >> >> For example: >> >> phys_reg = MI1 vreg1 >> vreg 2 = MI2 phys_reg >> >> Is there a way to tell RA/spiller not to insert COPY or spill between >> MI1 and MI2? >> > > You can make a pseudo-instruction that corresponds to the combination > MI1/MI2, then expand it into the actual instructions in > TII::expandPostRAPseudo. > > -Krzysztof > > -- > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted > by The Linux Foundation > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-- Regards, Dongrui -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160512/8c685c1e/attachment.html>