On Mon, 17 Sep 2012, Richard Guenther wrote:

> On Mon, 17 Sep 2012, Diego Novillo wrote:
> 
> > On 2012-09-17 09:25 , Richard Guenther wrote:
> > > 
> > > This makes use of the new builtin functions for FILE, LINE and FUNCTION
> > > to turn gimple_build_assign_with_ops/gimple_build_assign_with_ops3 into
> > > two overloads of gimple_build_assign_with_ops (in theory the _stats
> > > function can go and we could move the inlines to gimple.c instead,
> > > eventually removing the assert and simply calling the 3-op overload
> > > from the 2-op overload?)
> > 
> > Sounds like a good next step, yes.
> > 
> > > The patch merely serves as an example on how to transform mem-stat
> > > code to non-macros.
> > > 
> > > Quickly build-tested with --disable-gather-detailed-mem-stats,
> > > stage1 with --enable-gather-detailed-mem-stats and host GCC 4.6
> > > prints
> > > 
> > > gimple.h:766 ((null))                                         112: 0.0%
> > > 0: 0.0%          0: 0.0%          0: 0.0%
> > > 
> > > for a former gimple_build_assign_with_ops3 call, stage2 (or stage1
> > > with a GCC 4.8 host compiler) prints
> > > 
> > > tree-ssa-math-opts.c:2610 (convert_mult_to_fma)         112: 0.0%
> > > 0: 0.0%          0: 0.0%          0: 0.0%          1
> > > 
> > > so it effectively cripples -fmem-report when not compiled with
> > > a compiler supporting the builtins.
> > 
> > But for a bootstrapped 4.8+ compiler, this won't matter, right?  It's only
> > when using a host compiler that doesn't support the builtins.
> 
> Yes.  Though as it's mostly used for development in which case
> non-bootstrapped compilers are used it makes 
> --enable-gather-detailed-mem-stats less useful unless you know of
> this fact.  It will also actively break installed pre-release 4.8
> compilers used as host compilers ...
> 
> > > Any comments/objections?
> > 
> > Looks good to me.  Thanks.
> 
> Thanks, currently bootstrapping / reg-testing on x86_64-unknown-linux-gnu,
> I'll apply it tomorrow.

