[Bug tree-optimization/112104] loop of ^1 should just be reduced to ^(n&1)
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Aug 20 07:52:06 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112104
--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Eikansh Gupta <eikansh@gcc.gnu.org>:
https://gcc.gnu.org/g:62993cc9d2200ef7a05f317cdef3262996c0ac10
commit r17-3460-g62993cc9d2200ef7a05f317cdef3262996c0ac10
Author: Eikansh Gupta <eikansh.gupta@oss.qualcomm.com>
Date: Thu Jul 23 17:04:17 2026 +0530
tree-optimization: Handle variable trip count XOR in final value
replacement [PR112104]
analyze_and_compute_bitop_with_inv_effect replaces a loop that repeatedly
applies a bitwise op with a loop-invariant operand by its closed form. The
BIT_XOR case only handled a constant trip count; for a variable count it
bailed out, leaving loops like "for (i=0;i<n;i++) j ^= 1;" in place.
Mask the invariant with that runtime parity to handle a variable count.
A constant count folds as before.
PR tree-optimization/112104
gcc/ChangeLog:
* tree-scalar-evolution.cc
(analyze_and_compute_bitop_with_inv_effect):
Handle BIT_XOR_EXPR with a variable trip count.
gcc/testsuite/ChangeLog:
* gcc.target/i386/pr105735-1.c: Bump final value replacement count
from 8 to 9.
* gcc.target/i386/pr105735-3.c: Likewise.
* gcc.dg/tree-ssa/pr112104-1.c: New test.
* gcc.dg/tree-ssa/pr112104-2.c: New test.
Signed-off-by: Eikansh Gupta <eikansh.gupta@oss.qualcomm.com>
More information about the Gcc-bugs
mailing list