<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=iso-8859-1"><meta name=Generator content="Microsoft Word 12 (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";}
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";}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;}
@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 lang=EN-GB link=blue vlink=purple><div class=WordSection1><div><p class=MsoNormal style='margin-bottom:12.0pt'>This looks like a reasonable goal, but obviously the ARM architecture being quite modular there are a lot more actual variants (and a huge number more "potential" variants) than for other CPUs (and those listed in the table). Is there any nice mechanism for checking if an enum is one of a list of enum-values in the clang codebase?<o:p></o:p></p><div><p class=MsoNormal><br>The simplest way would be to group all ARM architecture in a contiguous range, have a First / Last elements (with redundant values), and then perform a in-range check:<span style='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><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Sorry, I was a bit unclear in my language (early in the morning!). What I meant is the code is creating concrete values at some "level of precision" (obviously we really don't want a enumeration of all values). So the initial patch has ARMv4t,...,ARMv7,ARMv7f,ARMv7k,ARMv7s. Some things will depend just on "is this ARM", others "is this ARM v7", others might care about the distinction between "ARMv7f" and "ARMv7s". It'd be nice to be able to write something like "if(inList(a,{ARMv7,ARMv7f,ARMv7k,ARMv7s}))" but I suspect that kind of C++11 stuff probably isn't suitable.<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><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Cheers,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Dave<o:p></o:p></span></p><p class=MsoNormal><br>enum CPUArch {<br>    ...<br>    ARM_Begin,<br>    ARM_Arch0 = ARM_Begin,<br>    ARM_Arch1,<br>    ....<br>    ARM_End,<br>    NonArm = ARM_End,<br>    ....<br>};<br><br>bool isARM(CPUArch a) { return a >= ARM_Begin and a < ARM_End; }<br><br>Cheap, efficient, relatively easy to keep up-to-date.<br><br>-- Matthieu<br><br> <o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><p class=MsoNormal>Anyway, if this goes in we'll probably need to keep patching up both the enum and the string-mapping as new use cases are discovered.<br><br>Cheers,<br>Dave<br><br>-----Original Message-----<br>From: <a href="mailto:cfe-commits-bounces@cs.uiuc.edu">cfe-commits-bounces@cs.uiuc.edu</a> [mailto:<a href="mailto:cfe-commits-bounces@cs.uiuc.edu">cfe-commits-bounces@cs.uiuc.edu</a>] On Behalf Of Rafael Espíndola<br>Sent: 30 October 2012 03:58<br>To: llvm cfe<br>Subject: [cfe-commits] [patch] Add a llvm::Triple::CPUArch enum<br><br>There is a lot of char* being passed around in the clang driver. At<br>least part of that seems to be because we have an enum<br>(llvm::Triple::ArchType) that can distinguish  an ARM from an X86, but<br>we don't have an enum that can distinguish a ARMv6 form an ARMv7 for<br>example.<br><br>The attached patches add the enum llvm::Triple::CPUArch and use that<br>to replace a long if chain in clang. I think it can be used in more<br>places, but this should be sufficient to illustrate the idea.<o:p></o:p></p><div><div><p class=MsoNormal><br>Cheers,<br>Rafael<br><br><br><br><br>_______________________________________________<br>cfe-commits mailing list<br><a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><o:p></o:p></p></div></div></blockquote></div><p class=MsoNormal><o:p> </o:p></p></div></body></html>