]> granicus.if.org Git - llvm/commit
[MCA] Add flag -show-encoding to llvm-mca.
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 9 Aug 2019 11:26:27 +0000 (11:26 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 9 Aug 2019 11:26:27 +0000 (11:26 +0000)
commit728185772afa89c3bb47423fac9109fd970529b8
treef2220a8923f59bc4e225435d7bf7f4be0b5a63f7
parentb2d6af4c55cb1c5ec852ae83e3f3c4f767f28233
[MCA] Add flag -show-encoding to llvm-mca.

Flag -show-encoding enables the printing of instruction encodings as part of the
the instruction info view.

Example (with flags -mtriple=x86_64--  -mcpu=btver2):

Instruction Info:
[1]: #uOps
[2]: Latency
[3]: RThroughput
[4]: MayLoad
[5]: MayStore
[6]: HasSideEffects (U)
[7]: Encoding Size

[1]    [2]    [3]    [4]    [5]    [6]    [7]    Encodings:     Instructions:
 1      2     1.00                         4     c5 f0 59 d0    vmulps   %xmm0, %xmm1, %xmm2
 1      4     1.00                         4     c5 eb 7c da    vhaddps  %xmm2, %xmm2, %xmm3
 1      4     1.00                         4     c5 e3 7c e3    vhaddps  %xmm3, %xmm3, %xmm4

In this example, column Encoding Size is the size in bytes of the instruction
encoding. Column Encodings reports the actual instruction encodings as byte
sequences in hex (objdump style).

The computation of encodings is done by a utility class named mca::CodeEmitter.

In future, I plan to expose the CodeEmitter to the instruction builder, so that
information about instruction encoding sizes can be used by the simulator. That
would be a first step towards simulating the throughput from the decoders in the
hardware frontend.

Differential Revision: https://reviews.llvm.org/D65948

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@368432 91177308-0d34-0410-b5e6-96231b3b80d8
docs/CommandGuide/llvm-mca.rst
include/llvm/MCA/CodeEmitter.h [new file with mode: 0644]
lib/MCA/CMakeLists.txt
lib/MCA/CodeEmitter.cpp [new file with mode: 0644]
test/tools/llvm-mca/X86/show-encoding.s [new file with mode: 0644]
tools/llvm-mca/Views/InstructionInfoView.cpp
tools/llvm-mca/Views/InstructionInfoView.h
tools/llvm-mca/llvm-mca.cpp