> -----Original Message-----
> From: Jeffrey Law <[email protected]>
> Sent: Thursday, August 6, 2026 11:22 AM
> To: Liu, Hongtao <[email protected]>; [email protected]
> Cc: [email protected]
> Subject: Re: [PATCH 2/2] tree-scalar-evolution: Handle toggle recurrences
>
>
>
> On 8/4/2026 8:45 PM, liuhongt wrote:
> > Recognize NEGATE_EXPR, BIT_NOT_EXPR and BIT_XOR_EXPR recurrences.
> > Fold constant iteration counts and use a conditional for symbolic counts.
> >
> > Require may_be_zero to be false, since otherwise niter does not
> > necessarily give the latch count. Keep trapping signed negations
> > unchanged. This replaces the old invariant bit-operation helper;
> > idempotent AND and IOR updates are handled by the preceding patch.
> >
> > gcc/ChangeLog:
> >
> > PR middle-end/124460
> > PR middle-end/114502
> > PR middle-end/112104
> > PR middle-end/98909
> > * tree-scalar-evolution.cc
> > (analyze_and_compute_bitop_with_inv_effect): Remove.
> > (compute_toggle_loop_value): New function.
> > (final_value_replacement_loop): Use it.
> >
> > gcc/testsuite/ChangeLog:
> >
> > PR middle-end/124460
> > PR middle-end/114502
> > PR middle-end/112104
> > PR middle-end/98909
> > * gcc.dg/tree-ssa/pr124460-4.c: New test.
> > * gcc.dg/tree-ssa/pr124460-5.c: Likewise.
> > * gcc.target/i386/pr105735-1.c: Adjust scan count.
> > * gcc.target/i386/pr105735-3.c: Likewise.
> > * gcc.target/i386/pr92080-12.c: Keep the XOR operand variant.
> This will need slight readjustment as I think we're better off with Rachit's
> patch
> for the idempotent cases.
>
> It's been eons, but there was a paper, I think from the team at Rice, "Beyond
> Induction Variables" or something like that which described a bunch of these
> cases. Did you happen to review that paper to see if there are any other
> toggle-like cases we should support?
The patch replaces the old function with a new one, git diff looks not easy to
read. It's better to just look at the new function directly after applying the
patch.
I haven't read any papers on this — those cases all came from bug reports in
Bugzilla. I do notice there are opportunities for GCC to optimize when building
itself.
> Jeff