<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" id="owaParaStyle"></style><style type="text/css"></style><style type="text/css"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Hi Dani,
<div><br>
</div>
<div>I've just added some builtins for my target and this is what I needed to do:</div>
<div>
<div>LLVM was modified by:</div>
<div>- Created an Intrinsics*.td in include/llvm/ and defined the intrinsic to extend GCCBuiltin. This file was included at the bottom of Intrinsics.td in the same directory.</div>
<div>- The instruction was defined in the lib/Target/*InstrInfo.td file which used the intrinsic as it's pattern.</div>
<div><br>
</div>
<div>Clang was modified by:</div>
<div>- Created a Builtins*.def for the target in clang/include/clang/Basic.</div>
<div>- Modified include/clang/Basic/TargetBuiltins.h to include the target by copying the other targets but referencing the newly created .def file.</div>
<div>- Modified the TargetInfo class to contain BuiltinInfo in clang/lib/Basic/Targets.cpp.</div>
<div>- Add a function in clang/lib/CodeGen/CGBuiltin.cpp to the handle the builtin and a case in EmitTargetBuiltinExpr to call that function.</div>
<div><br>
</div>
<div>If you just follow the examples of the existing targets, its quite simple. Hope that helps.</div>
<div><br>
</div>
<div>Regards,</div>
<div>Sam</div>
<div><br>
</div>
<div>Research Student</div>
<div>Electronic Systems Design Group</div>
<div>Loughborough University</div>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div id="divRpF987428" style="direction: ltr; "><font face="Tahoma" size="2" color="#000000"><b>From:</b> cfe-dev-bounces@cs.uiuc.edu [cfe-dev-bounces@cs.uiuc.edu] on behalf of Daniel Kudrow [dkudrow@gmail.com]<br>
<b>Sent:</b> 24 October 2012 19:57<br>
<b>To:</b> cfe-dev@cs.uiuc.edu<br>
<b>Subject:</b> [cfe-dev] Adding custom builtins<br>
</font><br>
</div>
<div></div>
<div>Hi all,
<div>I'm hacking clang to parse a c-like quantum programming language and am having trouble parsing builtin functions. It seems to me that FunctionDecl::getBuiltinID() [Decl.cpp] is chiefly responsible for determining whether a function identifier is a builtin
 or not. However the guts of this function: IdentifierInfo::getBuiltinID() [IdentfierTable.h] but it appears to me that this function will only recognize objective c builtins. </div>
<div><br>
</div>
<div>
<div>  /// getBuiltinID - Return a value indicating whether this is a builtin</div>
<div>  /// function.  0 is not-built-in.  1 is builtin-for-some-nonprimary-target.</div>
<div>  /// 2+ are specific builtin functions.</div>
<div>  unsigned getBuiltinID() const {</div>
<div>    if (ObjCOrBuiltinID >= tok::NUM_OBJC_KEYWORDS)</div>
<div>      return ObjCOrBuiltinID - tok::NUM_OBJC_KEYWORDS;</div>
<div>    else</div>
<div>      return 0;</div>
<div>  }</div>
</div>
<div><br>
</div>
<div>Am I missing a step in the builtin lookup process?</div>
<div><br>
</div>
<div>Many thanks,</div>
<div>Dani</div>
</div>
</div>
</div>
</div>
</body>
</html>