Commit c56e3582 by Richard Kenner Committed by Richard Kenner

emit-rtl.c (component_ref_for_mem_expr): Try harder to find decl underneath COMPONENT_REFs.

	* emit-rtl.c (component_ref_for_mem_expr): Try harder to find decl
	underneath COMPONENT_REFs.
	(set_mem_attributes): Also strip VIEW_CONVERT_EXPR.

From-SVN: r47662
parent ef31d0c2
Wed Dec 5 06:26:27 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* emit-rtl.c (component_ref_for_mem_expr): Try harder to find decl
underneath COMPONENT_REFs.
(set_mem_attributes): Also strip VIEW_CONVERT_EXPR.
2001-12-05 Neil Booth <neil@daikokuya.demon.co.uk> 2001-12-05 Neil Booth <neil@daikokuya.demon.co.uk>
* toplev.c (display_target_options): Don't print twice. * toplev.c (display_target_options): Don't print twice.
......
...@@ -1649,13 +1649,31 @@ component_ref_for_mem_expr (ref) ...@@ -1649,13 +1649,31 @@ component_ref_for_mem_expr (ref)
if (TREE_CODE (inner) == COMPONENT_REF) if (TREE_CODE (inner) == COMPONENT_REF)
inner = component_ref_for_mem_expr (inner); inner = component_ref_for_mem_expr (inner);
else if (! DECL_P (inner)) else
inner = NULL_TREE; {
tree placeholder_ptr = 0;
/* Now remove any conversions: they don't change what the underlying
object is. Likewise for SAVE_EXPR. Also handle PLACEHOLDER_EXPR. */
while (TREE_CODE (inner) == NOP_EXPR || TREE_CODE (inner) == CONVERT_EXPR
|| TREE_CODE (inner) == NON_LVALUE_EXPR
|| TREE_CODE (inner) == VIEW_CONVERT_EXPR
|| TREE_CODE (inner) == SAVE_EXPR
|| TREE_CODE (inner) == PLACEHOLDER_EXPR)
if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
inner = find_placeholder (inner, &placeholder_ptr);
else
inner = TREE_OPERAND (inner, 0);
if (! DECL_P (inner))
inner = NULL_TREE;
}
if (inner == TREE_OPERAND (ref, 0)) if (inner == TREE_OPERAND (ref, 0))
return ref; return ref;
else else
return build (COMPONENT_REF, TREE_TYPE (ref), inner, TREE_OPERAND (ref, 1)); return build (COMPONENT_REF, TREE_TYPE (ref), inner,
TREE_OPERAND (ref, 1));
} }
/* Given REF, a MEM, and T, either the type of X or the expression /* Given REF, a MEM, and T, either the type of X or the expression
...@@ -1723,10 +1741,12 @@ set_mem_attributes (ref, t, objectp) ...@@ -1723,10 +1741,12 @@ set_mem_attributes (ref, t, objectp)
if (TREE_THIS_VOLATILE (t)) if (TREE_THIS_VOLATILE (t))
MEM_VOLATILE_P (ref) = 1; MEM_VOLATILE_P (ref) = 1;
/* Now remove any NOPs: they don't change what the underlying object is. /* Now remove any conversions: they don't change what the underlying
Likewise for SAVE_EXPR. */ object is. Likewise for SAVE_EXPR. */
while (TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR while (TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR
|| TREE_CODE (t) == NON_LVALUE_EXPR || TREE_CODE (t) == SAVE_EXPR) || TREE_CODE (t) == NON_LVALUE_EXPR
|| TREE_CODE (t) == VIEW_CONVERT_EXPR
|| TREE_CODE (t) == SAVE_EXPR)
t = TREE_OPERAND (t, 0); t = TREE_OPERAND (t, 0);
/* If this expression can't be addressed (e.g., it contains a reference /* If this expression can't be addressed (e.g., it contains a reference
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment