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

Re: RFA: one more patch to solve PR37535


Vladimir Makarov wrote:
Jeff, This is one more patch to fix PR37355. The changes in comparison with previous version are in mark_early_clobber and process_bb_node_lives. The problem was in wrong processing early clobber of hard registers which are not operands and therefore have no constraints. One example of such insn from rs6000.md is

(define_insn ""
 [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
   (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  (use (match_operand:SI 2 "immediate_operand" "i"))
  (use (match_operand:SI 3 "immediate_operand" "i"))
  (clobber (match_operand:SI 4 "gpc_reg_operand" "=&r"))
  (clobber (reg:SI  6))
  (clobber (reg:SI  7))
  (clobber (reg:SI  8))
  (clobber (reg:SI  9))
  (clobber (reg:SI 10))
  (clobber (reg:SI 11))
  (clobber (reg:SI 12))
  (clobber (match_scratch:SI 5 "=q"))]

Now all clobbers of hard registers are treated as early clobbers.

Last 3 days I tested the patch on 4 platforms for all reported problems on bootstraps (as crashes and code differences) and testsuite regressions using stage3 compiler. Al the problems are reported for ppc with specific config options.

The patch was successfully tested on bootstrap x86, i686, itanium, ppc64, ppc64 with --with-cpu=default32, ppc64 with --with-cpu=default32 --with-tune=cell. The patch was also sucessfully tested on gcc testuite on x86, x86_64, itanium, ppc64, and ppc64 with --with-cpu=default32 --with-tune=cell on the bootstrapped version.

Ok to commit?

Sorry, for any inconvinience with the previous version of the patch. I tested it thorougly but it was not enough to find the problem.

2008-09-24 Vladimir Makarov <vmakarov@redhat.com>

PR middle-end/37535

   * ira-lives.c (mark_reg_live, mark_reg_dead): New functions.
   (mark_ref_live, mark_ref_dead): Use them.
   (def_conflicts_with_inputs_p): Remove.
   (mark_early_clobbers): New function.
   (process_bb_node_lives): Call preprocess_constraints and
   mark_early_clobbers.  Process inputs again if necessary.

* doc/rtx.texi (clobber): Change how RA deals with clobbers.
So, my understanding is that what's changed in this revision (comparing to V2) is that we're picking up any hard register clobber instead of just those appearing in asms within mark_early_clobbers and that process_bb_node_lives is marking earlyclobbers as live at the start of the insn. Right?

OK.

Jeff


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