[LLVMdev] [PATCH] Detect Haswell subarchitecture (i.e. using -march=native)

Craig Topper craig.topper at gmail.com
Thu Sep 12 21:29:34 PDT 2013


Pretty sure you need to check EAX>=7 from cpuid leaf 0 before calling leaf
7 and you need to use the pass ECX=0 to leaf 7. See
lib/Target/X86/X86Subtarget.cpp which uses a GetX86CpuIDAndInfoEx function
to pass EAX and ECX to cpuid.

I don't think it explains your compiler bug though.


On Thu, Sep 12, 2013 at 2:12 PM, Adam Strzelecki <ono at java.pl> wrote:

> > Anyway, thanks very much for the information. Hopefully that'll let me
> > track things down.
>
> Let me know if you need some more information or dumps.
>
> > Would you mind me taking a day or so to investigate what's going on
> > here properly? Introducing a volatile to work around a bug in Clang
> > itself just seems perverse to me. (And we shouldn't let a CodeGen bug
> > dictate how we implement our functions either).
>
> Looking at the assembly there's something wrong with SI that is not
> getting saved anywhere after CPUID and 0x20 bit test before it gets
> overwritten by LEA.
>
>  332:   mov    eax,0x7
>  337:   mov    rsi,rbx
>  33a:   cpuid
>  33c:   xchg   rsi,rbx
>  33f:   and    esi,0x20
>  342:   shr    esi,0x5
>  345:   lea    rbp,[rip+0x0]        # 34c
> <llvm::sys::getHostCPUName()+0xbc>
>  34c:   lea    r12,[rip+0x0]        # 353
> <llvm::sys::getHostCPUName()+0xc3>
>  353:   cmove  rbp,r12
>  357:   lea    rdi,[rsp+0x188]
>  35f:   lea    rsi,[rip+0x0]        # 366
> <llvm::sys::getHostCPUName()+0xd6>
>
> In both other cases (2) & (3) SI is saved into stack region.
>
> > I promise I'll do the review of your code after that.
>
> Thanks.
>
> Regards,
> --
> Adam
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



-- 
~Craig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130912/e205b248/attachment.html>


More information about the llvm-dev mailing list