This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/24762] [killloop-branch] code motion of non-invariant expressions with hard registers.



------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]