reg-stack pass does not maintain the data flow information correctly.
call df_insn_rescan_all after the transformation is done.
gcc/
PR rtl-optimization/97777
* reg-stack.c (rest_of_handle_stack_regs): call
df_insn_rescan_all if reg_to_stack return true.
gcc/testsuite/
PR rtl-optimization/97777
* gcc.target/i386/pr97777.c: New test.
rest_of_handle_stack_regs (void)
{
#ifdef STACK_REGS
- reg_to_stack ();
+ if (reg_to_stack ())
+ df_insn_rescan_all ();
regstack_completed = 1;
#endif
return 0;
--- /dev/null
+/* { dg-do compile { target *-*-linux* } } */
+/* { dg-options "-O -fzero-call-used-regs=used -ffinite-math-only" } */
+
+float
+foo (void)
+{
+ return __builtin_fmod (0, 0);
+}
+