[PATCH][4/n] Merge from match-and-simplify, hook into fold-const.c
Sebastian Pop
sebpop@gmail.com
Thu Oct 16 19:14:00 GMT 2014
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.
> {
> 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?
> captures[0] = o20;
> /* #line 135 "/space/rguenther/src/svn/match-and-simplify/gcc/match.pd" */
> if (INTEGRAL_TYPE_P (type))
> {
> if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "Applying pattern match.pd:136, %s:%d\n", __FILE__, __LINE__);
> tree res_op0;
> res_op0 = captures[0];
> tree res_op1;
> res_op1 = build_int_cst (TREE_TYPE (captures[0]), 1);
> return fold_build2 (PLUS_EXPR, type, res_op0, res_op1);
> }
> }
> break;
> }
> ...
More information about the Gcc-patches
mailing list