  A variety of code analyzers, such as IACA, uiCA, llvm-mca or Ithemal, strive
to statically predict the throughput of a computation kernel. Each analyzer is
based on its own simplified CPU model reasoning at the scale of a basic block.
Facing this diversity, evaluating their strengths and weaknesses is important
to guide both their usage and their enhancement.
  We present CesASMe, a fully-tooled solution to evaluate code analyzers on
C-level benchmarks composed of a benchmark derivation procedure that feeds an
evaluation harness. We conclude that memory-carried data dependencies are a
major source of imprecision for these tools. We tackle this issue with
staticdeps, a static analyzer extracting memory-carried data dependencies,
including across loop iterations, from an assembly basic block. We integrate
its output to uiCA, a state-of-the-art code analyzer, to evaluate staticdeps'
impact on a code analyzer's precision through CesASMe.
