diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-01-22 17:41:30 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-01-22 17:41:30 +0100 |
commit | 3a984f1011711044bc57484f7303230eef4b2d85 (patch) | |
tree | 952d790c8ff351b2705d8cf230012c8ecb48f326 /gcc/config | |
parent | 904812578d14a5f06cd294b5398e8bb2a237c031 (diff) | |
download | gcc-3a984f1011711044bc57484f7303230eef4b2d85.zip gcc-3a984f1011711044bc57484f7303230eef4b2d85.tar.gz gcc-3a984f1011711044bc57484f7303230eef4b2d85.tar.bz2 |
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
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/i386/i386.md | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 531b62d..96f6dcd 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -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") |