diff options
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/alpha/alpha.c | 48 | ||||
-rw-r--r-- | gcc/config/frv/frv.c | 2 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 52 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.c | 10 | ||||
-rw-r--r-- | gcc/config/m32c/m32c-protos.h | 4 | ||||
-rw-r--r-- | gcc/config/m32c/m32c.c | 2 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 20 | ||||
-rw-r--r-- | gcc/config/pa/pa.c | 7 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 80 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 40 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 52 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 10 | ||||
-rw-r--r-- | gcc/config/spu/spu.c | 33 | ||||
-rw-r--r-- | gcc/config/stormy16/stormy16.c | 21 | ||||
-rw-r--r-- | gcc/config/xtensa/xtensa.c | 30 |
15 files changed, 192 insertions, 219 deletions
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 3509942..e2835ac 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1,6 +1,6 @@ /* Subroutines used for code generation on the DEC Alpha. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) This file is part of GCC. @@ -51,7 +51,7 @@ along with GCC; see the file COPYING3. If not see #include "langhooks.h" #include <splay-tree.h> #include "cfglayout.h" -#include "tree-gimple.h" +#include "gimple.h" #include "tree-flow.h" #include "tree-stdarg.h" #include "tm-constrs.h" @@ -5817,11 +5817,11 @@ va_list_skip_additions (tree lhs) if (TREE_CODE (stmt) == PHI_NODE) return stmt; - if (TREE_CODE (stmt) != GIMPLE_MODIFY_STMT - || GIMPLE_STMT_OPERAND (stmt, 0) != lhs) + if (TREE_CODE (stmt) != MODIFY_EXPR + || TREE_OPERAND (stmt, 0) != lhs) return lhs; - rhs = GIMPLE_STMT_OPERAND (stmt, 1); + rhs = TREE_OPERAND (stmt, 1); if (TREE_CODE (rhs) == WITH_SIZE_EXPR) rhs = TREE_OPERAND (rhs, 0); @@ -5856,11 +5856,17 @@ va_list_skip_additions (tree lhs) current statement. */ static bool -alpha_stdarg_optimize_hook (struct stdarg_info *si, const_tree lhs, const_tree rhs) +alpha_stdarg_optimize_hook (struct stdarg_info *si, const_gimple stmt) { tree base, offset, arg1, arg2; int offset_arg = 1; +#if 1 + /* FIXME tuples. */ + (void) si; + (void) stmt; + return false; +#else while (handled_component_p (rhs)) rhs = TREE_OPERAND (rhs, 0); if (TREE_CODE (rhs) != INDIRECT_REF @@ -5953,6 +5959,7 @@ alpha_stdarg_optimize_hook (struct stdarg_info *si, const_tree lhs, const_tree r escapes: si->va_list_escapes = true; return false; +#endif } #endif @@ -6087,7 +6094,7 @@ alpha_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) { nextarg = plus_constant (nextarg, offset); nextarg = plus_constant (nextarg, NUM_ARGS * UNITS_PER_WORD); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (valist), valist, + t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, make_tree (ptr_type_node, nextarg)); TREE_SIDE_EFFECTS (t) = 1; @@ -6106,20 +6113,20 @@ alpha_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) t = make_tree (ptr_type_node, virtual_incoming_args_rtx); t = build2 (POINTER_PLUS_EXPR, ptr_type_node, t, size_int (offset)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (base_field), base_field, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (base_field), base_field, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); t = build_int_cst (NULL_TREE, NUM_ARGS * UNITS_PER_WORD); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (offset_field), - offset_field, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } } static tree -alpha_gimplify_va_arg_1 (tree type, tree base, tree offset, tree *pre_p) +alpha_gimplify_va_arg_1 (tree type, tree base, gimple_seq offset, + gimple_seq *pre_p) { tree type_size, ptr_type, addend, t, addr, internal_post; @@ -6128,9 +6135,9 @@ alpha_gimplify_va_arg_1 (tree type, tree base, tree offset, tree *pre_p) if (targetm.calls.must_pass_in_stack (TYPE_MODE (type), type)) { t = build_int_cst (TREE_TYPE (offset), 6*8); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (offset), offset, - build2 (MAX_EXPR, TREE_TYPE (offset), offset, t)); - gimplify_and_add (t, pre_p); + gimplify_assign (offset, + build2 (MAX_EXPR, TREE_TYPE (offset), offset, t), + pre_p); } addend = offset; @@ -6182,15 +6189,15 @@ alpha_gimplify_va_arg_1 (tree type, tree base, tree offset, tree *pre_p) t = size_binop (MULT_EXPR, t, size_int (8)); } t = fold_convert (TREE_TYPE (offset), t); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, offset, - build2 (PLUS_EXPR, TREE_TYPE (offset), offset, t)); - gimplify_and_add (t, pre_p); + gimplify_assign (offset, build2 (PLUS_EXPR, TREE_TYPE (offset), offset, t), + pre_p); return build_va_arg_indirect_ref (addr); } static tree -alpha_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) +alpha_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p) { tree offset_field, base_field, offset, base, t, r; bool indirect; @@ -6222,9 +6229,8 @@ alpha_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) r = alpha_gimplify_va_arg_1 (type, base, offset, pre_p); /* Stuff the offset temporary back into its field. */ - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, offset_field, - fold_convert (TREE_TYPE (offset_field), offset)); - gimplify_and_add (t, pre_p); + gimplify_assign (offset_field, + fold_convert (TREE_TYPE (offset_field), offset), pre_p); if (indirect) r = build_va_arg_indirect_ref (r); diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c index 6ba924b..07e8eaa 100644 --- a/gcc/config/frv/frv.c +++ b/gcc/config/frv/frv.c @@ -2207,7 +2207,7 @@ frv_expand_builtin_va_start (tree valist, rtx nextarg) debug_rtx (nextarg); } - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (valist), valist, + t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, fold_convert (TREE_TYPE (valist), make_tree (sizetype, nextarg))); TREE_SIDE_EFFECTS (t) = 1; diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7b4c243..62d1b8d 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -48,7 +48,7 @@ along with GCC; see the file COPYING3. If not see #include "target-def.h" #include "langhooks.h" #include "cgraph.h" -#include "tree-gimple.h" +#include "gimple.h" #include "dwarf2.h" #include "df.h" #include "tm-constrs.h" @@ -6327,8 +6327,8 @@ ix86_va_start (tree valist, rtx nextarg) if (cfun->va_list_gpr_size) { type = TREE_TYPE (gpr); - t = build2 (GIMPLE_MODIFY_STMT, type, gpr, - build_int_cst (type, n_gpr * 8)); + t = build2 (MODIFY_EXPR, type, + gpr, build_int_cst (type, n_gpr * 8)); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } @@ -6336,7 +6336,7 @@ ix86_va_start (tree valist, rtx nextarg) if (cfun->va_list_fpr_size) { type = TREE_TYPE (fpr); - t = build2 (GIMPLE_MODIFY_STMT, type, fpr, + t = build2 (MODIFY_EXPR, type, fpr, build_int_cst (type, n_fpr * 16 + 8*X86_64_REGPARM_MAX)); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -6348,7 +6348,7 @@ ix86_va_start (tree valist, rtx nextarg) if (words != 0) t = build2 (POINTER_PLUS_EXPR, type, t, size_int (words * UNITS_PER_WORD)); - t = build2 (GIMPLE_MODIFY_STMT, type, ovf, t); + t = build2 (MODIFY_EXPR, type, ovf, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -6358,7 +6358,7 @@ ix86_va_start (tree valist, rtx nextarg) Prologue of the function save it right above stack frame. */ type = TREE_TYPE (sav); t = make_tree (type, frame_pointer_rtx); - t = build2 (GIMPLE_MODIFY_STMT, type, sav, t); + t = build2 (MODIFY_EXPR, type, sav, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } @@ -6367,7 +6367,8 @@ ix86_va_start (tree valist, rtx nextarg) /* Implement va_arg. */ static tree -ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) +ix86_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p) { static const int intreg[6] = { 0, 1, 2, 3, 4, 5 }; tree f_gpr, f_fpr, f_ovf, f_sav; @@ -6497,16 +6498,14 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) /* int_addr = gpr + sav; */ t = fold_convert (sizetype, gpr); t = build2 (POINTER_PLUS_EXPR, ptr_type_node, sav, t); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, int_addr, t); - gimplify_and_add (t, pre_p); + gimplify_assign (int_addr, t, pre_p); } if (needed_sseregs) { /* sse_addr = fpr + sav; */ t = fold_convert (sizetype, fpr); t = build2 (POINTER_PLUS_EXPR, ptr_type_node, sav, t); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, sse_addr, t); - gimplify_and_add (t, pre_p); + gimplify_assign (sse_addr, t, pre_p); } if (need_temp) { @@ -6515,8 +6514,7 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) /* addr = &temp; */ t = build1 (ADDR_EXPR, build_pointer_type (type), temp); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, t); - gimplify_and_add (t, pre_p); + gimplify_assign (addr, t, pre_p); for (i = 0; i < XVECLEN (container, 0); i++) { @@ -6549,8 +6547,7 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) size_int (INTVAL (XEXP (slot, 1)))); dest = build_va_arg_indirect_ref (dest_addr); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, dest, src); - gimplify_and_add (t, pre_p); + gimplify_assign (dest, src, pre_p); } } @@ -6558,22 +6555,19 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) { t = build2 (PLUS_EXPR, TREE_TYPE (gpr), gpr, build_int_cst (TREE_TYPE (gpr), needed_intregs * 8)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (gpr), gpr, t); - gimplify_and_add (t, pre_p); + gimplify_assign (gpr, t, pre_p); } + if (needed_sseregs) { t = build2 (PLUS_EXPR, TREE_TYPE (fpr), fpr, build_int_cst (TREE_TYPE (fpr), needed_sseregs * 16)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (fpr), fpr, t); - gimplify_and_add (t, pre_p); + gimplify_assign (fpr, t, pre_p); } - t = build1 (GOTO_EXPR, void_type_node, lab_over); - gimplify_and_add (t, pre_p); + gimple_seq_add_stmt (pre_p, gimple_build_goto (lab_over)); - t = build1 (LABEL_EXPR, void_type_node, lab_false); - append_to_statement_list (t, pre_p); + gimple_seq_add_stmt (pre_p, gimple_build_label (lab_false)); } /* ... otherwise out of the overflow area. */ @@ -6601,20 +6595,14 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) t = fold_convert (TREE_TYPE (ovf), t); } gimplify_expr (&t, pre_p, NULL, is_gimple_val, fb_rvalue); - - t2 = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, t); - gimplify_and_add (t2, pre_p); + gimplify_assign (addr, t, pre_p); t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (t), t, size_int (rsize * UNITS_PER_WORD)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (ovf), ovf, t); - gimplify_and_add (t, pre_p); + gimplify_assign (unshare_expr (ovf), t, pre_p); if (container) - { - t = build1 (LABEL_EXPR, void_type_node, lab_over); - append_to_statement_list (t, pre_p); - } + gimple_seq_add_stmt (pre_p, gimple_build_label (lab_over)); ptrtype = build_pointer_type (type); addr = fold_convert (ptrtype, addr); diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 29a9a8d..c07b21d 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -50,7 +50,7 @@ along with GCC; see the file COPYING3. If not see #include "hashtab.h" #include "langhooks.h" #include "cfglayout.h" -#include "tree-gimple.h" +#include "gimple.h" #include "intl.h" #include "df.h" #include "debug.h" @@ -275,7 +275,7 @@ static tree ia64_handle_model_attribute (tree *, tree, tree, int, bool *); static tree ia64_handle_version_id_attribute (tree *, tree, tree, int, bool *); static void ia64_encode_section_info (tree, rtx, int); static rtx ia64_struct_value_rtx (tree, int); -static tree ia64_gimplify_va_arg (tree, tree, tree *, tree *); +static tree ia64_gimplify_va_arg (tree, tree, gimple_seq *, gimple_seq *); static bool ia64_scalar_mode_supported_p (enum machine_mode mode); static bool ia64_vector_mode_supported_p (enum machine_mode mode); static bool ia64_cannot_force_const_mem (rtx); @@ -4342,7 +4342,8 @@ ia64_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED) /* Implement va_arg. */ static tree -ia64_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) +ia64_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p) { /* Variable sized types are passed by reference. */ if (pass_by_reference (NULL, TYPE_MODE (type), type, false)) @@ -4365,8 +4366,7 @@ ia64_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t, size_int (-2 * UNITS_PER_WORD)); t = fold_convert (TREE_TYPE (valist), t); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (valist), valist, t); - gimplify_and_add (t, pre_p); + gimplify_assign (unshare_expr (valist), t, pre_p); } return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); diff --git a/gcc/config/m32c/m32c-protos.h b/gcc/config/m32c/m32c-protos.h index a63191c..ec98d81 100644 --- a/gcc/config/m32c/m32c-protos.h +++ b/gcc/config/m32c/m32c-protos.h @@ -1,5 +1,5 @@ /* Target Prototypes for R8C/M16C/M32C - Copyright (C) 2005, 2007 + Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Red Hat. @@ -108,7 +108,7 @@ int m32c_split_psi_p (rtx *); #ifdef TREE_CODE void m32c_function_arg_advance (CUMULATIVE_ARGS *, MM, tree, int); -tree m32c_gimplify_va_arg_expr (tree, tree, tree *, tree *); +tree m32c_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *); void m32c_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, int); bool m32c_promote_function_return (const_tree); int m32c_special_page_vector_p (tree); diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index b0733dd..0e03c9e 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -47,7 +47,7 @@ #include "target-def.h" #include "tm_p.h" #include "langhooks.h" -#include "tree-gimple.h" +#include "gimple.h" #include "df.h" /* Prototypes */ diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index d1def42..913acc7 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -56,7 +56,7 @@ along with GCC; see the file COPYING3. If not see #include "langhooks.h" #include "cfglayout.h" #include "sched-int.h" -#include "tree-gimple.h" +#include "gimple.h" #include "bitmap.h" #include "diagnostic.h" @@ -4959,12 +4959,12 @@ mips_va_start (tree valist, rtx nextarg) if (cum->stack_words > 0) t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (ovfl), t, size_int (cum->stack_words * UNITS_PER_WORD)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (ovfl), ovfl, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (ovfl), ovfl, t); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); /* Emit code to initialize GTOP, the top of the GPR save area. */ t = make_tree (TREE_TYPE (gtop), virtual_incoming_args_rtx); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (gtop), gtop, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (gtop), gtop, t); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); /* Emit code to initialize FTOP, the top of the FPR save area. @@ -4976,18 +4976,18 @@ mips_va_start (tree valist, rtx nextarg) if (fpr_offset) t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (ftop), t, size_int (-fpr_offset)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (ftop), ftop, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (ftop), ftop, t); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); /* Emit code to initialize GOFF, the offset from GTOP of the next GPR argument. */ - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (goff), goff, + t = build2 (MODIFY_EXPR, TREE_TYPE (goff), goff, build_int_cst (TREE_TYPE (goff), gpr_save_area_size)); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); /* Likewise emit code to initialize FOFF, the offset from FTOP of the next FPR argument. */ - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (foff), foff, + t = build2 (MODIFY_EXPR, TREE_TYPE (foff), foff, build_int_cst (TREE_TYPE (foff), fpr_save_area_size)); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } @@ -5001,7 +5001,8 @@ mips_va_start (tree valist, rtx nextarg) /* Implement TARGET_GIMPLIFY_VA_ARG_EXPR. */ static tree -mips_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) +mips_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p) { tree addr; bool indirect_p; @@ -5100,8 +5101,7 @@ mips_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) /* [1] Emit code for: off &= -rsize. */ t = build2 (BIT_AND_EXPR, TREE_TYPE (off), off, build_int_cst (NULL_TREE, -rsize)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (off), off, t); - gimplify_and_add (t, pre_p); + gimplify_assign (off, t, pre_p); } osize = rsize; } @@ -5137,7 +5137,7 @@ mips_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) u = size_int (-osize); t = build2 (BIT_AND_EXPR, sizetype, t, u); t = fold_convert (TREE_TYPE (ovfl), t); - align = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (ovfl), ovfl, t); + align = build2 (MODIFY_EXPR, TREE_TYPE (ovfl), ovfl, t); } else align = NULL; diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 238d352..76d84ba 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -1,6 +1,6 @@ /* Subroutines for insn-output.c for HPPA. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Contributed by Tim Moore (moore@cs.utah.edu), based on sparc.c This file is part of GCC. @@ -125,7 +125,7 @@ static void pa_asm_out_destructor (rtx, int); static void pa_init_builtins (void); static rtx hppa_builtin_saveregs (void); static void hppa_va_start (tree, rtx); -static tree hppa_gimplify_va_arg_expr (tree, tree, tree *, tree *); +static tree hppa_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *); static bool pa_scalar_mode_supported_p (enum machine_mode); static bool pa_commutative_p (const_rtx x, int outer_code); static void copy_fp_args (rtx) ATTRIBUTE_UNUSED; @@ -5998,7 +5998,8 @@ hppa_va_start (tree valist, rtx nextarg) } static tree -hppa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) +hppa_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p) { if (TARGET_64BIT) { diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 5e2f7ac..0e03be0 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -52,7 +52,7 @@ #include "reload.h" #include "cfglayout.h" #include "sched-int.h" -#include "tree-gimple.h" +#include "gimple.h" #include "tree-flow.h" #include "intl.h" #include "params.h" @@ -958,7 +958,7 @@ static void rs6000_darwin_file_start (void); static tree rs6000_build_builtin_va_list (void); static void rs6000_va_start (tree, rtx); -static tree rs6000_gimplify_va_arg (tree, tree, tree *, tree *); +static tree rs6000_gimplify_va_arg (tree, tree, gimple_seq *, gimple_seq *); static bool rs6000_must_pass_in_stack (enum machine_mode, const_tree); static bool rs6000_scalar_mode_supported_p (enum machine_mode); static bool rs6000_vector_mode_supported_p (enum machine_mode); @@ -6713,9 +6713,12 @@ rs6000_va_start (tree valist, rtx nextarg) valist = build_va_arg_indirect_ref (valist); gpr = build3 (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE); - fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE); - ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE); - sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE); + fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), unshare_expr (valist), + f_fpr, NULL_TREE); + ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), unshare_expr (valist), + f_ovf, NULL_TREE); + sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), unshare_expr (valist), + f_sav, NULL_TREE); /* Count number of gp and fp argument registers used. */ words = crtl->args.info.words; @@ -6731,7 +6734,7 @@ rs6000_va_start (tree valist, rtx nextarg) if (cfun->va_list_gpr_size) { - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (gpr), gpr, + t = build2 (MODIFY_EXPR, TREE_TYPE (gpr), gpr, build_int_cst (NULL_TREE, n_gpr)); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -6739,7 +6742,7 @@ rs6000_va_start (tree valist, rtx nextarg) if (cfun->va_list_fpr_size) { - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (fpr), fpr, + t = build2 (MODIFY_EXPR, TREE_TYPE (fpr), fpr, build_int_cst (NULL_TREE, n_fpr)); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -6750,7 +6753,7 @@ rs6000_va_start (tree valist, rtx nextarg) if (words != 0) t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (ovf), t, size_int (words * UNITS_PER_WORD)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (ovf), ovf, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -6767,7 +6770,7 @@ rs6000_va_start (tree valist, rtx nextarg) if (cfun->machine->varargs_save_offset) t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (sav), t, size_int (cfun->machine->varargs_save_offset)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (sav), sav, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (sav), sav, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } @@ -6775,7 +6778,8 @@ rs6000_va_start (tree valist, rtx nextarg) /* Implement va_arg. */ tree -rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) +rs6000_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p) { tree f_gpr, f_fpr, f_res, f_ovf, f_sav; tree gpr, fpr, ovf, sav, reg, t, u; @@ -6784,6 +6788,7 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) int align; tree ptrtype = build_pointer_type (type); int regalign = 0; + gimple stmt; if (pass_by_reference (NULL, TYPE_MODE (type), type, false)) { @@ -6802,14 +6807,14 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) if (elem_size < UNITS_PER_WORD) { tree real_part, imag_part; - tree post = NULL_TREE; + gimple_seq post = NULL; real_part = rs6000_gimplify_va_arg (valist, elem_type, pre_p, &post); /* Copy the value into a temporary, lest the formal temporary be reused out from under us. */ real_part = get_initialized_tmp_var (real_part, pre_p, &post); - append_to_statement_list (post, pre_p); + gimple_seq_add_seq (pre_p, post); imag_part = rs6000_gimplify_va_arg (valist, elem_type, pre_p, post_p); @@ -6829,9 +6834,12 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) valist = build_va_arg_indirect_ref (valist); gpr = build3 (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE); - fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE); - ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE); - sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE); + fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), unshare_expr (valist), + f_fpr, NULL_TREE); + ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), unshare_expr (valist), + f_ovf, NULL_TREE); + sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), unshare_expr (valist), + f_sav, NULL_TREE); size = int_size_in_bytes (type); rsize = (size + 3) / 4; @@ -6885,18 +6893,19 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) if (n_reg == 2 && reg == gpr) { regalign = 1; - u = build2 (BIT_AND_EXPR, TREE_TYPE (reg), reg, + u = build2 (BIT_AND_EXPR, TREE_TYPE (reg), unshare_expr (reg), build_int_cst (TREE_TYPE (reg), n_reg - 1)); - u = build2 (POSTINCREMENT_EXPR, TREE_TYPE (reg), reg, u); + u = build2 (POSTINCREMENT_EXPR, TREE_TYPE (reg), + unshare_expr (reg), u); } /* _Decimal128 is passed in even/odd fpr pairs; the stored reg number is 0 for f1, so we want to make it odd. */ else if (reg == fpr && TYPE_MODE (type) == TDmode) { regalign = 1; - t = build2 (BIT_IOR_EXPR, TREE_TYPE (reg), reg, + t = build2 (BIT_IOR_EXPR, TREE_TYPE (reg), unshare_expr (reg), build_int_cst (TREE_TYPE (reg), 1)); - u = build2 (MODIFY_EXPR, void_type_node, reg, t); + u = build2 (MODIFY_EXPR, void_type_node, unshare_expr (reg), t); } t = fold_convert (TREE_TYPE (reg), size_int (8 - n_reg + 1)); @@ -6909,7 +6918,7 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) if (sav_ofs) t = build2 (POINTER_PLUS_EXPR, ptr_type_node, sav, size_int (sav_ofs)); - u = build2 (POSTINCREMENT_EXPR, TREE_TYPE (reg), reg, + u = build2 (POSTINCREMENT_EXPR, TREE_TYPE (reg), unshare_expr (reg), build_int_cst (TREE_TYPE (reg), n_reg)); u = fold_convert (sizetype, u); u = build2 (MULT_EXPR, sizetype, u, size_int (sav_scale)); @@ -6922,22 +6931,18 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) && TYPE_MODE (type) == SDmode) t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (t), t, size_int (size)); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, t); - gimplify_and_add (t, pre_p); + gimplify_assign (addr, t, pre_p); - t = build1 (GOTO_EXPR, void_type_node, lab_over); - gimplify_and_add (t, pre_p); + gimple_seq_add_stmt (pre_p, gimple_build_goto (lab_over)); - t = build1 (LABEL_EXPR, void_type_node, lab_false); - append_to_statement_list (t, pre_p); + stmt = gimple_build_label (lab_false); + gimple_seq_add_stmt (pre_p, stmt); if ((n_reg == 2 && !regalign) || n_reg > 2) { /* Ensure that we don't find any more args in regs. Alignment has taken care of for special cases. */ - t = build_gimple_modify_stmt (reg, - build_int_cst (TREE_TYPE (reg), 8)); - gimplify_and_add (t, pre_p); + gimplify_assign (reg, build_int_cst (TREE_TYPE (reg), 8), pre_p); } } @@ -6955,17 +6960,15 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) } gimplify_expr (&t, pre_p, NULL, is_gimple_val, fb_rvalue); - u = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, t); - gimplify_and_add (u, pre_p); + gimplify_assign (unshare_expr (addr), t, pre_p); t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (t), t, size_int (size)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (ovf), ovf, t); - gimplify_and_add (t, pre_p); + gimplify_assign (unshare_expr (ovf), t, pre_p); if (lab_over) { - t = build1 (LABEL_EXPR, void_type_node, lab_over); - append_to_statement_list (t, pre_p); + stmt = gimple_build_label (lab_over); + gimple_seq_add_stmt (pre_p, stmt); } if (STRICT_ALIGNMENT @@ -11321,15 +11324,14 @@ rs6000_alloc_sdmode_stack_slot (void) { tree t; basic_block bb; - block_stmt_iterator bsi; + gimple_stmt_iterator gsi; gcc_assert (cfun->machine->sdmode_stack_slot == NULL_RTX); FOR_EACH_BB (bb) - for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { - tree ret = walk_tree_without_duplicates (bsi_stmt_ptr (bsi), - rs6000_check_sdmode, NULL); + tree ret = walk_gimple_op (gsi_stmt (gsi), rs6000_check_sdmode, NULL); if (ret) { rtx stack = assign_stack_local (DDmode, GET_MODE_SIZE (DDmode), 0); diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 936e0a0..3c7d92b 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -50,7 +50,7 @@ along with GCC; see the file COPYING3. If not see #include "debug.h" #include "langhooks.h" #include "optabs.h" -#include "tree-gimple.h" +#include "gimple.h" #include "df.h" @@ -8424,15 +8424,15 @@ s390_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) if (cfun->va_list_gpr_size) { - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (gpr), gpr, - build_int_cst (NULL_TREE, n_gpr)); + t = build2 (MODIFY_EXPR, TREE_TYPE (gpr), gpr, + build_int_cst (NULL_TREE, n_gpr)); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } if (cfun->va_list_fpr_size) { - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (fpr), fpr, + t = build2 (MODIFY_EXPR, TREE_TYPE (fpr), fpr, build_int_cst (NULL_TREE, n_fpr)); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -8452,7 +8452,7 @@ s390_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (ovf), t, size_int (off)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (ovf), ovf, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } @@ -8465,7 +8465,7 @@ s390_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (sav), t, size_int (-RETURN_REGNUM * UNITS_PER_WORD)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (sav), sav, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (sav), sav, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } @@ -8496,8 +8496,8 @@ s390_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) } */ static tree -s390_gimplify_va_arg (tree valist, tree type, tree *pre_p, - tree *post_p ATTRIBUTE_UNUSED) +s390_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p ATTRIBUTE_UNUSED) { tree f_gpr, f_fpr, f_ovf, f_sav; tree gpr, fpr, ovf, sav, reg, t, u; @@ -8512,9 +8512,13 @@ s390_gimplify_va_arg (tree valist, tree type, tree *pre_p, valist = build_va_arg_indirect_ref (valist); gpr = build3 (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE); fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE); - ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE); sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE); + /* The tree for args* cannot be shared between gpr/fpr and ovf since + both appear on a lhs. */ + valist = unshare_expr (valist); + ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE); + size = int_size_in_bytes (type); if (pass_by_reference (NULL, TYPE_MODE (type), type, false)) @@ -8598,14 +8602,11 @@ s390_gimplify_va_arg (tree valist, tree type, tree *pre_p, fold_convert (TREE_TYPE (reg), size_int (sav_scale))); t = build2 (POINTER_PLUS_EXPR, ptr_type_node, t, fold_convert (sizetype, u)); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, t); - gimplify_and_add (t, pre_p); + gimplify_assign (addr, t, pre_p); - t = build1 (GOTO_EXPR, void_type_node, lab_over); - gimplify_and_add (t, pre_p); + gimple_seq_add_stmt (pre_p, gimple_build_goto (lab_over)); - t = build1 (LABEL_EXPR, void_type_node, lab_false); - append_to_statement_list (t, pre_p); + gimple_seq_add_stmt (pre_p, gimple_build_label (lab_false)); /* ... Otherwise out of the overflow area. */ @@ -8617,16 +8618,13 @@ s390_gimplify_va_arg (tree valist, tree type, tree *pre_p, gimplify_expr (&t, pre_p, NULL, is_gimple_val, fb_rvalue); - u = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, t); - gimplify_and_add (u, pre_p); + gimplify_assign (addr, t, pre_p); t = build2 (POINTER_PLUS_EXPR, ptr_type_node, t, size_int (size)); - t = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, ovf, t); - gimplify_and_add (t, pre_p); + gimplify_assign (ovf, t, pre_p); - t = build1 (LABEL_EXPR, void_type_node, lab_over); - append_to_statement_list (t, pre_p); + gimple_seq_add_stmt (pre_p, gimple_build_label (lab_over)); /* Increment register save count. */ diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index e311362..c7b8f58 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -51,7 +51,7 @@ along with GCC; see the file COPYING3. If not see #include "intl.h" #include "sched-int.h" #include "ggc.h" -#include "tree-gimple.h" +#include "gimple.h" #include "cfgloop.h" #include "alloc-pool.h" #include "tm-constrs.h" @@ -262,7 +262,7 @@ static bool sh_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *); static tree sh_build_builtin_va_list (void); static tree sh_canonical_va_list_type (tree); static void sh_va_start (tree, rtx); -static tree sh_gimplify_va_arg_expr (tree, tree, tree *, tree *); +static tree sh_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *); static bool sh_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); static bool sh_callee_copies (CUMULATIVE_ARGS *, enum machine_mode, @@ -7200,7 +7200,7 @@ sh_va_start (tree valist, rtx nextarg) /* Call __builtin_saveregs. */ u = make_tree (sizetype, expand_builtin_saveregs ()); u = fold_convert (ptr_type_node, u); - t = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, next_fp, u); + t = build2 (MODIFY_EXPR, ptr_type_node, next_fp, u); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -7211,11 +7211,11 @@ sh_va_start (tree valist, rtx nextarg) nfp = 0; u = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node, u, size_int (UNITS_PER_WORD * nfp)); - t = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, next_fp_limit, u); + t = build2 (MODIFY_EXPR, ptr_type_node, next_fp_limit, u); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); - t = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, next_o, u); + t = build2 (MODIFY_EXPR, ptr_type_node, next_o, u); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -7226,12 +7226,12 @@ sh_va_start (tree valist, rtx nextarg) nint = 0; u = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node, u, size_int (UNITS_PER_WORD * nint)); - t = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, next_o_limit, u); + t = build2 (MODIFY_EXPR, ptr_type_node, next_o_limit, u); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); u = make_tree (ptr_type_node, nextarg); - t = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, next_stack, u); + t = build2 (MODIFY_EXPR, ptr_type_node, next_stack, u); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } @@ -7260,8 +7260,8 @@ find_sole_member (tree type) /* Implement `va_arg'. */ static tree -sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, - tree *post_p ATTRIBUTE_UNUSED) +sh_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p ATTRIBUTE_UNUSED) { HOST_WIDE_INT size, rsize; tree tmp, pptr_type_node; @@ -7351,11 +7351,9 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, bool is_double = size == 8 && TREE_CODE (eff_type) == REAL_TYPE; tmp = build1 (ADDR_EXPR, pptr_type_node, next_fp); - tmp = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, tmp); - gimplify_and_add (tmp, pre_p); + gimplify_assign (addr, tmp, pre_p); - tmp = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, next_fp_tmp, valist); - gimplify_and_add (tmp, pre_p); + gimplify_assign (next_fp_tmp, valist, pre_p); tmp = next_fp_limit; if (size > 4 && !is_double) tmp = build2 (POINTER_PLUS_EXPR, TREE_TYPE (tmp), tmp, @@ -7375,9 +7373,7 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, size_int (UNITS_PER_WORD)); tmp = build2 (POINTER_PLUS_EXPR, ptr_type_node, next_fp_tmp, tmp); - tmp = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, - next_fp_tmp, tmp); - gimplify_and_add (tmp, pre_p); + gimplify_assign (next_fp_tmp, tmp, pre_p); } if (is_double) gimplify_and_add (cmp, pre_p); @@ -7409,13 +7405,10 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, gimplify_and_add (tmp, pre_p); tmp = build1 (ADDR_EXPR, pptr_type_node, next_stack); - tmp = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, tmp); - gimplify_and_add (tmp, pre_p); - tmp = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, next_fp_tmp, valist); - gimplify_and_add (tmp, pre_p); + gimplify_assign (addr, tmp, pre_p); + gimplify_assign (next_fp_tmp, valist, pre_p); - tmp = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, valist, next_fp_tmp); - gimplify_and_add (tmp, post_p); + gimplify_assign (valist, next_fp_tmp, post_p); valist = next_fp_tmp; } else @@ -7429,8 +7422,7 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, gimplify_and_add (tmp, pre_p); tmp = build1 (ADDR_EXPR, pptr_type_node, next_o); - tmp = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, tmp); - gimplify_and_add (tmp, pre_p); + gimplify_assign (addr, tmp, pre_p); tmp = build1 (GOTO_EXPR, void_type_node, lab_over); gimplify_and_add (tmp, pre_p); @@ -7439,15 +7431,10 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, gimplify_and_add (tmp, pre_p); if (size > 4 && ! (TARGET_SH4 || TARGET_SH2A)) - { - tmp = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, - next_o, next_o_limit); - gimplify_and_add (tmp, pre_p); - } + gimplify_assign (next_o, next_o_limit, pre_p); tmp = build1 (ADDR_EXPR, pptr_type_node, next_stack); - tmp = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, tmp); - gimplify_and_add (tmp, pre_p); + gimplify_assign (addr, tmp, pre_p); } if (!result) @@ -7463,8 +7450,7 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tmp = std_gimplify_va_arg_expr (valist, type, pre_p, NULL); if (result) { - tmp = build2 (GIMPLE_MODIFY_STMT, void_type_node, result, tmp); - gimplify_and_add (tmp, pre_p); + gimplify_assign (result, tmp, pre_p); tmp = build1 (LABEL_EXPR, void_type_node, lab_over); gimplify_and_add (tmp, pre_p); diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 5e6f574..adf28c0 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -48,7 +48,7 @@ along with GCC; see the file COPYING3. If not see #include "target.h" #include "target-def.h" #include "cfglayout.h" -#include "tree-gimple.h" +#include "gimple.h" #include "langhooks.h" #include "params.h" #include "df.h" @@ -410,7 +410,7 @@ static rtx sparc_struct_value_rtx (tree, int); static bool sparc_return_in_memory (const_tree, const_tree); static bool sparc_strict_argument_naming (CUMULATIVE_ARGS *); static void sparc_va_start (tree, rtx); -static tree sparc_gimplify_va_arg (tree, tree, tree *, tree *); +static tree sparc_gimplify_va_arg (tree, tree, gimple_seq *, gimple_seq *); static bool sparc_vector_mode_supported_p (enum machine_mode); static bool sparc_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); @@ -5709,7 +5709,8 @@ sparc_va_start (tree valist, rtx nextarg) /* Implement `va_arg' for stdarg. */ static tree -sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) +sparc_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p) { HOST_WIDE_INT size, rsize, align; tree addr, incr; @@ -5792,8 +5793,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) addr = fold_convert (ptrtype, addr); incr = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node, incr, size_int (rsize)); - incr = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, valist, incr); - gimplify_and_add (incr, post_p); + gimplify_assign (valist, incr, post_p); return build_va_arg_indirect_ref (addr); } diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index e645adb..83bd9f5 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2006, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -50,7 +50,7 @@ #include "assert.h" #include "c-common.h" #include "machmode.h" -#include "tree-gimple.h" +#include "gimple.h" #include "tm-constrs.h" #include "spu-builtins.h" #include "ddg.h" @@ -118,8 +118,8 @@ static unsigned char spu_pass_by_reference (CUMULATIVE_ARGS *cum, enum machine_m const_tree type, unsigned char named); static tree spu_build_builtin_va_list (void); static void spu_va_start (tree, rtx); -static tree spu_gimplify_va_arg_expr (tree valist, tree type, tree * pre_p, - tree * post_p); +static tree spu_gimplify_va_arg_expr (tree valist, tree type, + gimple_seq * pre_p, gimple_seq * post_p); static int regno_aligned_for_load (int regno); static int store_with_one_insn_p (rtx mem); static int mem_is_padded_component_ref (rtx x); @@ -3238,7 +3238,7 @@ spu_va_start (tree valist, rtx nextarg) if (crtl->args.pretend_args_size > 0) t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (args), t, size_int (-STACK_POINTER_OFFSET)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (args), args, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (args), args, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -3247,7 +3247,7 @@ spu_va_start (tree valist, rtx nextarg) t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (skip), t, size_int (crtl->args.pretend_args_size - STACK_POINTER_OFFSET)); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (skip), skip, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (skip), skip, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } @@ -3270,8 +3270,8 @@ spu_va_start (tree valist, rtx nextarg) ret = *(TYPE *)addr; */ static tree -spu_gimplify_va_arg_expr (tree valist, tree type, tree * pre_p, - tree * post_p ATTRIBUTE_UNUSED) +spu_gimplify_va_arg_expr (tree valist, tree type, gimple_seq * pre_p, + gimple_seq * post_p ATTRIBUTE_UNUSED) { tree f_args, f_skip; tree args, skip; @@ -3303,22 +3303,21 @@ spu_gimplify_va_arg_expr (tree valist, tree type, tree * pre_p, /* build conditional expression to calculate addr. The expression will be gimplified later. */ paddedsize = size_int (rsize); - tmp = build2 (POINTER_PLUS_EXPR, ptr_type_node, args, paddedsize); + tmp = build2 (POINTER_PLUS_EXPR, ptr_type_node, unshare_expr (args), paddedsize); tmp = build2 (TRUTH_AND_EXPR, boolean_type_node, - build2 (GT_EXPR, boolean_type_node, tmp, skip), - build2 (LE_EXPR, boolean_type_node, args, skip)); + build2 (GT_EXPR, boolean_type_node, tmp, unshare_expr (skip)), + build2 (LE_EXPR, boolean_type_node, unshare_expr (args), + unshare_expr (skip))); tmp = build3 (COND_EXPR, ptr_type_node, tmp, - build2 (POINTER_PLUS_EXPR, ptr_type_node, skip, - size_int (32)), args); + build2 (POINTER_PLUS_EXPR, ptr_type_node, unshare_expr (skip), + size_int (32)), unshare_expr (args)); - tmp = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, addr, tmp); - gimplify_and_add (tmp, pre_p); + gimplify_assign (addr, tmp, pre_p); /* update VALIST.__args */ tmp = build2 (POINTER_PLUS_EXPR, ptr_type_node, addr, paddedsize); - tmp = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (args), args, tmp); - gimplify_and_add (tmp, pre_p); + gimplify_assign (unshare_expr (args), tmp, pre_p); addr = fold_convert (build_pointer_type (type), addr); diff --git a/gcc/config/stormy16/stormy16.c b/gcc/config/stormy16/stormy16.c index 6cbe52d..64ecec8 100644 --- a/gcc/config/stormy16/stormy16.c +++ b/gcc/config/stormy16/stormy16.c @@ -45,7 +45,7 @@ along with GCC; see the file COPYING3. If not see #include "target-def.h" #include "tm_p.h" #include "langhooks.h" -#include "tree-gimple.h" +#include "gimple.h" #include "df.h" #include "ggc.h" @@ -1350,11 +1350,11 @@ xstormy16_expand_builtin_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) u = build_int_cst (NULL_TREE, INCOMING_FRAME_SP_OFFSET); u = fold_convert (TREE_TYPE (count), u); t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (base), t, u); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (base), base, t); + t = build2 (MODIFY_EXPR, TREE_TYPE (base), base, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (count), count, + t = build2 (MODIFY_EXPR, TREE_TYPE (count), count, build_int_cst (NULL_TREE, crtl->args.info * UNITS_PER_WORD)); TREE_SIDE_EFFECTS (t) = 1; @@ -1366,8 +1366,8 @@ xstormy16_expand_builtin_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) Note: This algorithm is documented in stormy-abi. */ static tree -xstormy16_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, - tree *post_p ATTRIBUTE_UNUSED) +xstormy16_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p ATTRIBUTE_UNUSED) { tree f_base, f_count; tree base, count; @@ -1408,8 +1408,7 @@ xstormy16_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, gimplify_and_add (t, pre_p); t = build2 (POINTER_PLUS_EXPR, ptr_type_node, base, count_tmp); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, t); - gimplify_and_add (t, pre_p); + gimplify_assign (addr, t, pre_p); t = build1 (GOTO_EXPR, void_type_node, lab_gotaddr); gimplify_and_add (t, pre_p); @@ -1427,7 +1426,7 @@ xstormy16_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree r, u; r = size_int (NUM_ARGUMENT_REGISTERS * UNITS_PER_WORD); - u = build2 (GIMPLE_MODIFY_STMT, void_type_node, count_tmp, r); + u = build2 (MODIFY_EXPR, TREE_TYPE (count_tmp), count_tmp, r); t = fold_convert (TREE_TYPE (count), r); t = build2 (GE_EXPR, boolean_type_node, count_tmp, t); @@ -1444,16 +1443,14 @@ xstormy16_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, t = fold_convert (TREE_TYPE (t), fold (t)); t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t); t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (base), base, t); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, addr, t); - gimplify_and_add (t, pre_p); + gimplify_assign (addr, t, pre_p); t = build1 (LABEL_EXPR, void_type_node, lab_gotaddr); gimplify_and_add (t, pre_p); t = fold_convert (TREE_TYPE (count), size_tree); t = build2 (PLUS_EXPR, TREE_TYPE (count), count_tmp, t); - t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (count), count, t); - gimplify_and_add (t, pre_p); + gimplify_assign (count, t, pre_p); addr = fold_convert (build_pointer_type (type), addr); return build_va_arg_indirect_ref (addr); diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c index 38a621d..000df14 100644 --- a/gcc/config/xtensa/xtensa.c +++ b/gcc/config/xtensa/xtensa.c @@ -48,7 +48,7 @@ along with GCC; see the file COPYING3. If not see #include "target.h" #include "target-def.h" #include "langhooks.h" -#include "tree-gimple.h" +#include "gimple.h" #include "df.h" @@ -142,8 +142,9 @@ static section *xtensa_select_rtx_section (enum machine_mode, rtx, static bool xtensa_rtx_costs (rtx, int, int, int *); static tree xtensa_build_builtin_va_list (void); static bool xtensa_return_in_memory (const_tree, const_tree); +static tree xtensa_gimplify_va_arg_expr (tree, tree, gimple_seq *, + gimple_seq *); static rtx xtensa_function_value (const_tree, const_tree, bool); -static tree xtensa_gimplify_va_arg_expr (tree, tree, tree *, tree *); static void xtensa_init_builtins (void); static tree xtensa_fold_builtin (tree, tree, bool); static rtx xtensa_expand_builtin (tree, rtx, rtx, enum machine_mode, int); @@ -2538,14 +2539,14 @@ xtensa_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) /* Call __builtin_saveregs; save the result in __va_reg */ u = make_tree (sizetype, expand_builtin_saveregs ()); u = fold_convert (ptr_type_node, u); - t = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, reg, u); + t = build2 (MODIFY_EXPR, ptr_type_node, reg, u); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); /* Set the __va_stk member to ($arg_ptr - 32). */ u = make_tree (ptr_type_node, virtual_incoming_args_rtx); u = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node, u, size_int (-32)); - t = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, stk, u); + t = build2 (MODIFY_EXPR, ptr_type_node, stk, u); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -2554,7 +2555,7 @@ xtensa_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) alignment offset for __va_stk. */ if (arg_words >= MAX_ARGS_IN_REGISTERS) arg_words += 2; - t = build2 (GIMPLE_MODIFY_STMT, integer_type_node, ndx, + t = build2 (MODIFY_EXPR, integer_type_node, ndx, build_int_cst (integer_type_node, arg_words * UNITS_PER_WORD)); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -2564,8 +2565,8 @@ xtensa_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) /* Implement `va_arg'. */ static tree -xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, - tree *post_p ATTRIBUTE_UNUSED) +xtensa_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, + gimple_seq *post_p ATTRIBUTE_UNUSED) { tree f_stk, stk; tree f_reg, reg; @@ -2624,8 +2625,7 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, build_int_cst (integer_type_node, align - 1)); t = build2 (BIT_AND_EXPR, integer_type_node, t, build_int_cst (integer_type_node, -align)); - t = build2 (GIMPLE_MODIFY_STMT, integer_type_node, orig_ndx, t); - gimplify_and_add (t, pre_p); + gimplify_assign (orig_ndx, t, pre_p); } @@ -2635,8 +2635,7 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, t = fold_convert (integer_type_node, va_size); t = build2 (PLUS_EXPR, integer_type_node, orig_ndx, t); - t = build2 (GIMPLE_MODIFY_STMT, integer_type_node, ndx, t); - gimplify_and_add (t, pre_p); + gimplify_assign (ndx, t, pre_p); /* Check if the argument is in registers: @@ -2661,8 +2660,7 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, NULL_TREE); gimplify_and_add (t, pre_p); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, array, reg); - gimplify_and_add (t, pre_p); + gimplify_assign (array, reg, pre_p); t = build1 (GOTO_EXPR, void_type_node, lab_over); gimplify_and_add (t, pre_p); @@ -2694,14 +2692,12 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, t = size_binop (PLUS_EXPR, va_size, size_int (32)); t = fold_convert (integer_type_node, t); - t = build2 (GIMPLE_MODIFY_STMT, integer_type_node, ndx, t); - gimplify_and_add (t, pre_p); + gimplify_assign (ndx, t, pre_p); t = build1 (LABEL_EXPR, void_type_node, lab_false2); gimplify_and_add (t, pre_p); - t = build2 (GIMPLE_MODIFY_STMT, void_type_node, array, stk); - gimplify_and_add (t, pre_p); + gimplify_assign (array, stk, pre_p); if (lab_over) { |