diff options
author | Andrew Pinski <andrew_pinski@playstation.sony.com> | 2007-06-07 23:57:30 +0000 |
---|---|---|
committer | Andrew Pinski <andrew_pinski@playstation.sony.com> | 2007-06-07 23:57:30 +0000 |
commit | 53cddf3326a78b1c2231f49fff91d0dea09e5590 (patch) | |
tree | 996f1670c311be6301412ecf3df430d53c94a83a | |
parent | 28646c0b9a35341b784a54b9736ec3f1efb5fcbe (diff) |
2007-06-07 Andrew Pinski <andrew_pinski@playstation.sony.com>
* config/frv/frv.c (frv_expand_builtin_va_start): Use sizetype
with make_tree, instead of a pointer type.
* config/pa/pa.c (reloc_needed): Handle POINTER_PLUS_EXPR
as PLUS_EXPR/MINUS_EXPR.
(hppa_gimplify_va_arg_expr): Don't create MINUS_EXPR or
PLUS_EXPR for pointers, instead use POINTER_PLUS_EXPR.
Don't use BIT_AND_EXPR on a pointer type, convert the
expression to sizetype first.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/pointer_plus@125546 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog.ptr | 11 | ||||
-rw-r--r-- | gcc/config/frv/frv.c | 3 | ||||
-rw-r--r-- | gcc/config/pa/pa.c | 16 |
3 files changed, 23 insertions, 7 deletions
diff --git a/gcc/ChangeLog.ptr b/gcc/ChangeLog.ptr index bbe5eed88b9..f66d55c6ede 100644 --- a/gcc/ChangeLog.ptr +++ b/gcc/ChangeLog.ptr @@ -1,3 +1,14 @@ +2007-06-07 Andrew Pinski <andrew_pinski@playstation.sony.com> + + * config/frv/frv.c (frv_expand_builtin_va_start): Use sizetype + with make_tree, instead of a pointer type. + * config/pa/pa.c (reloc_needed): Handle POINTER_PLUS_EXPR + as PLUS_EXPR/MINUS_EXPR. + (hppa_gimplify_va_arg_expr): Don't create MINUS_EXPR or + PLUS_EXPR for pointers, instead use POINTER_PLUS_EXPR. + Don't use BIT_AND_EXPR on a pointer type, convert the + expression to sizetype first. + 2007-06-06 Andrew Pinski <andrew_pinski@playstation.sony.com> * tree-ssa-forwprop.c diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c index c2b661d8ddf..3f7d3e4e2b1 100644 --- a/gcc/config/frv/frv.c +++ b/gcc/config/frv/frv.c @@ -2204,7 +2204,8 @@ frv_expand_builtin_va_start (tree valist, rtx nextarg) } t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (valist), valist, - make_tree (ptr_type_node, nextarg)); + fold_convert (TREE_TYPE (valist), + make_tree (sizetype, nextarg))); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index f0a894a91ff..9d1495fb442 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -2046,6 +2046,7 @@ reloc_needed (tree exp) case ADDR_EXPR: return 1; + case POINTER_PLUS_EXPR: case PLUS_EXPR: case MINUS_EXPR: reloc = reloc_needed (TREE_OPERAND (exp, 0)); @@ -5922,21 +5923,24 @@ hppa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) /* Args grow down. Not handled by generic routines. */ - u = fold_convert (valist_type, size_in_bytes (type)); - t = build2 (MINUS_EXPR, valist_type, valist, u); + u = fold_convert (sizetype, size_in_bytes (type)); + u = fold_build1 (NEGATE_EXPR, sizetype, u); + t = build2 (POINTER_PLUS_EXPR, valist_type, valist, u); /* Copied from va-pa.h, but we probably don't need to align to word size, since we generate and preserve that invariant. */ - u = build_int_cst (valist_type, (size > 4 ? -8 : -4)); - t = build2 (BIT_AND_EXPR, valist_type, t, u); + u = size_int (size > 4 ? -8 : -4); + t = fold_convert (sizetype, t); + t = build2 (BIT_AND_EXPR, sizetype, t, u); + t = fold_convert (valist_type, t); t = build2 (MODIFY_EXPR, valist_type, valist, t); ofs = (8 - size) % 4; if (ofs != 0) { - u = fold_convert (valist_type, size_int (ofs)); - t = build2 (PLUS_EXPR, valist_type, t, u); + u = size_int (ofs); + t = build2 (POINTER_PLUS_EXPR, valist_type, t, u); } t = fold_convert (ptr, t); |