我想知道哪些llvm IR语句对应于clang中特定pragma中的代码。我的pragma有以下结构。
#pragma markme
{
stmt1;
stmt2;
}
我需要知道在标记me pragma的开口括号和闭合括号之间存在哪些所有stmts。
我们可以为这些stmts附加一些元数据吗?如果是,任何人都可以指点我一些参考。
我在Google上搜索过并发现了这个
添加一个pragma处理程序,它在actions界面上有一个回调。 添加回调的sema实现,它在Sema对象中设置一些内部位。 在'for'语句中添加一个新位,以指定它是否具有#pragma optimize set。 修改codegin以根据该位发出元数据。
任何人都可以提供更多细节。
我正在使用最新的llvm(llvm 3.4)
注意:任何方向的任何帮助表示赞赏。我知道llvm可能会进行优化以改变陈述。但这对我很好
答案 0 :(得分:7)
请注意,这必须在Clang中完成,它知道#pragma
。 LLVM本身对它们一无所知 - #pragma
不属于LLVM IR。
在Clang的lib/CodeGen
目录中有很多生成元数据的例子。这一切都取决于你希望这个元数据出现在哪里 - 在说明书上?关于功能?
要将元数据附加到指令,请查找setMetadata
。例如,在lib/CodeGen/CGExpr.cpp
中,某些分析元数据附加到分支。有关放置模块级元数据的信息,请参阅lib/CodeGen/CodeGenModule.cpp
。