- tree new_rhs = maybe_fold_stmt_addition (gimple_location (use_stmt),
- TREE_TYPE (def_rhs),
- def_rhs, rhs2);
- if (new_rhs)
- {
- tree type = TREE_TYPE (gimple_assign_lhs (use_stmt));
- new_rhs = unshare_expr (new_rhs);
- if (!useless_type_conversion_p (type, TREE_TYPE (new_rhs)))
- {
- if (!is_gimple_min_invariant (new_rhs))
- new_rhs = force_gimple_operand_gsi (use_stmt_gsi, new_rhs,
- true, NULL_TREE,
- true, GSI_SAME_STMT);
- new_rhs = fold_convert (type, new_rhs);
- }
- gimple_assign_set_rhs_from_tree (use_stmt_gsi, new_rhs);
- use_stmt = gsi_stmt (*use_stmt_gsi);
- update_stmt (use_stmt);
- tidy_after_forward_propagate_addr (use_stmt);
- return true;
- }
+ tree new_rhs = build1_loc (gimple_location (use_stmt),
+ ADDR_EXPR, TREE_TYPE (def_rhs),
+ fold_build2 (MEM_REF,
+ TREE_TYPE (TREE_TYPE (def_rhs)),
+ unshare_expr (def_rhs),
+ fold_convert (ptr_type_node,
+ rhs2)));
+ gimple_assign_set_rhs_from_tree (use_stmt_gsi, new_rhs);
+ use_stmt = gsi_stmt (*use_stmt_gsi);
+ update_stmt (use_stmt);
+ tidy_after_forward_propagate_addr (use_stmt);
+ return true;