]> git.ipfire.org Git - thirdparty/gcc.git/commit
Enhance final_value_replacement_loop to handle bitwise induction.
authorliuhongt <hongtao.liu@intel.com>
Tue, 7 Dec 2021 07:41:52 +0000 (15:41 +0800)
committerliuhongt <hongtao.liu@intel.com>
Wed, 18 May 2022 07:46:21 +0000 (15:46 +0800)
commit9d1336d977cf0cab75679d4b4170e7c9a86cd1f4
tree374f3e3a39dacb7097ddb27370329b1a60258f3b
parenta174dc1a7f2bf0a71475ff633b130a60c0c3ff4a
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.
gcc/match.pd
gcc/testsuite/gcc.target/i386/pr103462-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr103462-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr103462-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr103462-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr103462-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr103462-6.c [new file with mode: 0644]
gcc/tree-scalar-evolution.cc