From c86033a55aa55a8337376986e74e252b19e1a914 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 10 Apr 2018 17:49:45 +0000 Subject: [PATCH] [llvm-mca] add example workflow for source code This is copied from Andrea's text in PR36875: https://bugs.llvm.org/show_bug.cgi?id=36875 As noted there, this is a hack...but it's a good one! It's important to show potential workflows up-front with examples, so customers can copy and experiment with them. llvm-svn: 329726 --- llvm/docs/CommandGuide/llvm-mca.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/llvm/docs/CommandGuide/llvm-mca.rst b/llvm/docs/CommandGuide/llvm-mca.rst index ee7040cc68f4..d697511f9d8d 100644 --- a/llvm/docs/CommandGuide/llvm-mca.rst +++ b/llvm/docs/CommandGuide/llvm-mca.rst @@ -36,6 +36,26 @@ substring ``LLVM-MCA-END`` marks the end of a code region. For example: ... # LLVM-MCA-END +Inline assembly directives may also be used from source code to annotate the +assembly text: + +.. code-block:: c++ + +int foo(int a, int b) { + __asm volatile("# LLVM-MCA-BEGIN foo"); + a += 42; + __asm volatile("# LLVM-MCA-END"); + a *= b; + return a; +} + +So for example, you can compile code with clang, output assembly, and pipe it +directly into llvm-mca for analysis: + +.. code-block:: bash + +$ clang foo.cpp -O2 -target x86_64-unknown-unknown -S -o - | llvm-mca -mcpu=btver2 + Multiple regions can be specified provided that they do not overlap. A code region can have an optional description. If no user defined region is specified, then :program:`llvm-mca` assumes a default region which contains every