On Fri, 17 Oct 2014, Richard Biener wrote:
> On Thu, 16 Oct 2014, Sebastian Pop wrote:
>
> > Richard Biener wrote:
> > > To give you an example how it looks like, the following code is
> > > generated for
> > >
> > > /* fold_negate_exprs convert - (~A) to A + 1. */
> > > (simplify
> > > (negate (bit_not @0))
> > > (if (INTEGRAL_TYPE_P (type))
> > > (plus @0 { build_int_cst (TREE_TYPE (@0), 1); } )))
> > >
> > > tree
> > > generic_simplify (enum tree_code code, tree type ATTRIBUTE_UNUSED, tree
> > > op0)
> >
> > I wonder why ATTRIBUTE_UNUSED is generated for used parameters.
>
> I've added them for the initial patch set because without any patterns
> defined (just 1/n and 2/n) only one of the parameters will be used.
>
> Consider them removed again once we have enough patterns to make
> bootstrap happy after that.
>
> > > {
> > > if ((op0 && TREE_SIDE_EFFECTS (op0)))
> > > return NULL_TREE;
> > > switch (code)
> > > {
> > > ...
> > > case NEGATE_EXPR:
> > > {
> > > switch (TREE_CODE (op0))
> > > {
> > > case BIT_NOT_EXPR:
> > > {
> > > tree o20 = TREE_OPERAND (op0, 0);
> > > {
> > > /* #line 136
> > > "/space/rguenther/src/svn/match-and-simplify/gcc/match.pd" */
> > > tree captures[2] ATTRIBUTE_UNUSED = {};
> >
> > Same here.
> > Also, why do we allocate two elements when only captures[0] is used?
>
> Good question - I'll have a look.
Fixed by the following - bootstrapped on x86_64-unknown-linux-gnu,
applied.
Richard.
2014-10-17 Richard Biener <[email protected]>
* genmatch.c (simplify::simplify): Fix off-by-one error.
Index: gcc/genmatch.c
===================================================================
--- gcc/genmatch.c (revision 216316)
+++ gcc/genmatch.c (working copy)
@@ -495,7 +495,7 @@ struct simplify
: match (match_), match_location (match_location_),
result (result_), result_location (result_location_),
ifexpr_vec (ifexpr_vec_), for_vec (for_vec_),
- capture_ids (capture_ids_), capture_max (capture_ids_->size ()) {}
+ capture_ids (capture_ids_), capture_max (capture_ids_->size () - 1) {}
/* The expression that is matched against the GENERIC or GIMPLE IL. */
operand *match;