It turns out the assert doesn't work anyway, so I've gone with
the following, bootstrapped and tested on x86_64-unknown-linux-gnu
(suprisingly PCH doesn't work with --enable-gather-mem-stats ... huh).

Richard.

2012-09-18  Richard Guenther  <rguent...@suse.de>

        * statistics.h (CXX_MEM_STAT_INFO): New define.
        * gimple.h (gimple_build_assign_with_ops_stat,
        gimple_build_assign_with_ops, gimple_build_assign_with_ops3):
        Turn into an overload of the function gimple_build_assign_with_ops.
        * gimple.c (gimple_build_assign_with_ops_stat): Rename to ...
        (gimple_build_assign_with_ops): ... this.
        * tree-ssa-loop-im.c (move_computations_stmt): Adjust.
        * tree-ssa-math-opts.c (convert_mult_to_fma): Likewise.
        * tree-vect-data-refs.c (vect_permute_store_chain): Likewise.
        (vect_permute_load_chain): Likewise.
        * tree-vect-generic.c (expand_vector_divmod): Likewise.
        * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Likewise.
        (vect_recog_divmod_pattern): Likewise.
        (vect_recog_mixed_size_cond_pattern): Likewise.
        (adjust_bool_pattern): Likewise.
        * tree-vect-slp.c (vect_create_mask_and_perm): Likewise.
        * tree-vect-stmts.c (vectorizable_operation): Likewise.
        (permute_vec_elements): Likewise.
        (vectorizable_load): Likewise.

Index: trunk/gcc/gimple.h
===================================================================
*** trunk.orig/gcc/gimple.h     2012-09-11 12:25:21.000000000 +0200
--- trunk/gcc/gimple.h  2012-09-17 17:06:59.424806556 +0200
*************** gimple gimple_build_assign_stat (tree, t
*** 744,755 ****
  
  void extract_ops_from_tree_1 (tree, enum tree_code *, tree *, tree *, tree *);
  
! gimple gimple_build_assign_with_ops_stat (enum tree_code, tree, tree,
!                                         tree, tree MEM_STAT_DECL);
! #define gimple_build_assign_with_ops(c,o1,o2,o3)                      \
!   gimple_build_assign_with_ops_stat (c, o1, o2, o3, NULL_TREE MEM_STAT_INFO)
! #define gimple_build_assign_with_ops3(c,o1,o2,o3,o4)                  \
!   gimple_build_assign_with_ops_stat (c, o1, o2, o3, o4 MEM_STAT_INFO)
  
  gimple gimple_build_debug_bind_stat (tree, tree, gimple MEM_STAT_DECL);
  #define gimple_build_debug_bind(var,val,stmt)                 \
--- 744,755 ----
  
  void extract_ops_from_tree_1 (tree, enum tree_code *, tree *, tree *, tree *);
  
! gimple
! gimple_build_assign_with_ops (enum tree_code, tree,
!                             tree, tree CXX_MEM_STAT_INFO);
! gimple
! gimple_build_assign_with_ops (enum tree_code, tree,
!                             tree, tree, tree CXX_MEM_STAT_INFO);
  
  gimple gimple_build_debug_bind_stat (tree, tree, gimple MEM_STAT_DECL);
  #define gimple_build_debug_bind(var,val,stmt)                 \
Index: trunk/gcc/tree-ssa-loop-im.c
===================================================================
*** trunk.orig/gcc/tree-ssa-loop-im.c   2012-09-11 16:02:22.000000000 +0200
--- trunk/gcc/tree-ssa-loop-im.c        2012-09-17 14:50:36.634089905 +0200
*************** move_computations_stmt (struct dom_walk_
*** 1273,1281 ****
          gcc_assert (arg0 && arg1);
          t = build2 (gimple_cond_code (cond), boolean_type_node,
                      gimple_cond_lhs (cond), gimple_cond_rhs (cond));
!         new_stmt = gimple_build_assign_with_ops3 (COND_EXPR,
!                                                   gimple_phi_result (stmt),
!                                                   t, arg0, arg1);
          SSA_NAME_DEF_STMT (gimple_phi_result (stmt)) = new_stmt;
          *((unsigned int *)(dw_data->global_data)) |= TODO_cleanup_cfg;
        }
--- 1273,1281 ----
          gcc_assert (arg0 && arg1);
          t = build2 (gimple_cond_code (cond), boolean_type_node,
                      gimple_cond_lhs (cond), gimple_cond_rhs (cond));
!         new_stmt = gimple_build_assign_with_ops (COND_EXPR,
!                                                  gimple_phi_result (stmt),
!                                                  t, arg0, arg1);
          SSA_NAME_DEF_STMT (gimple_phi_result (stmt)) = new_stmt;
          *((unsigned int *)(dw_data->global_data)) |= TODO_cleanup_cfg;
        }
Index: trunk/gcc/tree-ssa-math-opts.c
===================================================================
*** trunk.orig/gcc/tree-ssa-math-opts.c 2012-09-17 14:49:19.000000000 +0200
--- trunk/gcc/tree-ssa-math-opts.c      2012-09-17 14:50:36.634089905 +0200
*************** convert_mult_to_fma (gimple mul_stmt, tr
*** 2604,2613 ****
                                           true, NULL_TREE, true,
                                           GSI_SAME_STMT);
  
!       fma_stmt = gimple_build_assign_with_ops3 (FMA_EXPR,
!                                               gimple_assign_lhs (use_stmt),
!                                               mulop1, op2,
!                                               addop);
        gsi_replace (&gsi, fma_stmt, true);
        widen_mul_stats.fmas_inserted++;
      }
--- 2604,2613 ----
                                           true, NULL_TREE, true,
                                           GSI_SAME_STMT);
  
!       fma_stmt = gimple_build_assign_with_ops (FMA_EXPR,
!                                              gimple_assign_lhs (use_stmt),
!                                              mulop1, op2,
!                                              addop);
        gsi_replace (&gsi, fma_stmt, true);
        widen_mul_stats.fmas_inserted++;
      }
