https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93291
--- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> --- Thanks. The test is rather over-specified, it seems. x86_64 gimple for test_2 is: _1 = p_5(D) == 0B; _2 = q_6(D) == 0B; _3 = _1 | _2; if (_3 != 0) goto <bb 4>; [51.12%] else goto <bb 3>; [48.88%] powerpc64le gimple for test_2 has: if (p_2(D) == 0B) goto <bb 5>; [18.09%] else goto <bb 3>; [81.91%] <bb 3> [local count: 879501929]: if (q_3(D) == 0B) goto <bb 5>; [30.95%] else goto <bb 4>; [69.05%] So on x86_64, it's done both comparisons against NULL first, and optimized the || into: _3 = _1 | _2; whereas on powerpc64le it uses control flow to do this. The purpose of this test is to verify that the pattern-matching detects the underlying conditionals in the presence of that "_3 = _1 | _2;" optimization, so maybe a gimple FE test might be appropriate here. I'm not sure where the difference between the targets originates; is there a way to force the usage of bitwise-or here?