[llvm-dev] [Help] Add custom pragma (original) (raw)

Vedant Kumar via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 25 16:00:10 PDT 2016


That file is generated by the clang-tblgen tool:

COMMAND = cd /Users/vk/Desktop/llvm/DA-NoModules/tools/clang/include/clang/Sema && /Users/vk/Desktop/llvm/DA-NoModules/bin/clang-tblgen -gen-clang-attr-parsed-attr-list -I /Users/vk/Desktop/llvm/tools/clang/include/clang/Sema/../../ -I /Users/vk/Desktop/llvm/tools/clang/include/clang/Sema -I /Users/vk/Desktop/llvm/lib/Target -I /Users/vk/Desktop/llvm/include /Users/vk/Desktop/llvm/tools/clang/include/clang/Sema/../Basic/Attr.td -o /Users/vk/Desktop/llvm/DA-NoModules/tools/clang/include/clang/Sema/AttrParsedAttrList.inc.tmp

Try looking include/clang/Basic/Attr.td?

best, vedant

On Oct 25, 2016, at 2:54 PM, Sunghyun Park via llvm-dev <llvm-dev at lists.llvm.org> wrote:

Hi, all. I want to give programmer ability to tell LLVM that certain region of code is expected to get specialized optimization. So, I'm trying to make custom pragma to mark certain region of code and pass this information to LLVM, in the similar way that '#pragma clang loop unrollcount(N)' works. By tracking the framework of loop unroll pragma, I found out it works in the way below. (1) Detect pragma at lexer, parser. (2) Create AttributeList and push it into AST. (3) Once AST is built, consume AST and generate LLVM IR at CodeGeneration (4) If attribute for loop unroll is found, put tag on LLVM IR with Meta data which indicates whether to unroll loop. Now I can detect my own pragma and figured it out how to create and tag custom metadata. The problem is that creating custom AttributeList is somewhat hard to follow. As far as I know, the attribute for loop unroll pragma gets serviced at ProcessSmtAttrbute Function @ tools/clang/lib/Sema/SemaStmtAttr.cpp. It contains switch statement like below. ProcessSmtAttrbute @ tools/clang/lib/Sema/SemaStmtAttr.cpp // A : AttributeList - passed by argument switch( A.getKind() ) { case AttributeList::UnknownAttribute: ~ case AttributeList::ATFallThrough: return ~ case AttributeList::ATLoopHint: return handleLoopHintAttr( ~ ) case AttributeList::ATOpenCLUnrollHint: ~ ... } As I want to define new attribute, I've tried to find where the definitions for ATLoopHint, ATFallThrough are done. This is what I found. class AttributeList @ tools/clang/include/clang/Sema/AttributeList.h enum Kind{ #define PARSED ATTR(NAME) AT##NAME, #include "clang/Sema/AttrParsedAttrList.inc" #undef PARSEDATTR IgnoredAttribute, UnkownAttribute }; It looks like those are defined at this enum, but there's no such file, "clang/Sema/AttrParsedAttrList.inc". Anyone knows how those definitions are defined and how the kind of attributes are decided? Thank you for your valuable time! -- Best, Sung


LLVM Developers mailing list llvm-dev at lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



More information about the llvm-dev mailing list