Properly expand strlen to Pmode.

2011-06-14  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/47364
	* builtins.c (expand_builtin_strlen): Expand strlen to Pmode
	and properly handle result not in Pmode.

From-SVN: r175034
This commit is contained in:
H.J. Lu 2011-06-14 16:31:57 +00:00 committed by H.J. Lu
parent 652de9ffb6
commit fa4657624c
2 changed files with 15 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2011-06-14 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/47364
* builtins.c (expand_builtin_strlen): Expand strlen to Pmode
and properly handle result not in Pmode.
2011-06-14 Robert Millan <rmh@gnu.org>
* config/i386/kfreebsd-gnu.h: Resync with `config/i386/linux.h'.

View File

@ -2939,9 +2939,16 @@ expand_builtin_strlen (tree exp, rtx target,
/* Now that we are assured of success, expand the source. */
start_sequence ();
pat = expand_expr (src, src_reg, ptr_mode, EXPAND_NORMAL);
pat = expand_expr (src, src_reg, Pmode, EXPAND_NORMAL);
if (pat != src_reg)
emit_move_insn (src_reg, pat);
{
#ifdef POINTERS_EXTEND_UNSIGNED
if (GET_MODE (pat) != Pmode)
pat = convert_to_mode (Pmode, pat,
POINTERS_EXTEND_UNSIGNED);
#endif
emit_move_insn (src_reg, pat);
}
pat = get_insns ();
end_sequence ();