diff options
author | Joseph Myers <joseph@codesourcery.com> | 2009-05-15 13:13:02 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2009-05-15 13:13:02 +0100 |
commit | 16b29cc4d6294f78af7026dbf5aae68b03531da3 (patch) | |
tree | 3515881bf8eb12526689a646dc2ac11b970093fe /gcc/tree-ssa-forwprop.c | |
parent | 934432b66c473da1d248bb5f61dc8549bf14db81 (diff) | |
download | gcc-16b29cc4d6294f78af7026dbf5aae68b03531da3.tar.gz |
tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Also recurse on an invariant address if a conversion from a pointer type to a...
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Also
recurse on an invariant address if a conversion from a pointer
type to a wider integer type is involved.
testsuite:
* gcc.c-torture/compile/ptr-conv-1.c: New test.
From-SVN: r147570
Diffstat (limited to 'gcc/tree-ssa-forwprop.c')
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index 65b02af27f6..ef78703c8ee 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -739,7 +739,11 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, address which we cannot do in a single statement. */ if (!single_use_p || (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (def_rhs)) - && !is_gimple_min_invariant (def_rhs))) + && (!is_gimple_min_invariant (def_rhs) + || (INTEGRAL_TYPE_P (TREE_TYPE (lhs)) + && POINTER_TYPE_P (TREE_TYPE (def_rhs)) + && (TYPE_PRECISION (TREE_TYPE (lhs)) + > TYPE_PRECISION (TREE_TYPE (def_rhs))))))) return forward_propagate_addr_expr (lhs, def_rhs); gimple_assign_set_rhs1 (use_stmt, unshare_expr (def_rhs)); |