diff options
author | Kaz Kojima <kkojima@gcc.gnu.org> | 2007-05-20 02:41:23 +0000 |
---|---|---|
committer | Kaz Kojima <kkojima@gcc.gnu.org> | 2007-05-20 02:41:23 +0000 |
commit | 5923430b18d549b973c580e974b57d3bf4088e36 (patch) | |
tree | 324d77defc592e1314834e20c5cbf2408828035c | |
parent | fd1dc8096d74061c7d541dbad8aa3cb5162092ac (diff) |
* config/sh/sh.c (sh_va_start): Call make_tree with sizetype
and convert its result to a pointer type. Use POINTER_PLUS_EXPR
for the pointer additions and also use size_int for the offsets.
(sh_gimplify_va_arg_expr): Use POINTER_PLUS_EXPR for the pointer
additions and also use size_int for the offsets. Perform
BIT_AND_EXPR on sizetype arguments.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/pointer_plus@124867 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog.ptr | 9 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 27 |
2 files changed, 24 insertions, 12 deletions
diff --git a/gcc/ChangeLog.ptr b/gcc/ChangeLog.ptr index 9f438f4d206..f61eeb93c97 100644 --- a/gcc/ChangeLog.ptr +++ b/gcc/ChangeLog.ptr @@ -1,3 +1,12 @@ +2007-05-20 Kaz Kojima <kkojima@gcc.gnu.org> + + * config/sh/sh.c (sh_va_start): Call make_tree with sizetype + and convert its result to a pointer type. Use POINTER_PLUS_EXPR + for the pointer additions and also use size_int for the offsets. + (sh_gimplify_va_arg_expr): Use POINTER_PLUS_EXPR for the pointer + additions and also use size_int for the offsets. Perform + BIT_AND_EXPR on sizetype arguments. + 2007-05-15 Andrew Pinski <andrew_pinski@playstation.sony.com> (forward_propagate_addr_into_variable_array_index): diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index ab9ea90232b..2e74a4f3bd7 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -7138,7 +7138,8 @@ sh_va_start (tree valist, rtx nextarg) valist, f_next_stack, NULL_TREE); /* Call __builtin_saveregs. */ - u = make_tree (ptr_type_node, expand_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); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -7148,8 +7149,8 @@ sh_va_start (tree valist, rtx nextarg) nfp = 8 - nfp; else nfp = 0; - u = fold_build2 (PLUS_EXPR, ptr_type_node, u, - build_int_cst (NULL_TREE, UNITS_PER_WORD * nfp)); + 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); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -7163,8 +7164,8 @@ sh_va_start (tree valist, rtx nextarg) nint = 4 - nint; else nint = 0; - u = fold_build2 (PLUS_EXPR, ptr_type_node, u, - build_int_cst (NULL_TREE, UNITS_PER_WORD * nint)); + 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); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -7297,8 +7298,8 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, gimplify_and_add (tmp, pre_p); tmp = next_fp_limit; if (size > 4 && !is_double) - tmp = build2 (PLUS_EXPR, TREE_TYPE (tmp), tmp, - fold_convert (TREE_TYPE (tmp), size_int (4 - size))); + tmp = build2 (POINTER_PLUS_EXPR, TREE_TYPE (tmp), tmp, + size_int (4 - size)); tmp = build2 (GE_EXPR, boolean_type_node, next_fp_tmp, tmp); cmp = build3 (COND_EXPR, void_type_node, tmp, build1 (GOTO_EXPR, void_type_node, lab_false), @@ -7309,9 +7310,11 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, if (TYPE_ALIGN (eff_type) > BITS_PER_WORD || (is_double || size == 16)) { - tmp = fold_convert (ptr_type_node, size_int (UNITS_PER_WORD)); - tmp = build2 (BIT_AND_EXPR, ptr_type_node, next_fp_tmp, tmp); - tmp = build2 (PLUS_EXPR, ptr_type_node, next_fp_tmp, tmp); + tmp = fold_convert (sizetype, next_fp_tmp); + tmp = build2 (BIT_AND_EXPR, sizetype, tmp, + 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); @@ -7357,8 +7360,8 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, } else { - tmp = fold_convert (ptr_type_node, size_int (rsize)); - tmp = build2 (PLUS_EXPR, ptr_type_node, next_o, tmp); + tmp = build2 (POINTER_PLUS_EXPR, ptr_type_node, next_o, + size_int (rsize)); tmp = build2 (GT_EXPR, boolean_type_node, tmp, next_o_limit); tmp = build3 (COND_EXPR, void_type_node, tmp, build1 (GOTO_EXPR, void_type_node, lab_false), |