------- Comment #8 from rakdver at atrey dot karlin dot mff dot cuni dot cz 2005-11-09 23:15 ------- Subject: Re: [killloop-branch] code motion of non-invariant expressions with hard registers.
> ------- Comment #6 from dberlin at gcc dot gnu dot org 2005-11-09 22:53 > ------- > 1. Call clobbers aren't definitions. They are clobbers (IE kills). They do > not > generate a new value, they simply specify the old value is dead. Thus, you > don't mean to say "df.c assumes call clobbers ...", because it's not an > assumption. > > > 2. The patch is actually an incorrect workaround. The real problem is that > df.c on mainline doesn't get reaching definitions right for a number of > reasons. > > For example, explicit clobbers in CALL_INSN_FUNCTION_USAGE but *not* in > regs_invalidated_by_call will be treated as gen's, because they don't fall > into > the special case in df_bb_rd_local_compute. But they are not gen's. > > Have you tried making sure CLOBBER's don't get into the rd_gen set? > > I imagine that will fix your bug. I am fairly sure you are wrong, in this case. The code is like bb1: call (throw); bb2: reg = r15 where r15 is set by exception handling. The problem is that there currently simply is no insn that defines r15. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24762