This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
S/390: Clean up s390_gimplify_va_arg
- From: Ulrich Weigand <weigand at i1 dot informatik dot uni-erlangen dot de>
- To: gcc-patches at gcc dot gnu dot org
- Cc: law at redhat dot com, jason at redhat dot com, roger at eyesopen dot com
- Date: Tue, 13 Jul 2004 19:24:47 +0200 (CEST)
- Subject: S/390: Clean up s390_gimplify_va_arg
Hello,
this implements the suggestions to clean up the tree handling
in s390_gimplify_va_arg.
Bootstrapped/regtested on s390-ibm-linux and s390x-ibm-linux,
applied to mainline.
Bye,
Ulrich
ChangeLog:
* config/s390/s390.c (s390_gimplify_va_arg): Use size_int instead
of build_int_2. Convert both operands of PLUS_EXPR and MULT_EXPR
to the same type.
Index: gcc/config/s390/s390.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/s390/s390.c,v
retrieving revision 1.157
diff -c -p -r1.157 s390.c
*** gcc/config/s390/s390.c 11 Jul 2004 11:44:09 -0000 1.157
--- gcc/config/s390/s390.c 13 Jul 2004 14:34:21 -0000
*************** s390_gimplify_va_arg (tree valist, tree
*** 6716,6736 ****
lab_over = create_artificial_label ();
addr = create_tmp_var (ptr_type_node, "addr");
! t = build_int_2 (max_reg, 0);
! TREE_TYPE (t) = TREE_TYPE (reg);
t = build2 (GT_EXPR, boolean_type_node, reg, t);
u = build1 (GOTO_EXPR, void_type_node, lab_false);
t = build3 (COND_EXPR, void_type_node, t, u, NULL_TREE);
gimplify_and_add (t, pre_p);
! if (sav_ofs)
! t = build2 (PLUS_EXPR, ptr_type_node, sav, build_int_2 (sav_ofs, 0));
! else
! t = sav;
!
! u = build2 (MULT_EXPR, long_integer_type_node,
! reg, build_int_2 (sav_scale, 0));
! t = build2 (PLUS_EXPR, ptr_type_node, t, u);
t = build2 (MODIFY_EXPR, void_type_node, addr, t);
gimplify_and_add (t, pre_p);
--- 6716,6732 ----
lab_over = create_artificial_label ();
addr = create_tmp_var (ptr_type_node, "addr");
! t = fold_convert (TREE_TYPE (reg), size_int (max_reg));
t = build2 (GT_EXPR, boolean_type_node, reg, t);
u = build1 (GOTO_EXPR, void_type_node, lab_false);
t = build3 (COND_EXPR, void_type_node, t, u, NULL_TREE);
gimplify_and_add (t, pre_p);
! t = build2 (PLUS_EXPR, ptr_type_node, sav,
! fold_convert (ptr_type_node, size_int (sav_ofs)));
! u = build2 (MULT_EXPR, TREE_TYPE (reg), reg,
! fold_convert (TREE_TYPE (reg), size_int (sav_scale)));
! t = build2 (PLUS_EXPR, ptr_type_node, t, fold_convert (ptr_type_node, u));
t = build2 (MODIFY_EXPR, void_type_node, addr, t);
gimplify_and_add (t, pre_p);
*************** s390_gimplify_va_arg (tree valist, tree
*** 6746,6761 ****
t = ovf;
if (size < UNITS_PER_WORD)
! t = build2 (PLUS_EXPR, TREE_TYPE (t), t,
! build_int_2 (UNITS_PER_WORD - size, 0));
gimplify_expr (&t, pre_p, NULL, is_gimple_val, fb_rvalue);
u = build2 (MODIFY_EXPR, void_type_node, addr, t);
gimplify_and_add (u, pre_p);
! t = build2 (PLUS_EXPR, TREE_TYPE (t), t, build_int_2 (size, 0));
! t = build2 (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t);
gimplify_and_add (t, pre_p);
t = build1 (LABEL_EXPR, void_type_node, lab_over);
--- 6742,6758 ----
t = ovf;
if (size < UNITS_PER_WORD)
! t = build2 (PLUS_EXPR, ptr_type_node, t,
! fold_convert (ptr_type_node, size_int (UNITS_PER_WORD - size)));
gimplify_expr (&t, pre_p, NULL, is_gimple_val, fb_rvalue);
u = build2 (MODIFY_EXPR, void_type_node, addr, t);
gimplify_and_add (u, pre_p);
! t = build2 (PLUS_EXPR, ptr_type_node, t,
! fold_convert (ptr_type_node, size_int (size)));
! t = build2 (MODIFY_EXPR, ptr_type_node, ovf, t);
gimplify_and_add (t, pre_p);
t = build1 (LABEL_EXPR, void_type_node, lab_over);
*************** s390_gimplify_va_arg (tree valist, tree
*** 6765,6771 ****
/* Increment register save count. */
u = build2 (PREINCREMENT_EXPR, TREE_TYPE (reg), reg,
! build_int_2 (n_reg, 0));
gimplify_and_add (u, pre_p);
if (indirect_p)
--- 6762,6768 ----
/* Increment register save count. */
u = build2 (PREINCREMENT_EXPR, TREE_TYPE (reg), reg,
! fold_convert (TREE_TYPE (reg), size_int (n_reg)));
gimplify_and_add (u, pre_p);
if (indirect_p)
--
Dr. Ulrich Weigand
weigand@informatik.uni-erlangen.de