Index: trunk/gcc/tree-vect-data-refs.c
===================================================================
*** trunk.orig/gcc/tree-vect-data-refs.c        2012-08-22 11:30:14.000000000 
+0200
--- trunk/gcc/tree-vect-data-refs.c     2012-09-17 14:50:36.635089901 +0200
*************** vect_permute_store_chain (VEC(tree,heap)
*** 4170,4177 ****
             high = VEC_PERM_EXPR <vect1, vect2, {0, nelt, 1, nelt+1, ...}>  */
          high = make_temp_ssa_name (vectype, NULL, "vect_inter_high");
          perm_stmt
!           = gimple_build_assign_with_ops3 (VEC_PERM_EXPR, high,
!                                            vect1, vect2, perm_mask_high);
          vect_finish_stmt_generation (stmt, perm_stmt, gsi);
          VEC_replace (tree, *result_chain, 2*j, high);
  
--- 4170,4177 ----
             high = VEC_PERM_EXPR <vect1, vect2, {0, nelt, 1, nelt+1, ...}>  */
          high = make_temp_ssa_name (vectype, NULL, "vect_inter_high");
          perm_stmt
!           = gimple_build_assign_with_ops (VEC_PERM_EXPR, high,
!                                           vect1, vect2, perm_mask_high);
          vect_finish_stmt_generation (stmt, perm_stmt, gsi);
          VEC_replace (tree, *result_chain, 2*j, high);
  
*************** vect_permute_store_chain (VEC(tree,heap)
*** 4180,4187 ****
                                                 nelt*3/2+1, ...}>  */
          low = make_temp_ssa_name (vectype, NULL, "vect_inter_low");
          perm_stmt
!           = gimple_build_assign_with_ops3 (VEC_PERM_EXPR, low,
!                                            vect1, vect2, perm_mask_low);
          vect_finish_stmt_generation (stmt, perm_stmt, gsi);
          VEC_replace (tree, *result_chain, 2*j+1, low);
        }
--- 4180,4187 ----
                                                 nelt*3/2+1, ...}>  */
          low = make_temp_ssa_name (vectype, NULL, "vect_inter_low");
          perm_stmt
!           = gimple_build_assign_with_ops (VEC_PERM_EXPR, low,
!                                           vect1, vect2, perm_mask_low);
          vect_finish_stmt_generation (stmt, perm_stmt, gsi);
          VEC_replace (tree, *result_chain, 2*j+1, low);
        }
*************** vect_permute_load_chain (VEC(tree,heap)
*** 4618,4634 ****
  
          /* data_ref = permute_even (first_data_ref, second_data_ref);  */
          data_ref = make_temp_ssa_name (vectype, NULL, "vect_perm_even");
!         perm_stmt = gimple_build_assign_with_ops3 (VEC_PERM_EXPR, data_ref,
!                                                    first_vect, second_vect,
!                                                    perm_mask_even);
          vect_finish_stmt_generation (stmt, perm_stmt, gsi);
          VEC_replace (tree, *result_chain, j/2, data_ref);
  
          /* data_ref = permute_odd (first_data_ref, second_data_ref);  */
          data_ref = make_temp_ssa_name (vectype, NULL, "vect_perm_odd");
!         perm_stmt = gimple_build_assign_with_ops3 (VEC_PERM_EXPR, data_ref,
!                                                    first_vect, second_vect,
!                                                    perm_mask_odd);
          vect_finish_stmt_generation (stmt, perm_stmt, gsi);
          VEC_replace (tree, *result_chain, j/2+length/2, data_ref);
        }
--- 4618,4634 ----
  
          /* data_ref = permute_even (first_data_ref, second_data_ref);  */
          data_ref = make_temp_ssa_name (vectype, NULL, "vect_perm_even");
!         perm_stmt = gimple_build_assign_with_ops (VEC_PERM_EXPR, data_ref,
!                                                   first_vect, second_vect,
!                                                   perm_mask_even);
          vect_finish_stmt_generation (stmt, perm_stmt, gsi);
          VEC_replace (tree, *result_chain, j/2, data_ref);
  
          /* data_ref = permute_odd (first_data_ref, second_data_ref);  */
          data_ref = make_temp_ssa_name (vectype, NULL, "vect_perm_odd");
