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 c/68635] New: IRA: Should update cost when choose an alternative for an insn?


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68635

            Bug ID: 68635
           Summary: IRA: Should update cost when choose an alternative for
                    an insn?
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: Abnerkook at foxmail dot com
  Target Milestone: ---

When I write a pattern for addsi3 as follows:
(define_insn "addsi3"
  [(set (match_operand:SI 0 "register_operand" "=r,r")
        (plus:SI (match_operand:SI 1 "register_operand" "zra,zrb")
                 (match_operand:SI 2 "register_operand" "zra,zrb")))])

Here, zra and zrb are non-intersect regclass, the selection of alternative is
decided by the register allocation.

But, sometimes when IRA choosing regclass for operand 2 after already allocated
zra to operand 1, because zrb's cost is less than zra, IRA choose zrb for
operand 2. To obey the constraint, additional move insn will be emitted which
we not expect.

So, updating cost when choose an alternative for an insn will be better for
this caseï Or, is there some methods to advoid this case?

Please give me some advice, I shall be very grateful. Sorry for my poor
English.

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