Hello,

On Thu, Sep 24 2026, best xmg wrote:
> Hi all,
>
> Reference and move semantics are a part of C++ that experienced engineers
> still get subtly wrong, so I audited the tree with clang-tidy's
> performance-* checks, which trace whether a by-value parameter is ever
> mutated or a std::move target is actually reachable -- the kind of
> exhaustive per-parameter check regular compiler warnings and human review
> aren't built to do. Only patch 1 has a measured performance number;
> patches 2-5 are correctness/consistency fixes in the same spirit with no
> individual perf claim. No functional change is intended anywhere in the
> series.
>
> Patch 1 removes a needless deep-copy of program_state (which owns a whole
> region_model) when -fanalyzer creates an exploded_node, by giving
> program_state a move-assignment operator and threading the move through
> point_and_state and exploded_node.
>
> Testing:
> - x86_64-pc-linux-gnu, --enable-languages=c,c++,lto, --disable-bootstrap.
> - check-gcc analyzer.exp/tree-ssa.exp/ipa.exp on current trunk
> (492fbdbf99d): 16820+10537 pass. Same 2 pre-existing failures as
> unpatched trunk, unrelated to this series:
> * omp-parallel-for-1.c: -Wanalyzer-symbol-too-complex depth boundary.
> * ssa-sink-18.c: known r17-3756 regression (unrelated ivopts change).
> - Timing (patch 1 only): 8 interleaved `cc1 -fanalyzer` runs on
> libiberty/cp-demangle.c, binary swapped each run: 63.98s -> 60.10s
> median (6.06% faster), no overlap across all 8 pairs.
>
> Full test logs and the benchmark script are available on request.

The ipa-cp.cc and ipa-cp.h hunks are OK.

>
> I don't have push access; posting for review. Happy to split patch 1
> out on its own if that's preferred, or to fold 2-5 together -- they're
> independent of each other and of patch 1.

If you carve these to a separate patch, I can push t on your behalf.
(The other bits in the patch need to be approved by someone else.)

Thanks,

Martin

Reply via email to