OSDN Git Service

PR target/57264
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 May 2013 17:14:26 +0000 (17:14 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 May 2013 17:14:26 +0000 (17:14 +0000)
Backport from mainline
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.

testsuite/ChangeLog:

PR target/57264
* gcc.target/i386/pr57264.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@198837 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr57264.c [new file with mode: 0644]

index 23e0867..cd8552d 100644 (file)
@@ -1,3 +1,14 @@
+2013-05-13  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/57264
+       Backport from mainline
+       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-05-10  Joey Ye  <joey.ye@arm.com>
 
        Backport from mainline
index 627beee..900252d 100644 (file)
   UNSPEC_CALL_NEEDS_VZEROUPPER
   UNSPEC_PAUSE
   UNSPEC_LEA_ADDR
+  UNSPEC_STOS
 
   ;; For SSE/MMX support:
   UNSPEC_FIX_NOTRUNC
   [(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;")
 
        (match_operand:DI 2 "register_operand" "a"))
    (set (match_operand:DI 0 "register_operand" "=D")
        (plus:DI (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"
        (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")
        (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")
        (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")
index db60bd7..eda7443 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-13  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/57264
+       * gcc.target/i386/pr57264.c: New test.
+
 2013-05-07  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        Backport from trunk
diff --git a/gcc/testsuite/gcc.target/i386/pr57264.c b/gcc/testsuite/gcc.target/i386/pr57264.c
new file mode 100644 (file)
index 0000000..46fce7f
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -mcld" } */
+
+void test (int x, int **pp)
+{
+  while (x)
+    {
+      int *ip = *pp;
+      int *op = *pp;
+      while (*ip)
+       {
+         int v = *ip++;
+         *op++ = v + 1;
+       }
+    }
+}
+
+/* { dg-final { scan-assembler-not "stosl" } } */