  High-performance branch target buffers (BTBs) and the L1I cache are key to
high-performance front-end. Modern branch predictors are highly accurate, but
with an increase in code footprint in modern-day server workloads, BTB and L1I
misses are still frequent. Recent industry trend shows usage of large BTBs
(100s of KB per core) that provide performance closer to the ideal BTB along
with a decoupled front-end that provides efficient fetch-directed L1I
instruction prefetching. On the other hand, techniques proposed by academia,
like BTB prefetching and using retire order stream for learning, fail to
provide significant performance with modern-day processor cores that are deeper
and wider.
  We solve the problem fundamentally by increasing the storage density of the
last-level BTB. We observe that not all branch instructions require a full
branch target address. Instead, we can store the branch target as a branch
offset, relative to the branch instruction. Using branch offset enables the BTB
to store multiple branches per entry. We reduce the BTB storage in half, but we
observe that it increases skewness in the BTB. We propose a skewed indexed and
compressed last-level BTB design called MicroBTB (MBTB) that stores multiple
branches per BTB entry. We evaluate MBTB on 100 industry-provided server
workloads. A 4K-entry MBTB provides 17.61% performance improvement compared to
an 8K-entry baseline BTB design with a storage savings of 47.5KB per core.
