From: Joel Jones Date: Wed, 19 Jul 2017 14:10:42 +0000 (+0000) Subject: [docs] Document how to debug instruction scheduling model generation X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d5c3125bd4814470a864b7d3cc5d621df21d270f;p=llvm [docs] Document how to debug instruction scheduling model generation Describe: + Exact tablegen command and how to get it + tablegen command debug option for subtarget generation + Use of schedcover.py on the debug output to determine coverage Differential Revision: https://reviews.llvm.org/D35058 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308476 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/docs/WritingAnLLVMBackend.rst b/docs/WritingAnLLVMBackend.rst index 0fc7382f788..8cffee4b1bb 100644 --- a/docs/WritingAnLLVMBackend.rst +++ b/docs/WritingAnLLVMBackend.rst @@ -1012,6 +1012,46 @@ value can be named by an enumemation in llvm::XXX::Sched namespace generated by TableGen in XXXGenInstrInfo.inc. The name of the schedule classes are the same as provided in XXXSchedule.td plus a default NoItinerary class. +The schedule models are generated by TableGen by the SubtargetEmitter, +using the ``CodeGenSchedModels`` class. This is distinct from the itinerary +method of specifying machine resource use. The tool ``utils/schedcover.py`` +can be used to determine which instructions have been covered by the +schedule model description and which haven't. The first step is to use the +instructions below to create an output file. Then run ``schedcover.py`` on the +output file: + +.. code-block:: shell + + $ /utils/schedcover.py /lib/Target/AArch64/tblGenSubtarget.with + instruction, default, CortexA53Model, CortexA57Model, CycloneModel, ExynosM1Model, FalkorModel, KryoModel, ThunderX2T99Model, ThunderXT8XModel + ABSv16i8, WriteV, , , CyWriteV3, M1WriteNMISC1, FalkorWr_2VXVY_2cyc, KryoWrite_2cyc_XY_XY_150ln, , + ABSv1i64, WriteV, , , CyWriteV3, M1WriteNMISC1, FalkorWr_1VXVY_2cyc, KryoWrite_2cyc_XY_noRSV_67ln, , + ... + +To capture the debug output from generating a schedule model, change to the +appropriate target directory and use the following command: +command with the ``subtarget-emitter`` debug option: + +.. code-block:: shell + + $ /bin/llvm-tblgen -debug-only=subtarget-emitter -gen-subtarget \ + -I /lib/Target/ -I /include \ + -I /lib/Target /lib/Target//.td \ + -o /lib/Target//GenSubtargetInfo.inc.tmp \ + > tblGenSubtarget.dbg 2>&1 + +Where ```` is the build directory, ``src`` is the source directory, +and ```` is the name of the target. +To double check that the above command is what is needed, one can capture the +exact TableGen command from a build by using: + +.. code-block:: shell + + $ VERBOSE=1 make ... + +and search for ``llvm-tblgen`` commands in the output. + + Instruction Relation Mapping ----------------------------