diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2013-12-03 12:56:32 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2013-12-03 04:56:32 -0800 |
commit | 3848839d3e2d112d397ef5c0edd5485acd932b42 (patch) | |
tree | 463c902a581264042685223f266c9861c2586420 /gcc/config | |
parent | ddc923b52d28df9ed6e5d50138593a31da3e519a (diff) | |
download | gcc-3848839d3e2d112d397ef5c0edd5485acd932b42.zip gcc-3848839d3e2d112d397ef5c0edd5485acd932b42.tar.gz gcc-3848839d3e2d112d397ef5c0edd5485acd932b42.tar.bz2 |
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
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/i386/i386.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 81e9ce8..21963bb 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -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); |