https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66112
ktkachov at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ktkachov at gcc dot gnu.org
--- Comment #12 from ktkachov at gcc dot gnu.org ---
r223115 caused a code quality regression that I'm seeing on aarch64 with PR
68381.
We have
int
foo (unsigned short x, unsigned short y)
{
int r;
if (__builtin_mul_overflow (x, y, &r))
__builtin_abort ();
return r;
}
and before the commit we used to generate:
foo:
uxth x0, w0
uxth x1, w1
mul x0, x0, x1
cmp x0, x0, sxtw
bne .L9
ret
.L9:
stp x29, x30, [sp, -16]!
add x29, sp, 0
bl abort
but after r223115 at -O3 on an aarch64 toolchain we generate:
foo:
uxth w0, w0
uxth w1, w1
stp x29, x30, [sp, -16]!
umull x0, w0, w1
add x29, sp, 0
tbnz w0, #31, .L6
mov w2, 0
cbnz w2, .L6
ldp x29, x30, [sp], 16
ret
.L6:
bl abort