This is the mail archive of the 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]

Re: -fprofile-arcs overwriting return value of fn.


On Thu, 25 Apr 2002, Johannes Thoma wrote:

> I was experimenting with -fprofile-arcs on the new-reg-alloc branch.
> I found that on exit edges, it inserts insns for profilling after
> the ``use'' of the register holding the return value which can
> cause return values be overwritten:

I already fixed that in the process of merging HEAD and reg-alloc branch.
It's just not committed.  I'm not sure you really want to test
-fprofile-arcs and friends on the current version of that branch, as it is
based on a fairly old version of gcc (that's why also the attempt of
merging ;) ), so the profile based optimizations may not work anyway.

> Did anybody else observe the above? Is someone already working on
> a patch?

In the meantime you can simply add the final use again, by adding locally

  if (!INSN_P (get_last_insn ())
      || GET_CODE (PATTERN (get_last_insn ())) != USE)
      rtx insn, last = get_last_insn ();
      basic_block bb = BLOCK_FOR_INSN (last);
      if (bb)
          use_return_register ();
          for (insn = get_last_insn (); insn != last; insn = PREV_INSN (insn))
            set_block_for_insn (insn, bb);
          if (last == bb->end)
            bb->end = get_last_insn ();

at the begin of reg_alloc.  I'm not sure, if I should be able to rely on
that final use for the allocator (in which case commit_edge_insertion has
to be fixed), or if I only can rely on the bitmap of live registers at the
begin of the EXIT_BLOCK.  Currently I use the use ;)


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