aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <andrew_pinski@playstation.sony.com>2007-06-07 23:57:30 +0000
committerAndrew Pinski <andrew_pinski@playstation.sony.com>2007-06-07 23:57:30 +0000
commit53cddf3326a78b1c2231f49fff91d0dea09e5590 (patch)
tree996f1670c311be6301412ecf3df430d53c94a83a
parent28646c0b9a35341b784a54b9736ec3f1efb5fcbe (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.ptr11
-rw-r--r--gcc/config/frv/frv.c3
-rw-r--r--gcc/config/pa/pa.c16
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);