https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67681

--- Comment #4 from alalaw01 at gcc dot gnu.org ---
loopinit introduces the exit phi in much the same way for both -DFOO=0 and
-DFOO=1, so the difference is in sccp.

In the -DFOO=0 case, sccp does this (removing TODO_cleanup_cfg from
pass_data_scev_cprop to make the diff easier, still vectorizes):

 ;; Function addlog2 (addlog2, funcdef_no=0, decl_uid=2749, cgraph_uid=0,
symbol_order=0)

+
+final value replacement:
+  i_21 = PHI <i_15(4)>
+  with
+  i_21 = (int) _3;
+
...[snip]...
   <bb 10>:
-  # i_21 = PHI <i_15(4)>
+  _19 = (unsigned int) i_25;
+  _18 = (unsigned int) max_7;
+  _17 = (unsigned int) i_25;
+  _5 = _18 - _17;
+  _4 = _5 + _19;
+  _3 = _4 + 1;
+  i_21 = (int) _3;

In the -DFOO=1 case, sccp doesn't do anything; and adding -fno-tree-scev-cprop
prevents vectorization of the -DFOO=0 case.

Reply via email to