https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99540
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Given that Richard's change was just an optimization, perhaps we can just do: --- gcc/config/aarch64/aarch64.c.jj 2021-03-19 10:14:18.302936161 +0100 +++ gcc/config/aarch64/aarch64.c 2021-03-19 12:58:32.454131746 +0100 @@ -4636,7 +4636,7 @@ aarch64_add_offset (scalar_int_mode mode val = gen_int_mode (poly_int64 (low_bit * 2, low_bit * 2), mode); val = aarch64_force_temporary (mode, temp1, val); - if (can_create_pseudo_p ()) + if (can_create_pseudo_p () && !flag_trapv) { rtx coeff1 = gen_int_mode (factor, mode); val = expand_mult (mode, val, coeff1, NULL_RTX, false, true); Or --- gcc/config/aarch64/aarch64.c.jj 2021-03-19 10:14:18.302936161 +0100 +++ gcc/config/aarch64/aarch64.c 2021-03-19 13:03:07.109102334 +0100 @@ -4639,7 +4639,10 @@ aarch64_add_offset (scalar_int_mode mode if (can_create_pseudo_p ()) { rtx coeff1 = gen_int_mode (factor, mode); + bool saved_trapv = flag_trapv; + flag_trapv = false; val = expand_mult (mode, val, coeff1, NULL_RTX, false, true); + flag_trapv = saved_trapv; } else {