Commit 150594ba by Andrew Pinski Committed by Andrew Pinski

re PR tree-optimization/32090 (ICE in forwprop with zero sized array)

2007-05-25  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR tree-opt/32090
        * tree-ssa-forwprop.c
        (forward_propagate_addr_into_variable_array_index): Remove
        the lhs argument.  Use the type of def_rhs instead of lhs.
        (forward_propagate_addr_expr_1): Update use of
        forward_propagate_addr_into_variable_array_index.

2007-05-25  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR tree-opt/32090
        * g++.dg/opt/array2.C: New testcase.

From-SVN: r125087
parent cd3a59b3
2007-05-25 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR tree-opt/32090
* tree-ssa-forwprop.c
(forward_propagate_addr_into_variable_array_index): Remove
the lhs argument. Use the type of def_rhs instead of lhs.
(forward_propagate_addr_expr_1): Update use of
forward_propagate_addr_into_variable_array_index.
2007-05-25 Sandra Loosemore <sandra@codesourcery.com> 2007-05-25 Sandra Loosemore <sandra@codesourcery.com>
Nigel Stephens <nigel@mips.com> Nigel Stephens <nigel@mips.com>
......
2007-05-25 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR tree-opt/32090
* g++.dg/opt/array2.C: New testcase.
007-05-26 Uros Bizjak <ubizjak@gmail.com> 007-05-26 Uros Bizjak <ubizjak@gmail.com>
PR target/32065 PR target/32065
/* { dg-do compile } */
/* { dg-options "-O2" } */
struct JArray
{
int data[1];
};
void *copyIntoByteArray (struct JArray *dest, __SIZE_TYPE__ offset)
{
void *pdest = dest->data + offset;
return pdest;
}
...@@ -478,8 +478,8 @@ tidy_after_forward_propagate_addr (tree stmt) ...@@ -478,8 +478,8 @@ tidy_after_forward_propagate_addr (tree stmt)
mark_symbols_for_renaming (stmt); mark_symbols_for_renaming (stmt);
} }
/* DEF_RHS defines LHS which is contains the address of the 0th element /* DEF_RHS contains the address of the 0th element in an array.
in an array. USE_STMT uses LHS to compute the address of an USE_STMT uses type of DEF_RHS to compute the address of an
arbitrary element within the array. The (variable) byte offset arbitrary element within the array. The (variable) byte offset
of the element is contained in OFFSET. of the element is contained in OFFSET.
...@@ -494,7 +494,7 @@ tidy_after_forward_propagate_addr (tree stmt) ...@@ -494,7 +494,7 @@ tidy_after_forward_propagate_addr (tree stmt)
with the new address computation. */ with the new address computation. */
static bool static bool
forward_propagate_addr_into_variable_array_index (tree offset, tree lhs, forward_propagate_addr_into_variable_array_index (tree offset,
tree def_rhs, tree use_stmt) tree def_rhs, tree use_stmt)
{ {
tree index; tree index;
...@@ -516,7 +516,7 @@ forward_propagate_addr_into_variable_array_index (tree offset, tree lhs, ...@@ -516,7 +516,7 @@ forward_propagate_addr_into_variable_array_index (tree offset, tree lhs,
/* Try to find an expression for a proper index. This is either /* Try to find an expression for a proper index. This is either
a multiplication expression by the element size or just the a multiplication expression by the element size or just the
ssa name we came along in case the element size is one. */ ssa name we came along in case the element size is one. */
if (integer_onep (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (lhs))))) if (integer_onep (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (def_rhs)))))
index = offset; index = offset;
else else
{ {
...@@ -531,7 +531,7 @@ forward_propagate_addr_into_variable_array_index (tree offset, tree lhs, ...@@ -531,7 +531,7 @@ forward_propagate_addr_into_variable_array_index (tree offset, tree lhs,
if (TREE_CODE (offset) != MULT_EXPR if (TREE_CODE (offset) != MULT_EXPR
|| TREE_CODE (TREE_OPERAND (offset, 1)) != INTEGER_CST || TREE_CODE (TREE_OPERAND (offset, 1)) != INTEGER_CST
|| !simple_cst_equal (TREE_OPERAND (offset, 1), || !simple_cst_equal (TREE_OPERAND (offset, 1),
TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (lhs))))) TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (def_rhs)))))
return false; return false;
/* The first operand to the MULT_EXPR is the desired index. */ /* The first operand to the MULT_EXPR is the desired index. */
...@@ -679,7 +679,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt, ...@@ -679,7 +679,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt,
bool res; bool res;
tree offset_stmt = SSA_NAME_DEF_STMT (TREE_OPERAND (rhs, 1)); tree offset_stmt = SSA_NAME_DEF_STMT (TREE_OPERAND (rhs, 1));
res = forward_propagate_addr_into_variable_array_index (offset_stmt, lhs, res = forward_propagate_addr_into_variable_array_index (offset_stmt,
def_rhs, use_stmt); def_rhs, use_stmt);
return res; return res;
} }
...@@ -694,7 +694,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt, ...@@ -694,7 +694,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, tree use_stmt,
{ {
bool res; bool res;
tree offset_stmt = SSA_NAME_DEF_STMT (TREE_OPERAND (rhs, 0)); tree offset_stmt = SSA_NAME_DEF_STMT (TREE_OPERAND (rhs, 0));
res = forward_propagate_addr_into_variable_array_index (offset_stmt, lhs, res = forward_propagate_addr_into_variable_array_index (offset_stmt,
def_rhs, use_stmt); def_rhs, use_stmt);
return res; return res;
} }
......
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