+/* This function looks for VAR in STMT, and replace it with NEW_VAR.
+ If needed, it wraps NEW_VAR in pointers and indirect references
+ before insertion. */
+
+static void
+insert_new_var_in_stmt (gimple stmt, tree var, tree new_var)
+{
+ struct ref_pos r_pos;
+ tree *pos;
+
+ pos = find_pos_in_stmt (stmt, var, &r_pos);
+ gcc_assert (pos);
+
+ while (r_pos.container && (TREE_CODE(r_pos.container) == INDIRECT_REF
+ || TREE_CODE(r_pos.container) == ADDR_EXPR))
+ {
+ tree type = TREE_TYPE (TREE_TYPE (new_var));
+
+ if (TREE_CODE(r_pos.container) == INDIRECT_REF)
+ new_var = build1 (INDIRECT_REF, type, new_var);
+ else
+ new_var = build_fold_addr_expr (new_var);
+ pos = find_pos_in_stmt (stmt, r_pos.container, &r_pos);
+ }
+
+ *pos = new_var;
+}
+
+