This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Question about "match_dup"
- From: Ian Lance Taylor <ian at airs dot com>
- To: Andrew Pinski <pinskia at physics dot uc dot edu>
- Cc: <fishbaoz at hotmail dot com>, <gcc at gcc dot gnu dot org>
- Date: 07 Sep 2003 21:07:24 -0700
- Subject: Re: Question about "match_dup"
- References: <0CB1BD13-E1B1-11D7-A98B-000393A6D2F2@physics.uc.edu>
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