!         perm_stmt = gimple_build_assign_with_ops (VEC_PERM_EXPR, data_ref,
!                                                   first_vect, second_vect,
!                                                   perm_mask_odd);
          vect_finish_stmt_generation (stmt, perm_stmt, gsi);
          VEC_replace (tree, *result_chain, j/2+length/2, data_ref);
        }
Index: trunk/gcc/tree-vect-generic.c
===================================================================
*** trunk.orig/gcc/tree-vect-generic.c  2012-09-11 10:30:13.000000000 +0200
--- trunk/gcc/tree-vect-generic.c       2012-09-17 14:50:36.635089901 +0200
*************** expand_vector_divmod (gimple_stmt_iterat
*** 667,674 ****
                                         << shifts[i]) - 1);
              cst = build_vector (type, vec);
              addend = make_ssa_name (type, NULL);
!             stmt = gimple_build_assign_with_ops3 (VEC_COND_EXPR, addend,
!                                                   cond, cst, zero);
              gsi_insert_before (gsi, stmt, GSI_SAME_STMT);
            }
        }
--- 667,674 ----
                                         << shifts[i]) - 1);
              cst = build_vector (type, vec);
              addend = make_ssa_name (type, NULL);
!             stmt = gimple_build_assign_with_ops (VEC_COND_EXPR, addend,
!                                                  cond, cst, zero);
              gsi_insert_before (gsi, stmt, GSI_SAME_STMT);
            }
        }
