https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66739
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- The ppc testcase, int f(int a, int b, int c) { a -= (short)b * (c >> 16); if (!a) return 10; return a; } is probably artificially triggering the same issue. Here we do not test for conditional part but for an instruction used implementing a -= (short)b * (c >> 16); But it shows the same issue with the followup transform of sinking the subtraction to the else path of the if. I suppose a single-use test is the way to go together with some means to "override" that when the caller is not going to create the result stmts but will only perform lookups if the result is already computed (that applies to all single-use tests).