https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115138
--- Comment #20 from Iain Buclaw <ibuclaw at gcc dot gnu.org> ---
Stepping through both the stage1-gcc/gdc and stage2-gcc/gdc compilers, there is
an apparent divergence in behaviour at this point in gimplify.cc
6527│ /* Now that the LHS is gimplified, re-gimplify the RHS if our initial
6528│ guess for the predicate was wrong. */
6529│ gimple_predicate final_pred = rhs_predicate_for (*to_p);
6530│ if (final_pred != initial_pred)
6531│ {
6532│ ret = gimplify_expr (from_p, pre_p, post_p, final_pred,
fb_rvalue);
6533│ if (ret == GS_ERROR)
6534│ return ret;
6535│ }
It looks like the stage2 compiler treats the if condition as being always true
- though I could be looking at apples and oranges here as one is -O0 whilst the
other is -O2.
stage1:
```
0x0000000001421561 <+2288>: call 0x141dc8e
<_Z17rhs_predicate_forP9tree_node>
0x0000000001421566 <+2293>: mov %rax,-0x90(%rbp)
0x000000000142156d <+2300>: mov -0x90(%rbp),%rax
0x0000000001421574 <+2307>: cmp -0x98(%rbp),%rax
0x000000000142157b <+2314>: je 0x14215c1
0x000000000142157d <+2316>: mov -0x90(%rbp),%rcx
0x0000000001421584 <+2323>: mov -0xf8(%rbp),%rdx
0x000000000142158b <+2330>: mov -0xf0(%rbp),%rsi
0x0000000001421592 <+2337>: mov -0xb0(%rbp),%rax
0x0000000001421599 <+2344>: mov $0x1,%r8d
0x000000000142159f <+2350>: mov %rax,%rdi
0x00000000014215a2 <+2353>: call 0x1456eac
<_Z13gimplify_exprPP9tree_nodePP6gimpleS4_PFbS0_Ei>
0x00000000014215a7 <+2358>: mov %eax,-0xd4(%rbp)
0x00000000014215ad <+2364>: cmpl $0xfffffffe,-0xd4(%rbp)
0x00000000014215b4 <+2371>: jne 0x14215c1
0x00000000014215b6 <+2373>: mov -0xd4(%rbp),%eax
0x00000000014215bc <+2379>: jmp 0x1422709
0x00000000014215c1 <+2384>: mov -0xb0(%rbp),%rax
```
stage2
```
0x00000000010d637c <+668>: call 0x105d030 <_Z13is_gimple_regP9tree_node>
0x00000000010d6381 <+673>: mov $0x10a2ad0,%ecx
0x00000000010d6386 <+678>: mov %r12,%rdx
0x00000000010d6389 <+681>: mov %rbx,%rsi
0x00000000010d638c <+684>: test %al,%al
0x00000000010d638e <+686>: mov $0x10a21d0,%eax
0x00000000010d6393 <+691>: mov $0x1,%r8d
0x00000000010d6399 <+697>: mov %r14,%rdi
0x00000000010d639c <+700>: cmovne %rax,%rcx
0x00000000010d63a0 <+704>: call 0x10b3700
<_Z13gimplify_exprPP9tree_nodePP6gimpleS4_PFbS0_Ei>
0x00000000010d63a5 <+709>: cmp $0xfffffffe,%eax
0x00000000010d63a8 <+712>: je 0x10d6538
```