[LLVMdev] MMX/SSE subtarget feature in IR
suyog sarda
sardask01 at gmail.com
Thu Apr 9 11:27:17 PDT 2015
Hi all,
I have a sample test case :
$ cat 1.c
int foo(int x, int y){
int z = x + y;
return z/2;
}
I tried to get its IR form with clang providing subtarget feature as mmx
for target x86_64
$ clang -O3 -mmmx 1.c -S -emit-llvm
in the IR generated i can see the subtarget-features as function attribute :
"target-features"="+mmx"
In the SelectionDAG phase in file "X86ISelLowering.cpp", i checked in one
of the function what is the subtarget feature by calling few routines of
Subtarget.
Subtarget->hasMMX() ------ true
Subtarget->hasSSE1() ------ true
Subtarget->hasSSE2() ------ true
These functions just compare the X86SSELevel with subtarget enum values
like MMX, SSE1, SSE2 etc.
hasMMX() { return X86SSELevel >= MMX}; // similar for others
Now, enum values start from MMX and goes on increasing with SSE1, SSE2,
etc.
For the above test case, the X86SSELevel is set to SSE2, which is
confusing, since i have explicitly specified the target feature as 'mmx'.
Why the X86SSELevel is getting set to SSE2 despite providing target-feature
as mmx? Is it something to do with default feature of x86_64?
I wanted to distinguish my code generation based on subtarget feature for
MMX and SSE, which i am unable to do so currently because of above scenario.
I am sure i am missing something fundamental, but unable to exactly find
out what.
Can someone please help me out on above question?
Thanks.
Regards,
Suyog Sarda
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150409/99327ede/attachment.html>
More information about the llvm-dev
mailing list