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]

More cleanups of LHS nesting


Tested on x86_64-linux-gnu.

2004-06-25  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* tree-nested.c (build_addr): Merge real/imagpart with
	handled_component_p.
	(convert_nonlocal_reference, convert_local_reference): Process extra
	args to COMPONENT_REF and ARRAY_REF.
	* tree-outof-ssa.c (discover_nonconstant_array_refs_r): Check for
	lower bound and field offset being constant.

*** tree-nested.c	22 Jun 2004 03:06:41 -0000	2.5
--- tree-nested.c	25 Jun 2004 19:20:00 -0000
*************** build_addr (tree exp)
*** 159,167 ****
    tree base = exp;
  
!   if (TREE_CODE (base) == REALPART_EXPR || TREE_CODE (base) == IMAGPART_EXPR)
      base = TREE_OPERAND (base, 0);
-   else
-     while (handled_component_p (base))
-       base = TREE_OPERAND (base, 0);
  
    if (DECL_P (base))
--- 159,165 ----
    tree base = exp;
  
!   while (TREE_CODE (base) == REALPART_EXPR || TREE_CODE (base) == IMAGPART_EXPR
! 	 || handled_component_p (base))
      base = TREE_OPERAND (base, 0);
  
    if (DECL_P (base))
*************** convert_nonlocal_reference (tree *tp, in
*** 798,802 ****
        break;
  
-     case COMPONENT_REF:
      case REALPART_EXPR:
      case IMAGPART_EXPR:
--- 796,799 ----
*************** convert_nonlocal_reference (tree *tp, in
*** 806,809 ****
--- 803,813 ----
        break;
  
+     case COMPONENT_REF:
+       wi->val_only = false;
+       walk_tree (&TREE_OPERAND (t, 0), convert_nonlocal_reference, wi, NULL);
+       wi->val_only = true;
+       walk_tree (&TREE_OPERAND (t, 2), convert_nonlocal_reference, wi, NULL);
+       break;
+ 
      case ARRAY_REF:
      case ARRAY_RANGE_REF:
*************** convert_local_reference (tree *tp, int *
*** 933,937 ****
        break;
  
-     case COMPONENT_REF:
      case REALPART_EXPR:
      case IMAGPART_EXPR:
--- 937,940 ----
*************** convert_local_reference (tree *tp, int *
*** 941,944 ****
--- 944,954 ----
        break;
  
+     case COMPONENT_REF:
+       wi->val_only = false;
+       walk_tree (&TREE_OPERAND (t, 0), convert_local_reference, wi, NULL);
+       wi->val_only = true;
+       walk_tree (&TREE_OPERAND (t, 2), convert_local_reference, wi, NULL);
+       break;
+ 
      case ARRAY_REF:
      case ARRAY_RANGE_REF:
*** tree-outof-ssa.c	22 Jun 2004 03:06:41 -0000	2.9
--- tree-outof-ssa.c	25 Jun 2004 19:20:00 -0000
*************** discover_nonconstant_array_refs_r (tree 
*** 1764,1778 ****
    if (TYPE_P (t) || DECL_P (t))
      *walk_subtrees = 0;
!   else if (TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
      {
        while (((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
! 	      && is_gimple_min_invariant (TREE_OPERAND (t, 1)))
  	     || (TREE_CODE (t) == COMPONENT_REF
! 		 || TREE_CODE (t) == BIT_FIELD_REF
! 		 || TREE_CODE (t) == REALPART_EXPR
! 		 || TREE_CODE (t) == IMAGPART_EXPR
! 		 || TREE_CODE (t) == VIEW_CONVERT_EXPR
! 		 || TREE_CODE (t) == NOP_EXPR
! 		 || TREE_CODE (t) == CONVERT_EXPR))
  	t = TREE_OPERAND (t, 0);
  
--- 1764,1782 ----
    if (TYPE_P (t) || DECL_P (t))
      *walk_subtrees = 0;
!   if (TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
      {
        while (((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
! 	      && is_gimple_min_invariant (TREE_OPERAND (t, 1))
! 	      && (!TREE_OPERAND (t, 2)
! 		  || is_gimple_min_invariant (TREE_OPERAND (t, 2))))
  	     || (TREE_CODE (t) == COMPONENT_REF
! 		 && (!TREE_OPERAND (t,2)
! 		     || is_gimple_min_invariant (TREE_OPERAND (t, 2))))
! 	     || TREE_CODE (t) == BIT_FIELD_REF
! 	     || TREE_CODE (t) == REALPART_EXPR
! 	     || TREE_CODE (t) == IMAGPART_EXPR
! 	     || TREE_CODE (t) == VIEW_CONVERT_EXPR
! 	     || TREE_CODE (t) == NOP_EXPR
! 	     || TREE_CODE (t) == CONVERT_EXPR)
  	t = TREE_OPERAND (t, 0);
  


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