re PR rtl-optimization/55686 (ICE in assign_by_spills, at lra-assigns.c:1244)

PR target/55686
	* config/i386/i386.md (UNSPEC_STOS): New.
	(strset_singleop, *strsetdi_rex_1, *strsetsi_1, *strsethi_1,
	*strsetqi_1): Add UNSPEC_STOS.

	* gcc.target/i386/pr55686.c: New test.

From-SVN: r195381
This commit is contained in:
Jakub Jelinek 2013-01-22 17:41:30 +01:00 committed by Jakub Jelinek
parent 904812578d
commit 3a984f1011
4 changed files with 39 additions and 5 deletions

View file

@ -1,3 +1,10 @@
2013-01-22 Jakub Jelinek <jakub@redhat.com>
PR target/55686
* config/i386/i386.md (UNSPEC_STOS): New.
(strset_singleop, *strsetdi_rex_1, *strsetsi_1, *strsethi_1,
*strsetqi_1): Add UNSPEC_STOS.
2013-01-22 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/56067

View file

@ -110,6 +110,7 @@
UNSPEC_PAUSE
UNSPEC_LEA_ADDR
UNSPEC_XBEGIN_ABORT
UNSPEC_STOS
;; For SSE/MMX support:
UNSPEC_FIX_NOTRUNC
@ -15607,7 +15608,8 @@
[(parallel [(set (match_operand 1 "memory_operand")
(match_operand 2 "register_operand"))
(set (match_operand 0 "register_operand")
(match_operand 3))])]
(match_operand 3))
(unspec [(const_int 0)] UNSPEC_STOS)])]
""
"ix86_current_function_needs_cld = 1;")
@ -15616,7 +15618,8 @@
(match_operand:DI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
(const_int 8)))]
(const_int 8)))
(unspec [(const_int 0)] UNSPEC_STOS)]
"TARGET_64BIT
&& !(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"%^stosq"
@ -15629,7 +15632,8 @@
(match_operand:SI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
(const_int 4)))]
(const_int 4)))
(unspec [(const_int 0)] UNSPEC_STOS)]
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"%^stos{l|d}"
[(set_attr "type" "str")
@ -15641,7 +15645,8 @@
(match_operand:HI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
(const_int 2)))]
(const_int 2)))
(unspec [(const_int 0)] UNSPEC_STOS)]
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"%^stosw"
[(set_attr "type" "str")
@ -15653,7 +15658,8 @@
(match_operand:QI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
(const_int 1)))]
(const_int 1)))
(unspec [(const_int 0)] UNSPEC_STOS)]
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"%^stosb"
[(set_attr "type" "str")

View file

@ -1,3 +1,8 @@
2013-01-22 Jakub Jelinek <jakub@redhat.com>
PR target/55686
* gcc.target/i386/pr55686.c: New test.
2013-01-22 Dodji Seketeli <dodji@redhat.com>
PR c++/53609

View file

@ -0,0 +1,16 @@
/* PR target/55686 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
void
foo (long x, long *y)
{
long *a = y - 64, i;
for (i = 0; i < x; i++)
{
long v = y[i];
*a++ = v;
}
register void **c __asm__ ("di");
goto **c;
}