]> granicus.if.org Git - llvm/commit
[MachinePipeliner] Add a way to unit-test the schedule emitter
authorJames Molloy <jmolloy@google.com>
Tue, 3 Sep 2019 08:20:31 +0000 (08:20 +0000)
committerJames Molloy <jmolloy@google.com>
Tue, 3 Sep 2019 08:20:31 +0000 (08:20 +0000)
commit5a59f3c7bbc07991c6231e3e4453e0754863384e
tree2ca0cfe0ae6841b98072f556988cf3d8f7b68d87
parent17a663f47441f0ef12f565c6600ce7aa96e45749
[MachinePipeliner] Add a way to unit-test the schedule emitter

Emitting a schedule is really hard. There are lots of corner cases to take care of; in fact, of the 60+ SWP-specific testcases in the Hexagon backend most of those are testing codegen rather than the schedule creation itself.

One issue is that to test an emission corner case we must craft an input such that the generated schedule uses that corner case; sometimes this is very hard and convolutes testcases. Other times it is impossible but we want to test it anyway.

This patch adds a simple test pass that will consume a module containing a loop and generate pipelined code from it. We use post-instr-symbols as a way to annotate instructions with the stage and cycle that we want to schedule them at.

We also provide a flag that causes the MachinePipeliner to generate these annotations instead of actually emitting code; this allows us to generate an input testcase with:

  llc < %s -stop-after=pipeliner -pipeliner-annotate-for-testing -o test.mir

And run the emission in isolation with:

  llc < test.mir -run-pass=modulo-schedule-test

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370705 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/ModuloSchedule.h
include/llvm/InitializePasses.h
lib/CodeGen/CodeGen.cpp
lib/CodeGen/MachinePipeliner.cpp
lib/CodeGen/ModuloSchedule.cpp
test/CodeGen/Hexagon/pipeliner/swp-phi-start.mir [new file with mode: 0644]