llvm传递的漂亮打印类型的值

时间:2015-07-02 08:48:53

标签: compiler-construction clang llvm

我正在尝试打印循环内使用的值的类型和名称,如下所示:

(value->getType())->print(COUT);
errs() << "     type: " << COUT.str() << " ";
errs() << "     name: " << (value->getName()) << "\n";

我得到以下输出:

type: i32*      name: sum
type: [25 x %struct.Book]*      name: books

是否可以按程序中使用的方式打印类型?例如,得到像:

这样的东西
type: int      name: sum
type: struct Book      name: books

2 个答案:

答案 0 :(得分:0)

你应该编写自己的功能。有关示例,请参阅原始函数TypePrinting::print

答案 1 :(得分:0)

不,它无法完成。 LLVM名称和源名称之间没有保证映射;可能没有与给定LLVM类型对应的源类型,或几个。

您甚至可以尝试详细了解特定前端如何将源类型转换为LLVM类型。即使这样,它也只是在该方案的限制范围内 - 例如,我的前端为类型和函数创建GUID名称。