diff options
author | qing zhao <qinzhao@gcc.gnu.org> | 2020-12-02 23:48:02 +0100 |
---|---|---|
committer | qing zhao <qinzhao@gcc.gnu.org> | 2020-12-02 23:48:02 +0100 |
commit | 2cace1cd683318e83e8a613f1aa2f2b16e37a342 (patch) | |
tree | 6b5c2daa325b3e06b07abcd18188f0717c22013a /gcc | |
parent | dc2b372ed1b1e9af6db45051cff95478c7616807 (diff) | |
download | gcc-2cace1cd683318e83e8a613f1aa2f2b16e37a342.zip gcc-2cace1cd683318e83e8a613f1aa2f2b16e37a342.tar.gz gcc-2cace1cd683318e83e8a613f1aa2f2b16e37a342.tar.bz2 |
rtl-optimization: Fix data flow maintenance bug in reg-stack.c [pr97777]
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/reg-stack.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr97777.c | 9 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index 8f98bd8..3dab843 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -3426,7 +3426,8 @@ static unsigned int 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; diff --git a/gcc/testsuite/gcc.target/i386/pr97777.c b/gcc/testsuite/gcc.target/i386/pr97777.c new file mode 100644 index 0000000..fcefc09 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr97777.c @@ -0,0 +1,9 @@ +/* { dg-do compile { target *-*-linux* } } */ +/* { dg-options "-O -fzero-call-used-regs=used -ffinite-math-only" } */ + +float +foo (void) +{ + return __builtin_fmod (0, 0); +} + |