<p dir="ltr">Thanks Kevin for the reply. I got the point now :) </p>
<div class="gmail_quote">On 10 Apr 2015 00:18, "Smith, Kevin B" <<a href="mailto:kevin.b.smith@intel.com">kevin.b.smith@intel.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d">For x86_64 ABI, a minimum feature set of SSE2 is required.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d">Kevin<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a> [mailto:<a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a>]
<b>On Behalf Of </b>suyog sarda<br>
<b>Sent:</b> Thursday, April 09, 2015 11:27 AM<br>
<b>To:</b> LLVM Developers Mailing List; David Majnemer; Sanjay Patel<br>
<b>Subject:</b> [LLVMdev] MMX/SSE subtarget feature in IR<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi all,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I have a sample test case :<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">$ cat 1.c<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">int foo(int x, int y){<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  int z = x + y;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  return z/2;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I tried to get its IR form with clang providing subtarget feature as mmx for target x86_64<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">$ clang -O3 -mmmx 1.c -S -emit-llvm<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">in the IR generated i can see the subtarget-features as function attribute :<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">"target-features"="+mmx"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">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.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Subtarget->hasMMX()  ------ true<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Subtarget->hasSSE1() ------ true<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Subtarget->hasSSE2() ------ true<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">These functions just compare the X86SSELevel with subtarget enum values like MMX, SSE1, SSE2 etc.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">hasMMX() { return X86SSELevel >= MMX}; // similar for others<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Now, enum values start from  MMX and goes on increasing with SSE1, SSE2, etc.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">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?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">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.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I am sure i am missing something fundamental, but unable to exactly find out what.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Can someone please help me out on above question?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Suyog Sarda <u></u><u></u></p>
</div>
</div>
</div>
</div>

</blockquote></div>