diff mbox

Fix up -march=native handling under KVM (PR target/61570)

Message ID CAMe9rOpMRQ7U6JDF844ijgLkL=fhJ7DW4x-dfiuW7ETze_vchw@mail.gmail.com
State New
Headers show

Commit Message

H.J. Lu June 23, 2014, 4:29 p.m. UTC
On Sun, Jun 22, 2014 at 11:23 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Sat, Jun 21, 2014 at 8:07 PM, Jakub Jelinek <jakub@redhat.com> wrote:
>
>>> > --- gcc/config/i386/driver-i386.c.jj    2014-05-14 14:45:54.000000000 +0200
>>> > +++ gcc/config/i386/driver-i386.c       2014-06-20 18:59:57.805006358 +0200
>>> > @@ -745,6 +745,11 @@ const char *host_detect_local_cpu (int a
>>> >                     /* Assume Core 2.  */
>>> >                     cpu = "core2";
>>> >                 }
>>> > +             else if (has_longmode)
>>> > +               /* Perhaps some emulator?  Assume x86-64, otherwise gcc
>>> > +                  -march=native would be unusable for 64-bit compilations,
>>> > +                  as all the CPUs below are 32-bit only.  */
>>> > +               cpu = "x86-64";
>>> >               else if (has_sse3)
>>> >                 /* It is Core Duo.  */
>>> >                 cpu = "pentium-m";
>>> >
>>> >         Jakub
>>>
>>> host_detect_local_cpu guesses the cpu based on the real processors.
>>> It doesn't work with emulators due to some conflicts.  This isn't the
>>> only only place which has the same issue.   I prefer something like
>>> this.
>>
>> I'm fine with your patch too.  Let's wait what Uros (or other i?86
>> maintainers) pick up.
>
> This looks OK to me.
>
> Thanks,
> Uros.

This is what I checked in.

Thanks.

Comments

Uros Bizjak June 24, 2014, 6:51 a.m. UTC | #1
On Mon, Jun 23, 2014 at 6:29 PM, H.J. Lu <hjl.tools@gmail.com> wrote:

>>>> > --- gcc/config/i386/driver-i386.c.jj    2014-05-14 14:45:54.000000000 +0200
>>>> > +++ gcc/config/i386/driver-i386.c       2014-06-20 18:59:57.805006358 +0200
>>>> > @@ -745,6 +745,11 @@ const char *host_detect_local_cpu (int a
>>>> >                     /* Assume Core 2.  */
>>>> >                     cpu = "core2";
>>>> >                 }
>>>> > +             else if (has_longmode)
>>>> > +               /* Perhaps some emulator?  Assume x86-64, otherwise gcc
>>>> > +                  -march=native would be unusable for 64-bit compilations,
>>>> > +                  as all the CPUs below are 32-bit only.  */
>>>> > +               cpu = "x86-64";
>>>> >               else if (has_sse3)
>>>> >                 /* It is Core Duo.  */
>>>> >                 cpu = "pentium-m";
>>>> >
>>>> >         Jakub
>>>>
>>>> host_detect_local_cpu guesses the cpu based on the real processors.
>>>> It doesn't work with emulators due to some conflicts.  This isn't the
>>>> only only place which has the same issue.   I prefer something like
>>>> this.
>>>
>>> I'm fine with your patch too.  Let's wait what Uros (or other i?86
>>> maintainers) pick up.
>>
>> This looks OK to me.
>>
>> Thanks,
>> Uros.
>
> This is what I checked in.

This version was NOT approved. Please revert it ASAP and proceed with
approved version.

Uros.
H.J. Lu June 24, 2014, 2:47 p.m. UTC | #2
On Mon, Jun 23, 2014 at 11:51 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Mon, Jun 23, 2014 at 6:29 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>
>>>>> > --- gcc/config/i386/driver-i386.c.jj    2014-05-14 14:45:54.000000000 +0200
>>>>> > +++ gcc/config/i386/driver-i386.c       2014-06-20 18:59:57.805006358 +0200
>>>>> > @@ -745,6 +745,11 @@ const char *host_detect_local_cpu (int a
>>>>> >                     /* Assume Core 2.  */
>>>>> >                     cpu = "core2";
>>>>> >                 }
>>>>> > +             else if (has_longmode)
>>>>> > +               /* Perhaps some emulator?  Assume x86-64, otherwise gcc
>>>>> > +                  -march=native would be unusable for 64-bit compilations,
>>>>> > +                  as all the CPUs below are 32-bit only.  */
>>>>> > +               cpu = "x86-64";
>>>>> >               else if (has_sse3)
>>>>> >                 /* It is Core Duo.  */
>>>>> >                 cpu = "pentium-m";
>>>>> >
>>>>> >         Jakub
>>>>>
>>>>> host_detect_local_cpu guesses the cpu based on the real processors.
>>>>> It doesn't work with emulators due to some conflicts.  This isn't the
>>>>> only only place which has the same issue.   I prefer something like
>>>>> this.
>>>>
>>>> I'm fine with your patch too.  Let's wait what Uros (or other i?86
>>>> maintainers) pick up.
>>>
>>> This looks OK to me.
>>>
>>> Thanks,
>>> Uros.
>>
>> This is what I checked in.
>
> This version was NOT approved. Please revert it ASAP and proceed with
> approved version.
>
> Uros.

