re PR tree-optimization/43783 (-O -ftree-pre options compile libbid wrong)
2010-04-19 Richard Guenther <rguenther@suse.de> PR tree-optimization/43783 * tree-ssa-pre.c (create_component_ref_by_pieces_1): Drop constant ARRAY_REF operands two and three if possible. * gcc.c-torture/execute/pr43783.c: New testcase. From-SVN: r158517
This commit is contained in:
parent
90f775a9c7
commit
d53bed0b2c
@ -1,3 +1,9 @@
|
|||||||
|
2010-04-19 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/43783
|
||||||
|
* tree-ssa-pre.c (create_component_ref_by_pieces_1): Drop
|
||||||
|
constant ARRAY_REF operands two and three if possible.
|
||||||
|
|
||||||
2010-04-19 Uros Bizjak <ubizjak@gmail.com>
|
2010-04-19 Uros Bizjak <ubizjak@gmail.com>
|
||||||
|
|
||||||
PR target/43766
|
PR target/43766
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2010-04-19 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/43783
|
||||||
|
* gcc.c-torture/execute/pr43783.c: New testcase.
|
||||||
|
|
||||||
2010-04-19 Uros Bizjak <ubizjak@gmail.com>
|
2010-04-19 Uros Bizjak <ubizjak@gmail.com>
|
||||||
|
|
||||||
PR target/43766
|
PR target/43766
|
||||||
|
21
gcc/testsuite/gcc.c-torture/execute/pr43783.c
Normal file
21
gcc/testsuite/gcc.c-torture/execute/pr43783.c
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
typedef __attribute__((aligned(16)))
|
||||||
|
struct {
|
||||||
|
unsigned long long w[3];
|
||||||
|
} UINT192;
|
||||||
|
|
||||||
|
UINT192 bid_Kx192[32];
|
||||||
|
|
||||||
|
extern void abort (void);
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
unsigned long x = 0;
|
||||||
|
for (i = 0; i < 32; ++i)
|
||||||
|
bid_Kx192[i].w[1] = i == 1;
|
||||||
|
for (i = 0; i < 32; ++i)
|
||||||
|
x += bid_Kx192[1].w[1];
|
||||||
|
if (x != 32)
|
||||||
|
abort ();
|
||||||
|
return 0;
|
||||||
|
}
|
@ -2779,22 +2779,37 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
|
|||||||
return NULL_TREE;
|
return NULL_TREE;
|
||||||
if (genop2)
|
if (genop2)
|
||||||
{
|
{
|
||||||
op2expr = get_or_alloc_expr_for (genop2);
|
/* Drop zero minimum index. */
|
||||||
genop2 = find_or_generate_expression (block, op2expr, stmts,
|
if (tree_int_cst_equal (genop2, integer_zero_node))
|
||||||
domstmt);
|
genop2 = NULL_TREE;
|
||||||
if (!genop2)
|
else
|
||||||
return NULL_TREE;
|
{
|
||||||
|
op2expr = get_or_alloc_expr_for (genop2);
|
||||||
|
genop2 = find_or_generate_expression (block, op2expr, stmts,
|
||||||
|
domstmt);
|
||||||
|
if (!genop2)
|
||||||
|
return NULL_TREE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (genop3)
|
if (genop3)
|
||||||
{
|
{
|
||||||
tree elmt_type = TREE_TYPE (TREE_TYPE (genop0));
|
tree elmt_type = TREE_TYPE (TREE_TYPE (genop0));
|
||||||
genop3 = size_binop (EXACT_DIV_EXPR, genop3,
|
/* We can't always put a size in units of the element alignment
|
||||||
size_int (TYPE_ALIGN_UNIT (elmt_type)));
|
here as the element alignment may be not visible. See
|
||||||
op3expr = get_or_alloc_expr_for (genop3);
|
PR43783. Simply drop the element size for constant
|
||||||
genop3 = find_or_generate_expression (block, op3expr, stmts,
|
sizes. */
|
||||||
domstmt);
|
if (tree_int_cst_equal (genop3, TYPE_SIZE_UNIT (elmt_type)))
|
||||||
if (!genop3)
|
genop3 = NULL_TREE;
|
||||||
return NULL_TREE;
|
else
|
||||||
|
{
|
||||||
|
genop3 = size_binop (EXACT_DIV_EXPR, genop3,
|
||||||
|
size_int (TYPE_ALIGN_UNIT (elmt_type)));
|
||||||
|
op3expr = get_or_alloc_expr_for (genop3);
|
||||||
|
genop3 = find_or_generate_expression (block, op3expr, stmts,
|
||||||
|
domstmt);
|
||||||
|
if (!genop3)
|
||||||
|
return NULL_TREE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return build4 (currop->opcode, currop->type, genop0, genop1,
|
return build4 (currop->opcode, currop->type, genop0, genop1,
|
||||||
genop2, genop3);
|
genop2, genop3);
|
||||||
|
Loading…
Reference in New Issue
Block a user