Commit 3848839d by H.J. Lu Committed by H.J. Lu

Adjust destination address after gen_strset

gcc/

	PR target/59363
	* config/i386/i386.c (emit_memset): Adjust destination address
	after gen_strset.
	(expand_setmem_epilogue): Likewise.

gcc/testsuite/

	PR target/59363
	* gcc.target/i386/pr59363.c: New file.

From-SVN: r205630
parent ddc923b5
2013-12-03 H.J. Lu <hongjiu.lu@intel.com>
PR target/59363
* config/i386/i386.c (emit_memset): Adjust destination address
after gen_strset.
(expand_setmem_epilogue): Likewise.
2013-12-03 Marek Polacek <polacek@redhat.com>
PR middle-end/56344
......@@ -22854,6 +22854,8 @@ emit_memset (rtx destmem, rtx destptr, rtx promoted_val,
if (piece_size <= GET_MODE_SIZE (word_mode))
{
emit_insn (gen_strset (destptr, dst, promoted_val));
dst = adjust_automodify_address_nv (dst, move_mode, destptr,
piece_size);
continue;
}
......@@ -22923,14 +22925,18 @@ expand_setmem_epilogue (rtx destmem, rtx destptr, rtx value, rtx vec_value,
{
dest = change_address (destmem, DImode, destptr);
emit_insn (gen_strset (destptr, dest, value));
dest = adjust_automodify_address_nv (dest, DImode, destptr, 8);
emit_insn (gen_strset (destptr, dest, value));
}
else
{
dest = change_address (destmem, SImode, destptr);
emit_insn (gen_strset (destptr, dest, value));
dest = adjust_automodify_address_nv (dest, SImode, destptr, 4);
emit_insn (gen_strset (destptr, dest, value));
dest = adjust_automodify_address_nv (dest, SImode, destptr, 8);
emit_insn (gen_strset (destptr, dest, value));
dest = adjust_automodify_address_nv (dest, SImode, destptr, 12);
emit_insn (gen_strset (destptr, dest, value));
}
emit_label (label);
......@@ -22948,6 +22954,7 @@ expand_setmem_epilogue (rtx destmem, rtx destptr, rtx value, rtx vec_value,
{
dest = change_address (destmem, SImode, destptr);
emit_insn (gen_strset (destptr, dest, value));
dest = adjust_automodify_address_nv (dest, SImode, destptr, 4);
emit_insn (gen_strset (destptr, dest, value));
}
emit_label (label);
2013-12-03 H.J. Lu <hongjiu.lu@intel.com>
PR target/59363
* gcc.target/i386/pr59363.c: New file.
2013-12-03 Marek Polacek <polacek@redhat.com>
PR c/59351
......
/* PR target/59363 */
/* { dg-do run } */
/* { dg-options "-O2 -mtune=amdfam10" } */
typedef struct {
int ctxlen;
long interhunkctxlen;
int flags;
long find_func;
void *find_func_priv;
int hunk_func;
} xdemitconf_t;
__attribute__((noinline))
int xdi_diff(xdemitconf_t *xecfg) {
if (xecfg->hunk_func == 0)
__builtin_abort();
return 0;
}
int main() {
xdemitconf_t xecfg = {0};
xecfg.hunk_func = 1;
return xdi_diff(&xecfg);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment