https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103462
--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by hongtao Liu <liuho...@gcc.gnu.org>: https://gcc.gnu.org/g:9d1336d977cf0cab75679d4b4170e7c9a86cd1f4 commit r13-583-g9d1336d977cf0cab75679d4b4170e7c9a86cd1f4 Author: liuhongt <hongtao....@intel.com> Date: Tue Dec 7 15:41:52 2021 +0800 Enhance final_value_replacement_loop to handle bitwise induction. This patch will enable below optimization: { - int bit; - long long unsigned int _1; - long long unsigned int _2; - <bb 2> [local count: 46707768]: - - <bb 3> [local count: 1027034057]: - # tmp_11 = PHI <tmp_8(3), tmp_6(D)(2)> - # bit_13 = PHI <bit_9(3), 63(2)> - _1 = 1 << bit_13; - _2 = ~_1; - tmp_8 = _2 & tmp_11; - bit_9 = bit_13 + -3; - if (bit_9 != -3(OVF)) - goto <bb 3>; [95.65%] - else - goto <bb 4>; [4.35%] - - <bb 4> [local count: 46707768]: - return tmp_8; + tmp_12 = tmp_6(D) & 7905747460161236406; + return tmp_12; } gcc/ChangeLog: PR middle-end/103462 * match.pd (bitwise_induction_p): New match. * tree-scalar-evolution.cc (gimple_bitwise_induction_p): Declare. (analyze_and_compute_bitwise_induction_effect): New function. (enum bit_op_kind): New enum. (final_value_replacement_loop): Enhanced to handle bitwise induction. gcc/testsuite/ChangeLog: * gcc.target/i386/pr103462-1.c: New test. * gcc.target/i386/pr103462-2.c: New test. * gcc.target/i386/pr103462-3.c: New test. * gcc.target/i386/pr103462-4.c: New test. * gcc.target/i386/pr103462-5.c: New test. * gcc.target/i386/pr103462-6.c: New test.