From 5a4ac6841c58e0e0fa97c46f363736728c029215 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Mon, 20 Aug 2007 06:53:05 +0000 Subject: [PATCH] re PR target/32522 (Bootstrap failure on Alpha due to pointer-plus changes) 2007-08-19 Andrew Pinski Serge Belyshev PR target/32522 * config/alpha/alpha.c (va_list_skip_additions): Check for POINTER_PLUS_EXPR in addition to PLUS_EXPR. (alpha_stdarg_optimize_hook): Look for POINTER_PLUS_EXPR instead of PLUS_EXPR when checking ap.__base. (alpha_va_start): Create POINTER_PLUS_EXPR instead of PLUS_EXPR when doing addition on pointer types. Use size_int instead of build_int_cst. (alpha_gimplify_va_arg_1): Likewise, but use sizetype instead of ptr_type in the second operand. Co-Authored-By: Serge Belyshev From-SVN: r127637 --- gcc/ChangeLog | 14 ++++++++++++++ gcc/config/alpha/alpha.c | 13 +++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1f8753b8f8b..544218059e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2007-08-19 Andrew Pinski + Serge Belyshev + + PR target/32522 + * config/alpha/alpha.c (va_list_skip_additions): Check for + POINTER_PLUS_EXPR in addition to PLUS_EXPR. + (alpha_stdarg_optimize_hook): Look for POINTER_PLUS_EXPR instead of + PLUS_EXPR when checking ap.__base. + (alpha_va_start): Create POINTER_PLUS_EXPR instead of PLUS_EXPR + when doing addition on pointer types. Use size_int instead of + build_int_cst. + (alpha_gimplify_va_arg_1): Likewise, but use sizetype instead of + ptr_type in the second operand. + 2007-08-19 Andrew Pinski PR target/33115 diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index e699fcf28a4..de58de2bec9 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -5834,7 +5834,8 @@ va_list_skip_additions (tree lhs) if ((TREE_CODE (rhs) != NOP_EXPR && TREE_CODE (rhs) != CONVERT_EXPR - && (TREE_CODE (rhs) != PLUS_EXPR + && ((TREE_CODE (rhs) != PLUS_EXPR + && TREE_CODE (rhs) != POINTER_PLUS_EXPR) || TREE_CODE (TREE_OPERAND (rhs, 1)) != INTEGER_CST || !host_integerp (TREE_OPERAND (rhs, 1), 1))) || TREE_CODE (TREE_OPERAND (rhs, 0)) != SSA_NAME) @@ -5876,7 +5877,7 @@ alpha_stdarg_optimize_hook (struct stdarg_info *si, tree lhs, tree rhs) lhs = va_list_skip_additions (TREE_OPERAND (rhs, 0)); if (lhs == NULL_TREE - || TREE_CODE (lhs) != PLUS_EXPR) + || TREE_CODE (lhs) != POINTER_PLUS_EXPR) return false; base = TREE_OPERAND (lhs, 0); @@ -6111,8 +6112,8 @@ alpha_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) valist, offset_field, NULL_TREE); t = make_tree (ptr_type_node, virtual_incoming_args_rtx); - t = build2 (PLUS_EXPR, ptr_type_node, t, - build_int_cst (NULL_TREE, offset)); + t = build2 (POINTER_PLUS_EXPR, ptr_type_node, t, + size_int (offset)); t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (base_field), base_field, t); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); @@ -6172,8 +6173,8 @@ alpha_gimplify_va_arg_1 (tree type, tree base, tree offset, tree *pre_p) } /* Build the final address and force that value into a temporary. */ - addr = build2 (PLUS_EXPR, ptr_type, fold_convert (ptr_type, base), - fold_convert (ptr_type, addend)); + addr = build2 (POINTER_PLUS_EXPR, ptr_type, fold_convert (ptr_type, base), + fold_convert (sizetype, addend)); internal_post = NULL; gimplify_expr (&addr, pre_p, &internal_post, is_gimple_val, fb_rvalue); append_to_statement_list (internal_post, pre_p);