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?