[PATCH] D69645: [globalisel][docs] Add a section about debugging with the block extractor

Daniel Sanders via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 30 14:49:37 PDT 2019


dsanders created this revision.
dsanders added reviewers: rovka, volkan, arsenm.
Herald added subscribers: Petar.Avramovic, wdng.
Herald added a project: LLVM.

Depends on D69644 <https://reviews.llvm.org/D69644>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D69645

Files:
  llvm/docs/GlobalISel/Pipeline.rst


Index: llvm/docs/GlobalISel/Pipeline.rst
===================================================================
--- llvm/docs/GlobalISel/Pipeline.rst
+++ llvm/docs/GlobalISel/Pipeline.rst
@@ -135,3 +135,53 @@
 and perform a single step of the algorithm and check the result. The MIR and
 FileCheck directives can be embedded using strings so you still have access to
 the convenience available in llvm-lit.
+
+Debugging
+---------
+
+One debugging technique that's proven particularly valuable is to use the
+BlockExtractor to extract basic blocks into new functions. This can be used
+to track down correctness bugs and can also be used to track down performance
+regressions.
+
+The command to do this is:
+
+.. code-block:: shell
+
+  ./bin/llvm-extract -o - -S -b ‘foo:bb9;bb20’ <input> > extracted.ll
+
+This particular example extracts two basic blocks from a function named ``foo``.
+
+This can prevent some optimizations as GlobalISel is generally able to work on a
+single function at a time. This technique can be repeated for different
+combinations of basic blocks until you have identified the critical blocks
+involved in a bug.
+
+Once the critical blocks have been identified, you can further increase the
+resolution to the critical instructions by splitting the blocks like from:
+
+.. code-block:: llvm
+
+  bb1:
+    ... instructions group 1 ...
+    ... instructions group 2 ...
+
+into:
+
+.. code-block:: llvm
+
+  bb1:
+    ... instructions group 1 ...
+    br %bb2
+
+  bb2:
+    ... instructions group 2 ...
+
+and then repeating the process for the new blocks.
+
+It's also possible to use this technique in a mode where the main function
+is compiled with GlobalISel and the extracted basic blocks are compiled with
+SelectionDAG (or the other way around) to leverage the existing quality of
+another code generator to track down bugs. This technique can also be used to
+improve the similarity between fast and slow code when tracking down performance
+regressions and help you zero in on a particular cause of the regression.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69645.227181.patch
Type: text/x-patch
Size: 2064 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191030/3b997977/attachment.bin>


More information about the llvm-commits mailing list