Commit b0a3412c by Glen Nakamura Committed by Richard Henderson

re PR rtl-optimization/8634 (incorrect code for inlining of memcpy under -O2)

        PR opt/8634
        * explow.c (maybe_set_unchanging): Don't flag non-static const
        aggregate type initializers with RTX_UNCHANGING_P.

From-SVN: r65352
parent c5a1e3d6
2003-04-07 Glen Nakamura <glen@imodulo.com>
PR opt/8634
* explow.c (maybe_set_unchanging): Don't flag non-static const
aggregate type initializers with RTX_UNCHANGING_P.
2003-04-07 Richard Henderson <rth@redhat.com> 2003-04-07 Richard Henderson <rth@redhat.com>
PR opt/8634 PR opt/8634
......
...@@ -657,8 +657,18 @@ maybe_set_unchanging (ref, t) ...@@ -657,8 +657,18 @@ maybe_set_unchanging (ref, t)
/* We can set RTX_UNCHANGING_P from TREE_READONLY for decls whose /* We can set RTX_UNCHANGING_P from TREE_READONLY for decls whose
initialization is only executed once, or whose initializer always initialization is only executed once, or whose initializer always
has the same value. Currently we simplify this to PARM_DECLs in the has the same value. Currently we simplify this to PARM_DECLs in the
first case, and decls with TREE_CONSTANT initializers in the second. */ first case, and decls with TREE_CONSTANT initializers in the second.
We cannot do this for non-static aggregates, because of the double
writes that can be generated by store_constructor, depending on the
contents of the initializer. Yes, this does eliminate a good fraction
of the number of uses of RTX_UNCHANGING_P for a language like Ada.
It also eliminates a good quantity of bugs. Let this be incentive to
eliminate RTX_UNCHANGING_P entirely in favour of a more reliable
solution, perhaps based on alias sets. */
if ((TREE_READONLY (t) && DECL_P (t) if ((TREE_READONLY (t) && DECL_P (t)
&& (TREE_STATIC (t) || ! AGGREGATE_TYPE_P (TREE_TYPE (t)))
&& (TREE_CODE (t) == PARM_DECL && (TREE_CODE (t) == PARM_DECL
|| (DECL_INITIAL (t) && TREE_CONSTANT (DECL_INITIAL (t))))) || (DECL_INITIAL (t) && TREE_CONSTANT (DECL_INITIAL (t)))))
|| TREE_CODE_CLASS (TREE_CODE (t)) == 'c') || TREE_CODE_CLASS (TREE_CODE (t)) == 'c')
......
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