This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[RFC,mainline] PR21596 df bug: global regs should have a def on entry?
- From: Paolo Bonzini <paolo dot bonzini at lu dot unisi dot ch>
- To: Andrew MacLeod <amacleod at redhat dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 07 Mar 2007 09:29:54 +0100
- Subject: [RFC,mainline] PR21596 df bug: global regs should have a def on entry?
- References: <1173192035.27286.29.camel@localhost.localdomain>
- Reply-to: bonzini at gnu dot org
Andrew MacLeod wrote:
> I was working on a a patch for PR 21596, and it seems to have triggered
> a bug in fwprop on x86 in mainline.
This seems to be a bug in dataflow instead. It looks to me like we
should add a def on entry for the global registers -- in this case
%edi -- like we add a use on exit.
This patch does this (bootstrap/regtest in progress, but I solicit
comments now just to understand if it is the right approach). Does
it look ok?
Unfortunately, it undoes the effort of your patch, which does not
fix the PR anymore. I haven't seen if df-branch fixes the PR in
other ways, nor if it already includes this bugfix.
Paolo
2007-03-07 Paolo Bonzini <bonzini@gnu.org>
* df-scan.c (df_record_entry_block_defs): Add artificial defs
for global registers.
Index: ../../base-gcc-src/gcc/df-scan.c
===================================================================
--- ../../base-gcc-src/gcc/df-scan.c (revision 122624)
+++ ../../base-gcc-src/gcc/df-scan.c (working copy)
@@ -1833,6 +1833,13 @@ df_record_entry_block_defs (struct dataf
#endif
}
+ /* Mark all global registers as being defined at the entry of the
+ function since values set by our caller should not be treated as
+ uninitialized. */
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ if (global_regs[i])
+ bitmap_set_bit (df->entry_block_defs, i);
+
/* Once the prologue has been generated, all of these registers
should just show up in the first regular block. */
if (HAVE_prologue && epilogue_completed)