This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
More cleanups of LHS nesting
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 25 Jun 04 16:36:31 EDT
- Subject: 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);