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
            {

Reply via email to