aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-pre.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2012-07-25 19:43:15 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2012-07-25 19:43:15 +0000
commitea814c6675874dae704d3ee33b7146c3f5132688 (patch)
treebc5598b0791be6690f4675fc60b70ba3484f2c18 /gcc/tree-ssa-pre.c
parent2514d7f1ffa6049efcf198c373c4d13cef266b03 (diff)
downloadgcc-ea814c6675874dae704d3ee33b7146c3f5132688.zip
gcc-ea814c6675874dae704d3ee33b7146c3f5132688.tar.gz
gcc-ea814c6675874dae704d3ee33b7146c3f5132688.tar.bz2
expr.c (expand_expr_real_1): Do not expand operand #1 and #2 of BIT_FIELD_REF for ignored results.
* expr.c (expand_expr_real_1): Do not expand operand #1 and #2 of BIT_FIELD_REF for ignored results. * fold-const.c (fold_ternary_loc) <BIT_FIELD_REF>: Check that the CONSTRUCTOR has vector type before using vector accessors on it. * gimplify.c (gimplify_compound_lval): Do not gimplify operand #1 and #2 of BIT_FIELD_REF. (gimplify_expr) <BIT_FIELD_REF>: Likewise. * tree-nested.c (convert_nonlocal_reference_op) <BIT_FIELD_REF>: Do not process operand #1 and #2. (convert_local_reference_op): Likewise. * tree-ssa-pre.c (create_component_ref_by_pieces_1): Remove superfluous breaks throughout. <BIT_FIELD_REF>: Reuse operand #1 and #2 directly. * tree.c (stabilize_reference) <BIT_FIELD_REF>: Do not stabilize operand #1 and #2. (UPDATE_FLAGS): Do not consider operand #2 of BIT_FIELD_REF. (build6_stat): Delete. * tree.h (build6_stat, build6, build6_stat_loc, build6_loc): Likewise. ada/ * gcc-interface/utils2.c (gnat_stabilize_reference) <BIT_FIELD_REF>: Do not stabilize operand #1 and #2. From-SVN: r189864
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r--gcc/tree-ssa-pre.c39
1 files changed, 13 insertions, 26 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 499cbcb..8c34c9b 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -2667,7 +2667,7 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
CALL_EXPR_STATIC_CHAIN (folded) = sc;
return folded;
}
- break;
+
case MEM_REF:
{
tree baseop = create_component_ref_by_pieces_1 (block, ref, operand,
@@ -2690,7 +2690,7 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
}
return fold_build2 (MEM_REF, currop->type, baseop, offset);
}
- break;
+
case TARGET_MEM_REF:
{
pre_expr op0expr, op1expr;
@@ -2720,7 +2720,7 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
return build5 (TARGET_MEM_REF, currop->type,
baseop, currop->op2, genop0, currop->op1, genop1);
}
- break;
+
case ADDR_EXPR:
if (currop->op0)
{
@@ -2732,17 +2732,15 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
case IMAGPART_EXPR:
case VIEW_CONVERT_EXPR:
{
- tree folded;
tree genop0 = create_component_ref_by_pieces_1 (block, ref,
operand,
stmts, domstmt);
if (!genop0)
return NULL_TREE;
- folded = fold_build1 (currop->opcode, currop->type,
- genop0);
- return folded;
+
+ return fold_build1 (currop->opcode, currop->type, genop0);
}
- break;
+
case WITH_SIZE_EXPR:
{
tree genop0 = create_component_ref_by_pieces_1 (block, ref, operand,
@@ -2759,28 +2757,18 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
return fold_build2 (currop->opcode, currop->type, genop0, genop1);
}
- break;
+
case BIT_FIELD_REF:
{
- tree folded;
tree genop0 = create_component_ref_by_pieces_1 (block, ref, operand,
stmts, domstmt);
- pre_expr op1expr = get_or_alloc_expr_for (currop->op0);
- pre_expr op2expr = get_or_alloc_expr_for (currop->op1);
- tree genop1;
- tree genop2;
+ tree op1 = currop->op0;
+ tree op2 = currop->op1;
if (!genop0)
return NULL_TREE;
- genop1 = find_or_generate_expression (block, op1expr, stmts, domstmt);
- if (!genop1)
- return NULL_TREE;
- genop2 = find_or_generate_expression (block, op2expr, stmts, domstmt);
- if (!genop2)
- return NULL_TREE;
- folded = fold_build3 (BIT_FIELD_REF, currop->type, genop0, genop1,
- genop2);
- return folded;
+
+ return fold_build3 (BIT_FIELD_REF, currop->type, genop0, op1, op2);
}
/* For array ref vn_reference_op's, operand 1 of the array ref
@@ -2866,10 +2854,9 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
return NULL_TREE;
}
- return fold_build3 (COMPONENT_REF, TREE_TYPE (op1), op0, op1,
- genop2);
+ return fold_build3 (COMPONENT_REF, TREE_TYPE (op1), op0, op1, genop2);
}
- break;
+
case SSA_NAME:
{
pre_expr op0expr = get_or_alloc_expr_for (currop->op0);