[PATCH] Fix host processor identification for Sandy Bridge
Aaron Ballman
aaron at aaronballman.com
Thu Mar 14 10:31:35 PDT 2013
On Thu, Mar 14, 2013 at 12:20 PM, Benjamin Kramer <benny.kra at gmail.com> wrote:
>
> On 11.03.2013, at 15:55, Aaron Ballman <aaron at aaronballman.com> wrote:
>
>> This patch addresses PR15351 by explicitly checking for AVX support
>> when getting the host processor information. Not all Sandy Bridge
>> processors support AVX (such as the Pentium-based ones), so I am
>> checking explicitly for AVX support when deciding which processor to
>> report.
>
> Do newer CPUs have the same issue. It's certainly an issue if you have e.g. an Ivy Bridge on SP1-less Windows 7.
As far as I'm aware, they do not. But I'm also not an expert on Intel
processor models.
>> I'm not entirely certain of how to make a lit test for this though, so
>> suggestions are welcome.
>
> Sadly, there isn't really a way to fake a CPU in lit.
Oh well.
>
>> Index: lib/Support/Host.cpp
>> ===================================================================
>> --- lib/Support/Host.cpp (revision 176803)
>> +++ lib/Support/Host.cpp (working copy)
>> @@ -112,6 +112,16 @@
>> #endif
>> }
>>
>> +static bool OSHasAVXSupport() {
>> +#if defined(__GNUC__)
>> + int rEAX, rEDX;
>> + __asm__ ("xgetbv" : "=a" (rEAX), "=d" (rEDX) : "c" (0));
>> +#elif defined(_MSC_VER)
>> + unsigned long long rEAX = _xgetbv(_XCR_XFEATURE_ENABLED_MASK);
>> +#endif
>> + return (rEAX & 6) == 6;
>
> What should happen if neither __GNUC__ nor _MSC_VER is set? return false?
I'd say returning false is the safest bet; less likely to cause
illegal instruction crashes this way. Would it make sense to also
generate a warning so someone knows to look at the code for their
compiler?
Thanks!
~Aaron
More information about the cfe-commits
mailing list