This is the mail archive of the gcc@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: Question about "match_dup"


Andrew Pinski <pinskia@physics.uc.edu> writes:

> On Sunday, Sep 7, 2003, at 20:54 US/Pacific, Ian Lance Taylor wrote:
> 
> > <fishbaoz@hotmail.com> writes:
> >
> >> What is the exact meaning of "match_dup"?
> >>
> >> the following is extracted from "mips.md"
> >>
> >> (define_expand "movsicc"
> >>   [(set (match_dup 4) (match_operand 1 "comparison_operator" ""))
> >>    (set (match_operand:SI 0 "register_operand" "")
> >>  (if_then_else:SI (match_dup 5)
> >>     (match_operand:SI 2 "reg_or_0_operand" "")
> >>     (match_operand:SI 3 "reg_or_0_operand" "")))]
> >>   "mips_isa >= 4"
> >>   "
> >> {
> >>   gen_conditional_move (operands);
> >>   DONE;
> >> }")
> >>
> >> Now?
> >> what is the meaning of "match_dup" in the machine description above?
> >> what does it "duplicate"? Operand(4)? where is the original
> >> Operand(4)?
> >
> > The preparation statements always call DONE.  That means that the RTL
> > template is never used, and is in effect a comment.  The insns are
> > generated by gen_conditional_move().
> 
> But match_dup is needed to get a fourth operand, this technic is used in
> other machine descriptions (like ffssi2 in rs6000.md) and then you
> create
> the operand.

What you say is of course true, but I want to clarify for the original
poster that what I said is also true.  The MIPS movsicc pattern
doesn't need to call match_dup, as the RTL template is never used.
Calling match_dup is a meaningful part of the comment, because of what
Andrew writes.

Ian


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