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.