On Fri, Sep 20, 2019 at 10:07:59PM +0000, co...@sdf.org wrote: > Introducing the reversed jbb* patterns doesn't seem to help with the > original issue. It crashes building libatomic.
My loose understanding of what is going on: - GCC emits this atomic in expand. - When cleaning up, it looks for optimizations. - It decides this is a branch to another branch situation, so maybe can be improved. - This fails to output an instruction for unrelated reasons. - Hit an assert. I don't think that we should be trying to combine regular branch + atomic branch in very generic code. My guess is that, if it didn't crash now, it might emit a different kind of branch which loses the atomic qualities, and result in wrong code. I tried to single-step GCC, and it might be trying entirely different instruction patterns. I'm not sure whether I should put a lot of trust in the line numbers shown from .md files, but it's trying nonlocal_goto in vax.md. In any case, nothing from builtins.md.