[llvm-dev] Prioritizing an SDNode for scheduling
Alex Susu via llvm-dev
llvm-dev at lists.llvm.org
Thu Nov 10 09:25:53 PST 2016
Hello, Ehsan.
Because I use INLINEASM nodes I am not able to enforce a precise order on all the
SelectionDAG nodes (since I can't add more chains or glues between some nodes - and even
if I do I read that the scheduler might be able to schedule glued nodes
non-consecutively). This has to do partly with the fact the INLINEASM "node always has two
return values: a chain and a flag result" (from
http://llvm.org/docs/doxygen/html/namespacellvm_1_1ISD.html).
Given this imprecise (partial) order of the nodes I can end up with a list of machine
instructions in the wrong order. So I need to change the order of the instructions after
instruction selection and scheduling and I do this in [Target]AsmPrinter.cpp.
(Note: about the bad interaction of scheduling on glued nodes you can read at
http://lists.llvm.org/pipermail/llvm-dev/2014-June/074046.html and
http://lists.llvm.org/pipermail/llvm-dev/2016-June/100885.html and maybe also
http://stackoverflow.com/questions/33005061/what-are-glue-and-chain-dependencies-in-an-llvm-dag)
Best regards,
Alex
On 11/10/2016 1:04 AM, Ehsan Amiri wrote:
> What is the reason that you need to change the order of instructions? What is the problem
> that you want to solve?
>
> On Wed, Nov 9, 2016 at 7:05 AM, Alex Susu via llvm-dev <llvm-dev at lists.llvm.org
> <mailto:llvm-dev at lists.llvm.org>> wrote:
>
> Hello.
> I have tried hard, but in the end I chose a different solution: I change the order
> of machine instructions by using the ASM writer classes such as
> [Target]AsmPrinter.cpp. There the code is already scheduled, in a list of instructions
> and it's very easy to move the instructions in the list.
> (Following Ehsan's advice I looked at
> http://llvm.org/docs/doxygen/html/classllvm_1_1GenericScheduler.html
> <http://llvm.org/docs/doxygen/html/classllvm_1_1GenericScheduler.html> for example,
> but I did not get any idea.)
>
> Best regards,
> Alex
>
>
> On 10/21/2016 5:32 PM, Ehsan Amiri wrote:
>
> I probably misunderstood the question. You probably want to do this in SelectionDAG.
>
> On Fri, Oct 21, 2016 at 10:29 AM, Ehsan Amiri <ehsanamiri at gmail.com
> <mailto:ehsanamiri at gmail.com>
> <mailto:ehsanamiri at gmail.com <mailto:ehsanamiri at gmail.com>>> wrote:
>
> You can do this by changing instruction scheduling heuristics. I think the more
> important question is if this correct always for all platforms.
>
> I don't know which scheduler you use. We use GenericScheduler and
> PostGenericScheduler
> before and after RA. These classes have a ::tryCandidate method which compares two
> instructions that can be legally scheduled and decide which of the two should be
> scheduled. Currently these method are target independent.
>
> The correctness question still remains open for me.
>
>
> On Thu, Oct 20, 2016 at 8:08 PM, Alex Susu via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> <mailto:llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>>> wrote:
>
> Hello.
> Is there a way to specify in the back end an (ISD::INLINEASM) SDNode to be
> scheduled first under all circumstances? I need to specify something like node
> priority to schedule the node before all other nodes in the SelectionDAG
> of the
> basic block.
> (Using chain or glue edges in order to make a node first is not a good
> idea,
> since I am doing this at instruction selection time, on individual nodes.)
>
> Thank you,
> Alex
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> <mailto:llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>
More information about the llvm-dev
mailing list