[NFC][MC] `MCInst`: `Operands` small size optimization: store 10, not 8, inline ...
authorRoman Lebedev <lebedev.ri@gmail.com>
Tue, 13 Dec 2022 18:19:24 +0000 (21:19 +0300)
committerRoman Lebedev <lebedev.ri@gmail.com>
Tue, 13 Dec 2022 18:21:07 +0000 (21:21 +0300)
This improves the torture test of
```
./bin/llvm-exegesis -mcpu=znver3 -mode=inverse_throughput --opcode-index=-1 --benchmarks-file=/dev/null --dump-object-to-disk=0 --measurements-print-progress --skip-measurements
```
from ~2m16s to ~2min07s, and has the following effect on memory:

```
heaptrack stats:
        allocations:            100828624 -> 77362343 (-23.2%)
        leaked allocations:     1128
        temporary allocations:  24911300  ->  1576308 (-93.7%) !!!

peak heap memory consumption:
        78.2MB after 02.121s    ->   76.4MB after 01.985s (-2.3%)
peak RSS (including heaptrack overhead):
        193.4MB                 ->   192.6MB              (-0.4%)
```

The reasoning is that having more Operands than the SSO is costly,
because we go to global allocator, but having larger SSO is fine,
even if it's not always needed, because MCInst is hopefully pool-allocated.

I'm not sure who is the code owner of this component.

Reviewed By: craig.topper

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

llvm/include/llvm/MC/MCInst.h

index cb2616533bf5bbac38a5cb42db0752ca72a6eeff..2bc310852fe50d6438e42f5606f1e51660e4d522 100644 (file)
@@ -189,7 +189,7 @@ class MCInst {
   unsigned Flags = 0;
 
   SMLoc Loc;
-  SmallVector<MCOperand, 8> Operands;
+  SmallVector<MCOperand, 10> Operands;
 
 public:
   MCInst() = default;