<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";
        color:black;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor="white" lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"> Synth-diy [mailto:synth-diy-bounces@synth-diy.org]
<b>On Behalf Of </b>Steve via Synth-diy<br>
<br>
</span><o:p></o:p></p>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">>>
</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">But main issue is the last time I looked STM still hadn’t integrated Clang into CubeIDE which makes it useless for any application where performance is essential.</span><o:p></o:p></p>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
<span style="color:#1F497D">> </span>Do you have anything to point to, to substantiate this idea of Clang's general superiority?<br>
<span style="color:#1F497D">> </span>Could it be application specific?<br>
<br>
<span style="color:#1F497D">> </span>E.g. "<span style="font-family:"Arial","sans-serif";color:#121212;background:white">For the vast majority of benchmarks the LLVM Clang vs. GCC performance was quite close"<br>
</span><span style="font-family:"Arial","sans-serif";color:#1F497D;background:white">>
</span><span style="font-family:"Arial","sans-serif";color:#121212;background:white">and
</span>"<span style="font-family:"Arial","sans-serif";color:#121212;background:white">The NCNN neural network inference library from Tencent was performing hugely better when built under the GCC compiler"</span><br>
<span style="color:#1F497D">> </span><a href="https://www.phoronix.com/scan.php?page=article&item=apple-m1-compilers">https://www.phoronix.com/scan.php?page=article&item=apple-m1-compilers</a><o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I’m afraid I see this sort of comment all the time.  Since 2014, Apple, ARM, Google, IBM et al have poured a fortune into developing
 LLVM as development of gcc had gone down a bit of a dead end.   Comments like they are ‘quite close’ tend to come from people using the free version of Clang which is years out of date, rather than the paid for versions such as ARM Compiler or Xcode which
 are two generations newer with many improvements.  And as GNU simply copied some of the optimisations of the LLVM project into gcc without even referencing those copies, it is quite possible future improvements may never be introduced into the open source
 versions of LLVM, or at least kept back a few generations.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">In our applications I generally see anything from 8% for general logic (an example you can try is the Circle RTOS for Raspberry
 Pis) to 34% for DSP functions (which is our main area of expertise so definitely application specific but far too large a gain to throw away). 
<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">However I have one particular routine for a high speed multiplexed digital drop and accumulate/insert bus where the improvement
 is over 200% as no matter what –Ox I applied, gcc simply couldn’t see an obvious register optimisation that stopped it using the stack.  You can force it to use registers by setting –O0 but then it doesn’t optimise the logic as you can’t switch optimisation
 levels inside functions.  But ARM compiler saw the obvious straight away.  This is the routine I’m cutting and pasting into RP2040 code.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Since about 2017, I’ve only found one thing that was better with gcc, and that was a custom Linux build we used for an audio analyser
 product, which of course is the thing gcc is optimised for and on which it is tested.  But Android, which is based on Linux of course, has been developed using ARM Compiler since 2014 and usually always compiled on it or Clang.  Similarly with MacOS and iOS.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">The thing that amazes me is people spend ages trying to overclock processors using expensive cooling systems to get maybe a 10%
 improvement, yet ignore similar gains available by just getting a decent compiler.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
</div>
</body>
</html>