[llvm-dev] bad identification of the CPU pentium dual core ( penryn instead of core2 )

Barto via llvm-dev llvm-dev at lists.llvm.org
Wed Oct 21 14:06:58 PDT 2015


the problem is that mesa developpers don't use this function
"getHostCPUFeatures()" in their source code,

I don't know the details of llvm 3.7.0, but if I check the file
/lib/Target/X86.td I can see a list of CPU names, the same list used by
/lib/Support/Host.cpp,

in /lib/Target/X86.td there are a sort of definitions of features for
each CPU :


/ Intel Core 2 Solo/Duo.
def : ProcessorModel<"core2", SandyBridgeModel,
                     [FeatureSSSE3, FeatureCMPXCHG16B, FeatureSlowBTMem]>;
def : ProcessorModel<"penryn", SandyBridgeModel,
                     [FeatureSSE41, FeatureCMPXCHG16B, FeatureSlowBTMem]>;

the problem I see here is that "penryn" processor in llvm source code
has the feature "SSE41", a default behaviour in llvm who can explain
this bug if "pentium dual core" are treated as "penryn" instead of
"core2", don't forget that "pentium dual core" ( cpu family 6 model 23 )
don't support SSE41,

I don't understand the purpose of the /lib/Target/X86.td file, is it a
kind of default behaviour for llvm when he produces binary code ?

there is something weird about your commit
cd83d5b5071f072882ad06cc4b904b2d27d1e54a, with some archlinux
developpers we don't understand why you have deleted the test about
SSE41 for CPU family 6 model 23, the subject of your commit is "AVX" not
"SSE41", the question has been asked to you in this bug report :

https://llvm.org/bugs/show_bug.cgi?id=25021#c7

what is clear is that llvm 3.6.3 doesn't have the bug and people who
have a pentium dual core will meet serious bug with mesa ( if mesa is
linked to llvm 3.7.0 )

Le 21/10/2015 22:43, Craig Topper a écrit :
> That check should not be needed because getHostCPUFeatures() should also
> be called and detect that SSE41 is not supported. This should then pass
> "-sse41" into the feature selection.
> 
> On Wed, Oct 21, 2015 at 2:23 PM, Barto via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> 
>     lvm 3.7.0 treats pentium dual core ( cpu family 6 model 23 ) as "penryn"
>     cpu, which triggers a serious bug :
> 
>     - crashs in openGL programs when llvm is used by mesa package, llvm will
>     produces binary code with SSE4 instructions, which is not compatible
>     with pentium dual core, because this CPU doesn't support SSE4
>     instructions ( bad cpu opcodes ),
> 
>     with llvm 3.6.2 this bug doesn't occur because pentium dual core was
>     treated as "core2" cpu, which is the good behaviour,
> 
>     the llvm git commit who has introduced this bug is :
> 
>     cd83d5b5071f072882ad06cc4b904b2d27d1e54a
> 
>     https://github.com/llvm-mirror/llvm/commit/cd83d5b5071f072882ad06cc4b904b2d27d1e54a
> 
>     this faulty commit has deleted a crucial test about SSE4 for CPU family
>     6 model 23 :
> 
>     return HasSSE41 ? "penryn" : "core2";
> 
>     the solution is simply to re-add this test for CPU family 6 model 23,
>     here is the patch :
> 
>     --- a/lib/Support/Host.cpp    2015-10-14 07:13:52.381374679 +0200
>     +++ b/lib/Support/Host.cpp   2015-10-14 07:13:28.224708323 +0200
>     @@ -332,6 +332,8 @@
>                     // 17h. All processors are manufactured using the 45
>     nm process.
>                     //
>                     // 45nm: Penryn , Wolfdale, Yorkfield (XE)
>     +        // Not all Penryn processors support SSE 4.1 (such as the
>     Pentium brand)
>     +        return HasSSE41 ? "penryn" : "core2";
>            case 29: // Intel Xeon processor MP. All processors are
>     manufactured using
>                     // the 45 nm process.
>              return "penryn";
> 
> 
>     _______________________________________________
>     LLVM Developers mailing list
>     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> 
> 
> 
> 
> -- 
> ~Craig


More information about the llvm-dev mailing list