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
{