[llvm-commits] [llvm] r63495 - in /llvm/trunk: lib/Target/X86/X86CallingConv.td lib/Target/X86/X86ISelLowering.cpp lib/Target/X86/X86Subtarget.cpp test/CodeGen/X86/2009-01-25-NoSSE.ll test/CodeGen/X86/nosse-varargs.ll
Dan Gohman
gohman at apple.com
Mon Feb 2 13:43:41 PST 2009
On Feb 2, 2009, at 12:55 PM, Török Edwin wrote:
>
>> On Feb 1, 2009, at 10:15 AM, Torok Edwin wrote:
>>
>>
>>> =
>>> =
>>> ====================================================================
>>> --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)
>>> +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Sun Feb 1 12:15:56
>>> 2009
>>> @@ -331,7 +331,7 @@
>>> // are enabled. These are available on all x86-64 CPUs.
>>> if (Is64Bit) {
>>> HasX86_64 = true;
>>> -#if 1
>>> +#if 0
>>> if (X86SSELevel < SSE2)
>>> X86SSELevel = SSE2;
>>> #endif
>>>
>>
>>
>> Can you fix the comment immediately above this to reflect
>> what the code now does?
>>
>
> See below for patch.
>
>> Also, without this code, does -march=x86-64 default to having
>> SSE2 disabled (or dependent on the host)?
>
> In my tests it defaulted to being enabled, but I think that is due to
> CPU features autodetection.
> If you supply it with a CPU it should default to SSE2, because there
> is
> something in parsesubtargetfeatures that turns on implied features
> of a CPU.
>
> I have a testcase that checks that by default llc -march=x86-64
> generates SSE2, and with -mattr=-sse it doesn't (sse-novarargs.ll).
>
>> Since all known
>> x86-64 hardware supports SSE2, it's convenient to have SSE2
>> enabled by default on x86-64.
>>
>
> To be safe [1], we can force the SSE level to be 2 only when
> autodetecting features. If user supplied CPU/features we don't force:
>
> [1] if you're cross-compiling from a non-SSE capable x86-32 CPU to
> x86-64
>
> Is this patch OK to go in?
>
> Index: lib/Target/X86/X86Subtarget.cpp
> ===================================================================
> --- lib/Target/X86/X86Subtarget.cpp (revision 63542)
> +++ lib/Target/X86/X86Subtarget.cpp (working copy)
> @@ -322,13 +322,19 @@
> // If feature string is not empty, parse features string.
> std::string CPU = GetCurrentX86CPU();
> ParseSubtargetFeatures(FS, CPU);
> + // All X86-64 CPUs also have SSE2, however user might request no
> SSE via
> + // -mattr, so don't force SSELevel here.
> } else {
> // Otherwise, use CPUID to auto-detect feature set.
> AutoDetectSubtargetFeatures();
> + if (Is64Bit) {
> + // Make sure SSE2 is enabled, it is available on all X86-64
> CPUs.
> + X86SSELevel = SSE2;
> + }
It looks like this should also check if (X86SSELevel < SSE2) so that
it doesn't override when AutoDetectSubtargetFeatures detects an SSE
level greater than SSE2. With that fixed, this looks good.
>
> }
>
> - // If requesting codegen for X86-64, make sure that 64-bit and SSE2
> features
> - // are enabled. These are available on all x86-64 CPUs.
> + // If requesting codegen for X86-64, make sure that 64-bit features
> + // are enabled.
> if (Is64Bit) {
> HasX86_64 = true;
> }
Do you think it would make sense to move this up into the else clause
above too? I'm wondering if an assert(!Is64Bit || HasX86_64) after the
else would be a sane sanity check.
Thanks,
Dan
More information about the llvm-commits
mailing list