* gimplify.c (gimplify_modify_expr): Fold generated statements.
* gimple-fold.c (can_refer_decl_in_current_unit_p): Check flag_ltrans.
testsuite/
* gcc.dg/debug/dwarf2/inline3.c: Adjust.
* gcc.dg/tree-ssa/foldstring-1.c: Adjust.
From-SVN: r188664
+2012-06-15 Michael Matz <matz@suse.de>
+
+ * gimplify.c (gimplify_modify_expr): Fold generated statements.
+ * gimple-fold.c (can_refer_decl_in_current_unit_p): Check flag_ltrans.
+
2012-06-15 Richard Guenther <rguenther@suse.de>
* tree-vrp.c (set_and_canonicalize_value_range): Use canonical
struct cgraph_node *node;
symtab_node snode;
- /* We will later output the initializer, so we can reffer to it.
+ /* We will later output the initializer, so we can refer to it.
So we are concerned only when DECL comes from initializer of
external var. */
if (!from_decl
|| TREE_CODE (from_decl) != VAR_DECL
|| !DECL_EXTERNAL (from_decl)
- || (symtab_get_node (from_decl)->symbol.in_other_partition))
+ || (flag_ltrans
+ && symtab_get_node (from_decl)->symbol.in_other_partition))
return true;
- /* We are concerned ony about static/external vars and functions. */
+ /* We are concerned only about static/external vars and functions. */
if ((!TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
|| (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL))
return true;
- /* Weakrefs have somewhat confusing DECL_EXTERNAL flag set; they are always safe. */
+ /* Weakrefs have somewhat confusing DECL_EXTERNAL flag set; they
+ are always safe. */
if (DECL_EXTERNAL (decl)
&& lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
return true;
enum gimplify_status ret = GS_UNHANDLED;
gimple assign;
location_t loc = EXPR_LOCATION (*expr_p);
+ gimple_stmt_iterator gsi;
gcc_assert (TREE_CODE (*expr_p) == MODIFY_EXPR
|| TREE_CODE (*expr_p) == INIT_EXPR);
gimple_set_location (assign, EXPR_LOCATION (*expr_p));
}
- gimplify_seq_add_stmt (pre_p, assign);
-
if (gimplify_ctxp->into_ssa && is_gimple_reg (*to_p))
{
/* If we've somehow already got an SSA_NAME on the LHS, then
gimple_set_lhs (assign, *to_p);
}
+ gimplify_seq_add_stmt (pre_p, assign);
+ gsi = gsi_last (*pre_p);
+ fold_stmt (&gsi);
+
if (want_value)
{
*expr_p = TREE_THIS_VOLATILE (*to_p) ? *from_p : unshare_expr (*to_p);
+2012-06-15 Michael Matz <matz@suse.de>
+
+ * gcc.dg/debug/dwarf2/inline3.c: Adjust.
+ * gcc.dg/tree-ssa/foldstring-1.c: Adjust.
+
2012-06-15 Ulrich Weigand <ulrich.weigand@linaro.org>
PR tree-optimization/53636
/* Verify that only one DW_AT_const_value is emitted for baz,
not for baz abstract DIE and again inside of
DW_TAG_inlined_subroutine. */
-/* { dg-options "-O2 -g -dA" } */
+/* { dg-options "-O2 -g -dA -fmerge-all-constants" } */
/* { dg-do compile } */
/* { dg-final { scan-assembler-times " DW_AT_const_value" 1 } } */
foo (void)
{
const struct A baz = { .i = 2, .j = 21 };
+ /* We must make sure that baz isn't optimized away before inlining,
+ otherwise its initializer is also lost. */
+ const struct A *p = &baz;
asm volatile ("" : : : "memory");
return baz.i * baz.j;
}
/* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-fre1" } */
+/* { dg-options "-O1 -fdump-tree-gimple" } */
void
arf ()
if (""[0] == 0)
blah ();
}
-/* { dg-final { scan-tree-dump-times "= 0;" 1 "fre1"} } */
-/* { dg-final { cleanup-tree-dump "fre1" } } */
+/* { dg-final { scan-tree-dump-times "= 0;" 1 "gimple"} } */
+/* { dg-final { cleanup-tree-dump "gimple" } } */