Index: trunk/gcc/tree-vect-patterns.c
===================================================================
*** trunk.orig/gcc/tree-vect-patterns.c 2012-08-20 13:56:21.000000000 +0200
--- trunk/gcc/tree-vect-patterns.c      2012-09-17 14:50:36.636089897 +0200
*************** vect_recog_dot_prod_pattern (VEC (gimple
*** 413,420 ****
  
    /* Pattern detected. Create a stmt to be used to replace the pattern: */
    var = vect_recog_temp_ssa_var (type, NULL);
!   pattern_stmt = gimple_build_assign_with_ops3 (DOT_PROD_EXPR, var,
!                                               oprnd00, oprnd01, oprnd1);
  
    if (vect_print_dump_info (REPORT_DETAILS))
      {
--- 413,420 ----
  
    /* Pattern detected. Create a stmt to be used to replace the pattern: */
    var = vect_recog_temp_ssa_var (type, NULL);
!   pattern_stmt = gimple_build_assign_with_ops (DOT_PROD_EXPR, var,
!                                              oprnd00, oprnd01, oprnd1);
  
    if (vect_print_dump_info (REPORT_DETAILS))
      {
*************** vect_recog_divmod_pattern (VEC (gimple,
*** 1688,1699 ****
          tree var = vect_recog_temp_ssa_var (itype, NULL);
          tree shift;
          def_stmt
!           = gimple_build_assign_with_ops3 (COND_EXPR, var, cond,
!                                            fold_build2 (MINUS_EXPR, itype,
!                                                         oprnd1,
!                                                         build_int_cst (itype,
!                                                                        1)),
!                                            build_int_cst (itype, 0));
          new_pattern_def_seq (stmt_vinfo, def_stmt);
          var = vect_recog_temp_ssa_var (itype, NULL);
          def_stmt
--- 1688,1699 ----
          tree var = vect_recog_temp_ssa_var (itype, NULL);
          tree shift;
          def_stmt
!           = gimple_build_assign_with_ops (COND_EXPR, var, cond,
!                                           fold_build2 (MINUS_EXPR, itype,
!                                                        oprnd1,
!                                                        build_int_cst (itype,
!                                                                       1)),
!                                           build_int_cst (itype, 0));
          new_pattern_def_seq (stmt_vinfo, def_stmt);
          var = vect_recog_temp_ssa_var (itype, NULL);
          def_stmt
*************** vect_recog_divmod_pattern (VEC (gimple,
*** 1716,1724 ****
            {
              signmask = vect_recog_temp_ssa_var (itype, NULL);
              def_stmt
!               = gimple_build_assign_with_ops3 (COND_EXPR, signmask, cond,
!                                                build_int_cst (itype, 1),
!                                                build_int_cst (itype, 0));
              append_pattern_def_seq (stmt_vinfo, def_stmt);
            }
          else
--- 1716,1724 ----
            {
              signmask = vect_recog_temp_ssa_var (itype, NULL);
              def_stmt
!               = gimple_build_assign_with_ops (COND_EXPR, signmask, cond,
!                                               build_int_cst (itype, 1),
!                                               build_int_cst (itype, 0));
              append_pattern_def_seq (stmt_vinfo, def_stmt);
            }
          else
*************** vect_recog_divmod_pattern (VEC (gimple,
*** 1732,1740 ****
              tree var = vect_recog_temp_ssa_var (utype, NULL);
  
              def_stmt
!               = gimple_build_assign_with_ops3 (COND_EXPR, var, cond,
!                                                build_int_cst (utype, -1),
!                                                build_int_cst (utype, 0));
              def_stmt_vinfo
                = new_stmt_vec_info (def_stmt, loop_vinfo, bb_vinfo);
              set_vinfo_for_stmt (def_stmt, def_stmt_vinfo);
--- 1732,1740 ----
              tree var = vect_recog_temp_ssa_var (utype, NULL);
  
              def_stmt
!               = gimple_build_assign_with_ops (COND_EXPR, var, cond,
!                                               build_int_cst (utype, -1),
!                                               build_int_cst (utype, 0));
              def_stmt_vinfo
                = new_stmt_vec_info (def_stmt, loop_vinfo, bb_vinfo);
              set_vinfo_for_stmt (def_stmt, def_stmt_vinfo);
*************** vect_recog_mixed_size_cond_pattern (VEC
*** 2172,2182 ****
      }
  
    def_stmt
!     = gimple_build_assign_with_ops3 (COND_EXPR,
!                                    vect_recog_temp_ssa_var (itype, NULL),
!                                    unshare_expr (cond_expr),
!                                    fold_convert (itype, then_clause),
!                                    fold_convert (itype, else_clause));
    pattern_stmt
      = gimple_build_assign_with_ops (NOP_EXPR,
                                    vect_recog_temp_ssa_var (type, NULL),
--- 2172,2182 ----
      }
  
    def_stmt
!     = gimple_build_assign_with_ops (COND_EXPR,
!                                   vect_recog_temp_ssa_var (itype, NULL),
!                                   unshare_expr (cond_expr),
!                                   fold_convert (itype, then_clause),
!                                   fold_convert (itype, else_clause));
    pattern_stmt
      = gimple_build_assign_with_ops (NOP_EXPR,
                                    vect_recog_temp_ssa_var (type, NULL),
*************** adjust_bool_pattern (tree var, tree out_
*** 2476,2485 ****
        gcc_checking_assert (useless_type_conversion_p (itype,
                                                        TREE_TYPE (trueval)));
        pattern_stmt
!       = gimple_build_assign_with_ops3 (COND_EXPR,
!                                        vect_recog_temp_ssa_var (itype, NULL),
!                                        cond_expr, trueval,
!                                        build_int_cst (itype, 0));
        break;
      }
  
--- 2476,2485 ----
        gcc_checking_assert (useless_type_conversion_p (itype,
                                                        TREE_TYPE (trueval)));
        pattern_stmt
!       = gimple_build_assign_with_ops (COND_EXPR,
!                                       vect_recog_temp_ssa_var (itype, NULL),
!                                       cond_expr, trueval,
!                                       build_int_cst (itype, 0));
        break;
      }
  
Index: trunk/gcc/tree-vect-slp.c
===================================================================
*** trunk.orig/gcc/tree-vect-slp.c      2012-09-11 10:30:16.000000000 +0200
--- trunk/gcc/tree-vect-slp.c   2012-09-17 14:50:36.636089897 +0200
*************** vect_create_mask_and_perm (gimple stmt,
*** 2672,2679 ****
        second_vec = VEC_index (tree, dr_chain, second_vec_indx);
  
        /* Generate the permute statement.  */
!       perm_stmt = gimple_build_assign_with_ops3 (VEC_PERM_EXPR, perm_dest,
!                                                first_vec, second_vec, mask);
        data_ref = make_ssa_name (perm_dest, perm_stmt);
        gimple_set_lhs (perm_stmt, data_ref);
        vect_finish_stmt_generation (stmt, perm_stmt, gsi);
--- 2672,2679 ----
        second_vec = VEC_index (tree, dr_chain, second_vec_indx);
  
        /* Generate the permute statement.  */
!       perm_stmt = gimple_build_assign_with_ops (VEC_PERM_EXPR, perm_dest,
!                                               first_vec, second_vec, mask);
        data_ref = make_ssa_name (perm_dest, perm_stmt);
        gimple_set_lhs (perm_stmt, data_ref);
        vect_finish_stmt_generation (stmt, perm_stmt, gsi);
Index: trunk/gcc/tree-vect-stmts.c
===================================================================
*** trunk.orig/gcc/tree-vect-stmts.c    2012-08-23 12:08:08.000000000 +0200
--- trunk/gcc/tree-vect-stmts.c 2012-09-17 14:50:36.637089892 +0200
*************** vectorizable_operation (gimple stmt, gim
*** 3702,3709 ****
                  ? VEC_index (tree, vec_oprnds1, i) : NULL_TREE);
          vop2 = ((op_type == ternary_op)
                  ? VEC_index (tree, vec_oprnds2, i) : NULL_TREE);
!         new_stmt = gimple_build_assign_with_ops3 (code, vec_dest,
!                                                   vop0, vop1, vop2);
          new_temp = make_ssa_name (vec_dest, new_stmt);
          gimple_assign_set_lhs (new_stmt, new_temp);
          vect_finish_stmt_generation (stmt, new_stmt, gsi);
--- 3702,3709 ----
                  ? VEC_index (tree, vec_oprnds1, i) : NULL_TREE);
          vop2 = ((op_type == ternary_op)
                  ? VEC_index (tree, vec_oprnds2, i) : NULL_TREE);
!         new_stmt = gimple_build_assign_with_ops (code, vec_dest,
!                                                  vop0, vop1, vop2);
          new_temp = make_ssa_name (vec_dest, new_stmt);
          gimple_assign_set_lhs (new_stmt, new_temp);
          vect_finish_stmt_generation (stmt, new_stmt, gsi);
*************** permute_vec_elements (tree x, tree y, tr
*** 4235,4242 ****
    data_ref = make_ssa_name (perm_dest, NULL);
  
    /* Generate the permute statement.  */
!   perm_stmt = gimple_build_assign_with_ops3 (VEC_PERM_EXPR, data_ref,
!                                            x, y, mask_vec);
    vect_finish_stmt_generation (stmt, perm_stmt, gsi);
  
    return data_ref;
--- 4235,4242 ----
    data_ref = make_ssa_name (perm_dest, NULL);
  
    /* Generate the permute statement.  */
!   perm_stmt = gimple_build_assign_with_ops (VEC_PERM_EXPR, data_ref,
!                                           x, y, mask_vec);
    vect_finish_stmt_generation (stmt, perm_stmt, gsi);
  
    return data_ref;
*************** vectorizable_load (gimple stmt, gimple_s
*** 5047,5055 ****
                    realignment_token = dataref_ptr;
                  vec_dest = vect_create_destination_var (scalar_dest, vectype);
                  new_stmt
!                   = gimple_build_assign_with_ops3 (REALIGN_LOAD_EXPR,
!                                                    vec_dest, msq, lsq,
!                                                    realignment_token);
                  new_temp = make_ssa_name (vec_dest, new_stmt);
                  gimple_assign_set_lhs (new_stmt, new_temp);
                  vect_finish_stmt_generation (stmt, new_stmt, gsi);
--- 5047,5055 ----
                    realignment_token = dataref_ptr;
                  vec_dest = vect_create_destination_var (scalar_dest, vectype);
                  new_stmt
!                   = gimple_build_assign_with_ops (REALIGN_LOAD_EXPR,
!                                                   vec_dest, msq, lsq,
!                                                   realignment_token);
                  new_temp = make_ssa_name (vec_dest, new_stmt);
                  gimple_assign_set_lhs (new_stmt, new_temp);
                  vect_finish_stmt_generation (stmt, new_stmt, gsi);
Index: trunk/gcc/statistics.h
===================================================================
*** trunk.orig/gcc/statistics.h 2012-08-15 14:42:31.000000000 +0200
--- trunk/gcc/statistics.h      2012-09-17 15:07:35.415054634 +0200
***************
*** 38,43 ****
--- 38,48 ----
  #define PASS_MEM_STAT , ALONE_PASS_MEM_STAT
  #define FINAL_PASS_MEM_STAT , ALONE_FINAL_PASS_MEM_STAT
  #define MEM_STAT_INFO , ALONE_MEM_STAT_INFO
+ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
+ #define CXX_MEM_STAT_INFO , const char * _loc_name = __builtin_FILE (), int 
_loc_line = __builtin_LINE (), const char * _loc_function = __builtin_FUNCTION 
()
+ #else
+ #define CXX_MEM_STAT_INFO , const char * _loc_name = __FILE__, int _loc_line 
= __LINE__, const char * _loc_function = NULL
+ #endif
  #else
  #define ALONE_MEM_STAT_DECL void
  #define ALONE_FINAL_MEM_STAT_DECL GCC_MEM_STAT_ARGUMENTS
***************
*** 49,54 ****
--- 54,60 ----
  #define PASS_MEM_STAT
  #define FINAL_PASS_MEM_STAT , ALONE_FINAL_PASS_MEM_STAT
  #define MEM_STAT_INFO ALONE_MEM_STAT_INFO
+ #define CXX_MEM_STAT_INFO
  #endif
  
  struct function;
Index: trunk/gcc/gimple.c
===================================================================
*** trunk.orig/gcc/gimple.c     2012-09-11 12:36:46.000000000 +0200
--- trunk/gcc/gimple.c  2012-09-17 17:07:31.159805483 +0200
*************** gimple_build_assign_stat (tree lhs, tree
*** 424,431 ****
    tree op1, op2, op3;
  
    extract_ops_from_tree_1 (rhs, &subcode, &op1, &op2, &op3);
!   return gimple_build_assign_with_ops_stat (subcode, lhs, op1, op2, op3
!                                           PASS_MEM_STAT);
  }
  
  
--- 424,431 ----
    tree op1, op2, op3;
  
    extract_ops_from_tree_1 (rhs, &subcode, &op1, &op2, &op3);
!   return gimple_build_assign_with_ops (subcode, lhs, op1, op2, op3
!                                      PASS_MEM_STAT);
  }
  
  
*************** gimple_build_assign_stat (tree lhs, tree
*** 434,441 ****
     GIMPLE_UNARY_RHS or GIMPLE_SINGLE_RHS.  */
  
  gimple
! gimple_build_assign_with_ops_stat (enum tree_code subcode, tree lhs, tree op1,
!                                    tree op2, tree op3 MEM_STAT_DECL)
  {
    unsigned num_ops;
    gimple p;
--- 434,441 ----
     GIMPLE_UNARY_RHS or GIMPLE_SINGLE_RHS.  */
  
  gimple
! gimple_build_assign_with_ops (enum tree_code subcode, tree lhs, tree op1,
!                             tree op2, tree op3 MEM_STAT_DECL)
  {
    unsigned num_ops;
    gimple p;
*************** gimple_build_assign_with_ops_stat (enum
*** 463,468 ****
--- 463,476 ----
    return p;
  }
  
+ gimple
+ gimple_build_assign_with_ops (enum tree_code subcode, tree lhs, tree op1,
+                             tree op2 MEM_STAT_DECL)
+ {
+   return gimple_build_assign_with_ops (subcode, lhs, op1, op2, NULL_TREE
+                                      PASS_MEM_STAT);
+ }
+ 
  
  /* Build a new GIMPLE_ASSIGN tuple and append it to the end of *SEQ_P.
  

Reply via email to