bool is_gimple_mem_rhs (tree t) { /* If we're dealing with a renamable type, either source or dest must be a renamed variable. Also force a temporary if the type doesn't need to be stored in memory, since it's cheap and prevents erroneous tailcalls (PR 17526). */ if (is_gimple_reg_type (TREE_TYPE (t)) || TYPE_MODE (TREE_TYPE (t)) != BLKmode) return is_gimple_val (t); else return is_gimple_formal_tmp_rhs (t); }
bool is_gimple_reg_rhs (tree t) { /* If the RHS of the MODIFY_EXPR may throw or make a nonlocal goto and the LHS is a user variable, then we need to introduce a formal temporary. This way the optimizers can determine that the user variable is only modified if evaluation of the RHS does not throw. Don't force a temp of a non-renamable type; the copy could be arbitrarily expensive. Instead we will generate a V_MAY_DEF for the assignment. */ if (is_gimple_reg_type (TREE_TYPE (t)) && ((TREE_CODE (t) == CALL_EXPR && TREE_SIDE_EFFECTS (t)) || tree_could_throw_p (t))) return false; return is_gimple_formal_tmp_rhs (t); }