https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78812
Jeffrey A. Law <law at redhat dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |law at redhat dot com --- Comment #10 from Jeffrey A. Law <law at redhat dot com> --- So EDGE_EH implies EDGE_ABNORMAL, so the patch in c#8 isn't going to have any impact. The real bug is more subtle. prune_expressions walks the expression table looking for expressions that occur in blocks with abnormal edges. We then remove those expressions from antic/transp. The bug is it uses MEM_P. Which is (of course) false if the given RTX has an embedded MEM. A good example would be: (zero_extend:DI (mem/c:QI (plus:DI (reg/f:DI 34 %fp) (const_int -1 [0xffffffffffffffff])) [2 T.a+0 S1 A8])) Since that's not a MEM_P, the expression isn't removed from antic/transp which makes it subject to hoisting across the abnormal edge. This could be easily fixed by walking into the ZERO/SIGN_EXTEND rtx, but there may be other places where an embedded MEM might appear (hell, on a cisc machine it would be just about anywhere). So I want to do a bit of auditing of gcse.c.