https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113148

--- Comment #2 from Xi Ruoyao <xry111 at gcc dot gnu.org> ---
A bug in loongarch_secondary_reload is causing an infinite loop:

diff --git a/gcc/config/loongarch/loongarch.cc
b/gcc/config/loongarch/loongarch.cc
index 5ffd06ce9be..c0a0af3dda5 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -6951,7 +6951,8 @@ loongarch_secondary_reload (bool in_p ATTRIBUTE_UNUSED,
rtx x,
          return NO_REGS;
        }

-      if (reg_class_subset_p (rclass, FP_REGS) && MEM_P (x))
+      if (reg_class_subset_p (rclass, FP_REGS)
+         && (regno == -1 || MEM_P (x)))
        return GR_REGS;

       return NO_REGS;

Reply via email to