https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91060
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsandifo at gcc dot gnu.org --- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- Hmm, using a cross configured as trunk/configure --target=armeb-none-linux-gnueabihf --with-cpu=cortex-a9 --with-fpu=neon-fp16 --enable-languages=c and trimming the testcase to the first line I cannot reproduce the reported assembly. I get at -O3 .arm .fpu softvfp .type main, %function main: @ args = 0, pretend = 0, frame = 16 @ frame_needed = 0, uses_anonymous_args = 0 movw ip, #:lower16:.LANCHOR0 push {r4, r5, lr} movt ip, #:upper16:.LANCHOR0 mov r0, #0 mov r1, r0 mov r2, r0 ldr ip, [ip] mov r3, r0 mov r5, #3 mov r4, #5 movt r1, 4 movt r2, 6 movt r3, 8 sub sp, sp, #20 sxth ip, ip bfi r1, r4, #0, #16 add ip, ip, #2 sxth lr, ip bfi r0, lr, #16, #16 cmp ip, lr mov lr, #7 mov ip, #9 bfi r0, r5, #0, #16 bfi r2, lr, #0, #16 bfi r3, ip, #0, #16 strd r0, [sp] strd r2, [sp, #8] bne .L5 mov r0, #0 add sp, sp, #20 @ sp needed pop {r4, r5, pc} .L5: bl abort also the GIMPLE looks good to me, we compare only the first non-constant element and optimized the others at compile-time. Are you sure the first line fails? The ones with bitwise handling look more "interesting" (^, & and |) since vector lowering plays odd tricks there and VN elides an intermediate VIEW_CONVERT_EXPR. Not sure what is required to do a runtest with qemu, I can try throwing in newlib and binutils into a combined tree, but is that enough? Maybe Richard can help here as well.