https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90045
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2019-04-18 CC| |law at gcc dot gnu.org, | |marxin at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Reduced C testcase, fails with -O2, succeeds with -O1: typedef long unsigned int size_t; void copy(const void* __restrict__ __a, size_t __n, void* __restrict__ __b) { if (__n != 0) __builtin_memcpy(__b, __a, __n); } -O2 failing assembly: .file "valarray.3.ii" .section P,"ax" .global _copy .type _copy, @function _copy: mov.L r2, r14 cmp #0, r14 mov.L r1, r2 bne .L7 rts .balign 8,3,7 .L7: mov.L r3, r1 mov.L r14, r3 smovf rts .size _copy, .-_copy .ident "GCC: (GNU) 9.0.1 20190418 (experimental) [trunk revision 269411]" if I remove the .balign it assembles. Knowing nothing about RX I can't say if this is to be solved in the assembler or the compiler but I note that GCC 8 didn't align and the only backend change done for GCC 9 was re-orgs of the *_ALIGN target macro stuff with 2018-07-17 Martin Liska <mli...@suse.cz> * config/rx/rx.h (JUMP_ALIGN): Wrap integer values * config/rx/rx-protos.h (rx_align_for_label): Make it static function. * config/rx/rx.c (rx_align_for_label): Change return type to align_flags. (rx_max_skip_for_label): Remove TARGET_ASM_*_ALIGN_MAX_SKIP macro definitions. into align_flags class. (LABEL_ALIGN): Likewise. (LOOP_ALIGN): Likewise. 2018-07-04 Denys Vlasenko <dvlas...@redhat.com> Martin Liska <mli...@suse.cz> PR middle-end/66240 PR target/45996 PR c/84100 * config/rx/rx.c (rx_option_override): Likewise. * config/rx/rx.h (JUMP_ALIGN): Use align_jumps_log. (LABEL_ALIGN): Use align_labels_log. (LOOP_ALIGN): Use align_loops_align. which likely caused this regression.