This is the mail archive of the egcs@egcs.cygnus.com mailing list for the EGCS project. See the EGCS home page for more information.


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

i386.md move reload_in_progress | reload_completed tests


The various i386 move patterns look like:

(define_expand "movhi"
  [(set (match_operand:HI 0 "general_operand" "")
        (match_operand:HI 1 "general_operand" ""))]
  ""
  "
{
  /* Don't generate memory->memory moves, go through a register */
  if (TARGET_MOVE
      && (reload_in_progress | reload_completed) == 0
      && GET_CODE (operands[0]) == MEM
      && GET_CODE (operands[1]) == MEM)
    {
      operands[1] = force_reg (HImode, operands[1]);
    }
}")

The (reload_in_progress | reload_completed) test doesn't seem very useful.
I prefer calling force_reg and having it abort in gen_reg_rtx
(due to the no_new_pseudos test) instead of having gcc believe it was
successful in the situation where operand 0 and 1 are both memory operands
and reload_in_progress / reload_completed is set.  memory->memory moves
are not support by the i386 (other then block moves).

Did I miss something?

-- John
-------------------------------------------------------------------------
|   Feith Systems  |   Voice: 1-215-646-8000  |  Email: john@feith.com  |
|    John Wehle    |     Fax: 1-215-540-5495  |                         |
-------------------------------------------------------------------------