This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]