https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37262
--- Comment #5 from Martin Sebor <msebor at gcc dot gnu.org> --- To make clear what I meant by "not optimal" in comment #4, and focusing on powepc64le output with -O2 for the test case in comment #1, trunk (6.0) emits the code below. The first branch (to .L2) is superfluous given the second (to .L9). _bfd_xcoff_canonicalize_dynamic_reloc: .LCF0: 0: addis 2,12,.TOC.-.LCF0@ha addi 2,2,.TOC.-.LCF0@l cmpldi 7,3,2 bgt 7,.L2 <<< superfluous branch beq 7,.L9 .L2: blr .p2align 4,,15 .L9: mflr 0 std 0,16(1) stdu 1,-96(1) bl _bfd_abort nop addi 1,1,96 ld 0,16(1) mtlr 0 blr