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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |law at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
The difference starts in DOM3 by the CFG cleanup change catching two more BB
merging opportunities which then in VRP2 causes(?) extra jump threadings to
happen (for whatever reason...).

On x86_64 we have different IL (branch-cost, logical-op-non-short-circuit)
so what happens is different.

The IL we hand off to the late uninit pass is not resembling the original
source in any way due to these threadings and the usual inabilities of
the uninit pass pop up.

--param logical-op-non-short-circuit=1 fixes the testcase on powerpc64le,
=0 makes it fail on x86_64.

I'll adjust the testcase, not sure if anybody wants to analyze why
jump threading goes berzerk here.

Note disabling DOM3 fixes the testcase as well - the effect is just
the extra forwarder and then in VRP2:

 Visiting statement:
 _2 = g.0_1 + 1;
-<<<< COPY m_19 = m_8(D)
-0>>> COPY m_20 = m_8(D)
+LKUP STMT n_7(D) le_expr 9
+FIND: 0
+LKUP STMT m_8(D) gt_expr 100
+FIND: 0
+  Registering jump thread: (6, 7) incoming edge;  (7, 8) joiner;  (8, 10)
normal; (10, 11) nocopy;
 <<<< COPY m_20 = m_8(D)
+LKUP STMT n_7(D) le_expr 9
+FIND: 0
+  Registering jump thread: (6, 7) incoming edge;  (7, 9) joiner;  (9, 11)
normal;

and more similar cases.

Reply via email to