I reverted my change.  Sorry for my misunderstanding.
diff mbox

Patch

Index: ChangeLog
===================================================================
--- ChangeLog (revision 211900)
+++ ChangeLog (working copy)
@@ -1,3 +1,9 @@ 
+2014-06-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+ PR target/61570
+ * config/i386/driver-i386.c (host_detect_local_cpu): Set arch
+ to x86-64 if a 32-bit processor supports SSE2 and 64-bit.
+
 2014-06-23  James Greenhalgh  <james.greenhalgh@arm.com>

  * config/aarch64/aarch64.md (addsi3_aarch64): Set "simd" attr to
Index: config/i386/driver-i386.c
===================================================================
--- config/i386/driver-i386.c (revision 211900)
+++ config/i386/driver-i386.c (working copy)
@@ -415,6 +415,7 @@  const char *host_detect_local_cpu (int a
   bool arch;

   unsigned int l2sizekb = 0;
+  unsigned int arch_64bit = 1;

   if (argc < 1)
     return NULL;
@@ -656,11 +657,14 @@  const char *host_detect_local_cpu (int a
     {
     case PROCESSOR_I386:
       /* Default.  */
+      arch_64bit = 0;
       break;
     case PROCESSOR_I486:
+      arch_64bit = 0;
       cpu = "i486";
       break;
     case PROCESSOR_PENTIUM:
+      arch_64bit = 0;
       if (arch && has_mmx)
  cpu = "pentium-mmx";
       else
@@ -745,21 +749,25 @@  const char *host_detect_local_cpu (int a
     /* Assume Core 2.  */
     cpu = "core2";
  }
-      else if (has_sse3)
- /* It is Core Duo.  */
- cpu = "pentium-m";
-      else if (has_sse2)
- /* It is Pentium M.  */
- cpu = "pentium-m";
-      else if (has_sse)
- /* It is Pentium III.  */
- cpu = "pentium3";
-      else if (has_mmx)
- /* It is Pentium II.  */
- cpu = "pentium2";
       else
- /* Default to Pentium Pro.  */
- cpu = "pentiumpro";
+ {
+  arch_64bit = 0;
+  if (has_sse3)
+    /* It is Core Duo.  */
+    cpu = "pentium-m";
+  else if (has_sse2)
+    /* It is Pentium M.  */
+    cpu = "pentium-m";
+  else if (has_sse)
+    /* It is Pentium III.  */
+    cpu = "pentium3";
+  else if (has_mmx)
+    /* It is Pentium II.  */
+    cpu = "pentium2";
+  else
+    /* Default to Pentium Pro.  */
+    cpu = "pentiumpro";
+ }
     }
   else
     /* For -mtune, we default to -mtune=generic.  */
@@ -773,21 +781,30 @@  const char *host_detect_local_cpu (int a
   if (has_longmode)
     cpu = "nocona";
   else
-    cpu = "prescott";
+    {
+      cpu = "prescott";
+      arch_64bit = 0;
+    }
  }
       else
- cpu = "pentium4";
+ {
+  cpu = "pentium4";
+  arch_64bit = 0;
+ }
       break;
     case PROCESSOR_GEODE:
+      arch_64bit = 0;
       cpu = "geode";
       break;
     case PROCESSOR_K6:
+      arch_64bit = 0;
       if (arch && has_3dnow)
  cpu = "k6-3";
       else
  cpu = "k6";
       break;
     case PROCESSOR_ATHLON:
+      arch_64bit = 0;
       if (arch && has_sse)
  cpu = "athlon-4";
       else
@@ -896,6 +913,10 @@  const char *host_detect_local_cpu (int a
       const char *xsavec = has_xsavec ? " -mxsavec" : " -mno-xsavec";
       const char *xsaves = has_xsaves ? " -mxsaves" : " -mno-xsaves";

+      /* Assume x86-64 if a 32-bit processor supports SSE2 and 64-bit.  */
+      if (arch_64bit == 0 && has_sse2 && has_longmode)
+ cpu = "x86-64";
+
       options = concat (options, mmx, mmx3dnow, sse, sse2, sse3, ssse3,
  sse4a, cx16, sahf, movbe, aes, sha, pclmul,
  popcnt, abm, lwp, fma, fma4, xop, bmi, bmi2,