On Mon, 2026-10-05 at 16:18 +1300, best xmg wrote:
> Hi Dave,
> 
> Quick recap: this is the v2 series I sent on Sep 26 -- patches
> 0001-0004 and 0006.  0001-0003 are unchanged from what you approved.
> 0004 now has only the analyzer and xml.cc hunks; I dropped the
> gcov.cc and canvas.cc hunks.  0006 is the array2::set overload you
> suggested, so the std::move in canvas::paint now really moves.
> (Martin has already pushed the ipa-cp patch.)
> 
> Just a gentle ping on these -- let me know if anything needs
> changing,
> or if you're able to push them.

Thanks for the reminder.  I've now pushed these for you to trunk as
r17-4901-gf9b60a8bd7569f through r17-4906-g2633f491aedadd.  Please let
me know if I've missed anything.

Thanks again for the patches (and the speedup!)
Dave


> 
> Thanks,
> Linden
> 
> On Sat, Sep 26, 2026 11:21 PM, best xmg <[email protected]> wrote:
> > Hi Dave,
> > 
> > Thanks for the review.  Attached are v2-0004 and v2-0006.
> > 
> > v2-0004-gcc-analyzer-drop-std-move-calls-that-have-no-
> > effect.patch.txt
> > now has only the analyzer and xml.cc hunks you approved.  I dropped
> > the
> > gcov.cc and canvas.cc hunks; canvas.cc keeps its std::move.
> > 
> > You are right about the canvas.cc change.
> > v2-0006-text-art-add-array2-set-overload-taking-an-rvalue-
> > el.patch.txt
> > is new, as you suggested: an array2::set overload taking element_t
> > &&,
> > so that std::move in canvas::paint now really moves.
> > 
> > The series bootstrapped (x86_64-pc-linux-gnu, --enable-
> > checking=yes)
> > with no errors.
> > 
> > Could you push patch 1-3 along with v2-0004 and v2-0006 for me?
> > I don't have commit access.
> > 
> > If anything is not going well, please tell me; I would really
> > appreciate
> > it.
> > 
> > Thanks,
> > Linden
> > 
> > On Fri, Sep 25, 2026 05:58 AM, David Malcolm <[email protected]>
> > wrote:
> > > On Thu, 2026-09-24 at 10:21 +1200, 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.
> > > 
> > > Thanks, nice to see a measurable performance win in the analyzer
> > > for
> > > this.
> > > 
> > > Did you try a bootstrap of GCC with the patches?
> > > 
> > > Taking the patches one by one:
> > > 
> > > "[PATCH 1/5] analyzer: avoid deep-copying program_state when
> > > creating
> > >  an exploded_node": looks good to me.
> > > 
> > > "PATCH 2/5] analyzer, diagnostics: add missing std::move for by-
> > > value
> > >  sinks": looks good to me.
> > > 
> > > "[PATCH 3/5] diagnostics: take HTML tag names as const char * in
> > >  source-printing": looks good to me
> > > 
> > > "[PATCH 4/5] gcc, analyzer: drop std::move calls that have no
> > > effect":
> > > * the analyzer/*.cc changes look good to me
> > > * I can't speak to the gcov.cc change
> > > * gcc/text-art/canvas.cc: looks like it would be better to
> > > implement an
> > > overload of text_art::array2::set that takes an element_t &&, and
> > > keep
> > > the std::move here, since copying styled_unichar instances is
> > > non-
> > > trivial
> > > * the xml.cc change looks good to me
> > > 
> > > I can't speak to patch 5.
> > > 
> > > Thanks again
> > > Dave
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > > 
> > > > Full test logs and the benchmark script are available on
> > > > request.
> > > > 
> > > > 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.
> > > > 
> > > > The five patches are attached as plain-text files.
> > > > 
> > > > linden (5):
> > > > analyzer: avoid deep-copying program_state when creating an
> > > > exploded_node
> > > > analyzer, diagnostics: add missing std::move for by-value sinks
> > > > diagnostics: take HTML tag names as const char * in source-
> > > > printing
> > > > gcc, analyzer: drop std::move calls that have no effect
> > > > range-op, tree-ssa-ccp, fold-const, ipa-cp: bind wide_int /
> > > > widest_int by
> > > > reference
> > > > 
> > > > gcc/analyzer/access-diagram.cc | 2 +-
> > > > gcc/analyzer/engine.cc | 17 ++++++++++++-----
> > > > gcc/analyzer/exploded-graph.h | 16 ++++++++++++++++
> > > > gcc/analyzer/infinite-loop.cc | 2 +-
> > > > gcc/analyzer/program-state.cc | 27 +++++++++++++++++++++++++++
> > > > gcc/analyzer/program-state.h | 1 +
> > > > gcc/diagnostics/html-sink.cc | 4 ++--
> > > > gcc/diagnostics/source-printing.cc | 27 ++++++++++++-----------
> > > > ----
> > > > gcc/fold-const.cc | 9 +++++----
> > > > gcc/fold-const.h | 8 ++++----
> > > > gcc/gcov.cc | 2 +-
> > > > gcc/ipa-cp.cc | 9 ++++++---
> > > > gcc/ipa-cp.h | 6 +++---
> > > > gcc/range-op.cc | 10 +++++-----
> > > > gcc/text-art/canvas.cc | 2 +-
> > > > gcc/tree-ssa-ccp.cc | 5 +++--
> > > > gcc/xml.cc | 2 +-
> > > > 17 files changed, 101 insertions(+), 48 deletions(-)
> > > > 
> > > > Regards,
> > > > Linden
> > > 

Reply via email to