clang添加了一个新的pragma

时间:2013-07-24 12:48:39

标签: clang llvm llvm-clang

我想知道哪些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可能会进行优化以改变陈述。但这对我很好

1 个答案:

答案 0 :(得分:7)

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

在Clang的lib/CodeGen目录中有很多生成元数据的例子。这一切都取决于你希望这个元数据出现在哪里 - 在说明书上?关于功能?

要将元数据附加到指令,请查找setMetadata。例如,在lib/CodeGen/CGExpr.cpp中,某些分析元数据附加到分支。有关放置模块级元数据的信息,请参阅lib/CodeGen/CodeGenModule.cpp