re PR target/78090 ([x86_64]: GCC allows integer register for inter unit conversion...
authorUros Bizjak <ubizjak@gmail.com>
Thu, 20 Apr 2017 19:04:36 +0000 (21:04 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 20 Apr 2017 19:04:36 +0000 (21:04 +0200)
PR target/78090
* config/i386/constraints.md (Yc): New register constraint.
* config/i386/i386.md (*float<SWI48:mode><MODEF:mode>2_mixed):
Use Yc constraint for alternative 2 of operand 0.  Remove
preferred_for_speed attribute.

testsuite/ChangeLog:

PR target/78090
* gcc.target/i386/conversion-2.c: Remove obsolete test.

From-SVN: r247036

gcc/ChangeLog
gcc/config/i386/constraints.md
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/conversion-2.c [deleted file]

index d96d987040fca9e0dbf92d9d8f8da63e60936b92..f4cb9193169ffb4f4c22d6c039a1bc8bbf81497f 100644 (file)
@@ -1,3 +1,11 @@
+2017-04-20  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/78090
+       * config/i386/constraints.md (Yc): New register constraint.
+       * config/i386/i386.md (*float<SWI48:mode><MODEF:mode>2_mixed):
+       Use Yc constraint for alternative 2 of operand 0.  Remove
+       preferred_for_speed attribute.
+
 2017-04-20  Alexander Monakov  <amonakov@ispras.ru>
 
        * omp-low.c (lower_lastprivate_clauses): Correct handling of linear and
index 38d604fdace415dc9eb57affaa5e1ad80ce83eab..816704fd2e1390bfe41273cc4e8758774bee1d00 100644 (file)
@@ -99,6 +99,7 @@
 
 ;; We use the Y prefix to denote any number of conditional register sets:
 ;;  z  First SSE register.
+;;  c  SSE inter-unit conversions enabled
 ;;  i  SSE2 inter-unit moves to SSE register enabled
 ;;  j  SSE2 inter-unit moves from SSE register enabled
 ;;  m  MMX inter-unit moves to MMX register enabled
 (define_register_constraint "Yz" "TARGET_SSE ? SSE_FIRST_REG : NO_REGS"
  "First SSE register (@code{%xmm0}).")
 
+(define_register_constraint "Yc"
+ "TARGET_SSE && TARGET_INTER_UNIT_CONVERSIONS ? ALL_SSE_REGS : NO_REGS"
+ "@internal Any SSE register, when SSE and inter-unit conversions are enabled.")
+
 (define_register_constraint "Yi"
  "TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_TO_VEC ? ALL_SSE_REGS : NO_REGS"
  "@internal Any SSE register, when SSE2 and inter-unit moves to vector registers are enabled.")
index d1c3c163fd02211efc428621d21b7d98893bdb41..1a902eebf5065bfa7cd7c9bf28ace3abaa186298 100644 (file)
 })
 
 (define_insn "*float<SWI48:mode><MODEF:mode>2_mixed"
-  [(set (match_operand:MODEF 0 "register_operand" "=f,v,v")
+  [(set (match_operand:MODEF 0 "register_operand" "=f,Yc,v")
        (float:MODEF
          (match_operand:SWI48 1 "nonimmediate_operand" "m,r,m")))]
   "SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_SSE_MATH"
                            && X87_ENABLE_FLOAT (<MODEF:MODE>mode,
                                                 <SWI48:MODE>mode)")
            ]
-           (symbol_ref "true")))
-   (set (attr "preferred_for_speed")
-     (cond [(eq_attr "alternative" "1")
-              (symbol_ref "TARGET_INTER_UNIT_CONVERSIONS")]
            (symbol_ref "true")))])
 
 (define_insn "*float<SWI48x:mode><MODEF:mode>2_i387"
index 8c03b6b931c55033738f4998625ddca147dbc9e5..b5b5c02a89916626259bdbbdd33b7e6e85678945 100644 (file)
@@ -1,3 +1,8 @@
+2017-04-20  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/78090
+       * gcc.target/i386/conversion-2.c: Remove obsolete test.
+
 2017-04-20  David Edelsohn  <dje.gcc@gmail.com>
 
        * g++/opt/pr80436.C: XFAIL on AIX.
diff --git a/gcc/testsuite/gcc.target/i386/conversion-2.c b/gcc/testsuite/gcc.target/i386/conversion-2.c
deleted file mode 100644 (file)
index cca149a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-O2 -fno-toplevel-reorder -mtune=bdver2" } */
-/* { dg-additional-options "-mregparm=1 -msse -mfpmath=sse" { target ia32 } } */
-
-void __attribute__ ((hot))
-f1 (int x)
-{
-  register float f asm ("%xmm0") = x;
-  asm volatile ("" :: "x" (f));
-}
-
-void __attribute__ ((cold))
-f2 (int x)
-{
-  register float f asm ("%xmm1") = x;
-  asm volatile ("" :: "x" (f));
-}
-
-void __attribute__ ((hot))
-f3 (int x)
-{
-  register float f asm ("%xmm2") = x;
-  asm volatile ("" :: "x" (f));
-}
-
-void __attribute__ ((cold))
-f4 (int x)
-{
-  register float f asm ("%xmm3") = x;
-  asm volatile ("" :: "x" (f));
-}
-
-/* { dg-final { scan-assembler "sp\\\), %xmm0" } } */
-/* { dg-final { scan-assembler "(ax|di), %xmm1" } } */
-/* { dg-final { scan-assembler "sp\\\), %xmm2" } } */
-/* { dg-final { scan-assembler "(ax|di), %xmm3" } } */