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.
I'm not a huge fan of using the address of MCInst as the key in the cache, for instance the following code would be buggy:
If you still want to use the address for performance reasons you can pass by pointer instead of reference. At least this will be a red flag,