Thanks for the comments. All comments are accepted and the updated patch is
attached.

-Zhenqiang

> -----Original Message-----
> From: Richard Henderson [mailto:r...@redhat.com]
> Sent: Saturday, October 11, 2014 11:00 PM
> To: Zhenqiang Chen; gcc-patches@gcc.gnu.org
> Subject: Re: [Ping] [PATCH, 1/10] two hooks for conditional compare (ccmp)
> 
> On 09/22/2014 11:43 PM, Zhenqiang Chen wrote:
> >
> > +@cindex @code{ccmp} instruction pattern @item @samp{ccmp}
> Conditional
> > +compare instruction.  Operand 2 and 5 are RTLs which perform two
> > +comparisons.  Operand 1 is AND or IOR, which operates on the result
> > +of operand 2 and 5.
> > +It uses recursive method to support more than two compares.  e.g.
> > +
> > +  CC0 = CMP (a, b);
> > +  CC1 = CCMP (NE (CC0, 0), CMP (e, f));  ...
> > +  CCn = CCMP (NE (CCn-1, 0), CMP (...));
> > +
> > +Two target hooks are used to generate conditional compares.
> > +GEN_CCMP_FISRT is used to generate the first CMP.  And
> GEN_CCMP_NEXT
> > +is used to generate the following CCMPs.  Operand 1 is AND or IOR.
> > +Operand 3 is the result of GEN_CCMP_FISRT or a previous
> GEN_CCMP_NEXT.  Operand 2 is NE.
> > +Operand 4, 5 and 6 is another compare expression.
> > +
> > +A typical CCMP pattern looks like
> > +
> > +@smallexample
> > +(define_insn "*ccmp_and_ior"
> > +  [(set (match_operand 0 "dominant_cc_register" "")
> > +        (compare
> > +         (match_operator 1
> > +          (match_operator 2 "comparison_operator"
> > +           [(match_operand 3 "dominant_cc_register")
> > +            (const_int 0)])
> > +          (match_operator 4 "comparison_operator"
> > +           [(match_operand 5 "register_operand")
> > +            (match_operand 6 "compare_operand"]))
> > +         (const_int 0)))]
> > +  ""
> > +  "@dots{}")
> > +@end smallexample
> > +
> 
> This whole section should be removed.  You do not have a named ccmp
> pattern.
> Even your example below is an *unnamed pattern.  This is an
> implementation detail of the aarch64 backend.
> 
> Named patterns are used when that is the interface the middle-end uses to
> emit code.  But you're not using named patterns, you're using:
> 
> >
> > +@deftypefn {Target Hook} rtx TARGET_GEN_CCMP_FIRST (int
> @var{code},
> > +rtx @var{op0}, rtx @var{op1}) This function emits a comparison insn
> > +for the first of a sequence of  conditional comparisions.  It returns
> > +a comparison expression appropriate  for passing to
> @code{gen_ccmp_next} or to @code{cbranch_optab}.
> > + @code{unsignedp} is used when converting @code{op0} and
> @code{op1}'s mode.
> > +@end deftypefn
> > +
> > +@deftypefn {Target Hook} rtx TARGET_GEN_CCMP_NEXT (rtx @var{prev},
> > +int @var{cmp_code}, rtx @var{op0}, rtx @var{op1}, int @var{bit_code})
> > +This function emits a conditional comparison within a sequence of
> > +conditional comparisons.  The @code{prev} expression is the result of
> > +a  prior call to @code{gen_ccmp_first} or @code{gen_ccmp_next}.  It
> > +may return  @code{NULL} if the combination of @code{prev} and this
> > +comparison is  not supported, otherwise the result must be
> > +appropriate for passing to  @code{gen_ccmp_next} or
> @code{cbranch_optab}.  @code{bit_code}  is AND or IOR, which is the op on
> the two compares.
> > +@end deftypefn
> 
> Every place above where you refer to the arguments of the function should
> use @var; you're using @code for most of them.  Use @code{AND} and
> @code{IOR}.
> 
> 
> r~

Attachment: 1-hooks.patch
Description: Binary data

Reply via email to