4

我想知道哪些所有 llvm IR 语句对应于 clang 中特定 pragma 中的代码。我的编译指示具有以下结构。

#pragma markme
{
   stmt1;
   stmt2;
}

我需要知道标记 me pragma 的左大括号和右大括号之间存在哪些所有 stmts。

我们可以将一些元数据附加到这些 stmts 吗?如果是的话,任何人都可以指出我的一些参考。

我在谷歌上搜索并找到了这个

添加一个 pragma 处理程序,它在操作接口上有一个回调。添加回调的 sema 实现,它在 Sema 对象中设置一些内部位。在“for”语句中添加一个新位,以指定它是否具有#pragma 优化集。修改 codegin 以根据该位发出元数据。

任何人都可以提供更多详细信息。

我正在使用最新的 llvm (llvm 3.4)

注意:对任何方向的任何帮助表示赞赏。我知道 llvm 可能会进行优化以移动语句。但这对我来说很好

4

1 回答 1

7

请注意,这必须在 Clang 中完成,它知道#pragma. LLVM 本身对它们一无所知 -#pragma不是 LLVM IR 的一部分。

lib/CodeGen在 Clang 的目录中有很多生成元数据的示例。这完全取决于您希望此元数据出现在哪里 - 根据说明?关于功能?

要将元数据附加到说明中,请查找setMetadata. 例如,在 中lib/CodeGen/CGExpr.cpp,一些分析元数据附加到分支。要放置模块级元数据,请参阅lib/CodeGen/CodeGenModule.cpp

于 2013-07-24T13:09:14.397 回答