我有一个llvm :: Value。 Value :: dump()打印
void (...)* bitcast (void ()* @test_impl to void (...)*)
通常我会假设这是一个BitCastOperator,但是,这个类似乎不存在于llvm 3.4.2中(我正在使用它,因为我正在使用的工具之一还没有移植到更新的版)。
这是哪个Value的子类?而且,我将来如何回答这些问题呢?我试过了:
答案 0 :(得分:1)
void (...)* bitcast (void ()* @test_impl to void (...)*)
这是Value的哪个子类?
这是一个constant expression,特别是一个bitcast常量表达式,由ConstantExpr类表示。您可以使用ConstantExpr::getOpcode
或使用ConstantExpr::getOpcodeName
的字符串表示来获取操作码。
bitcast(CST to TYPE)
将常量CST转换为另一个TYPE。操作数的约束与bitcast指令的约束相同。
通常,当你看到一些操作码应用于常量操作数时(例如bitcast (void ()* %1 to void(...)*)
;而glovals vars是常量),你应该首先考虑常量表达式。当constexpr对应物存在时,我真的不认为有一种简单的方法可以使用常量操作数构建真正的IR指令。
而且,我将来如何回答这些问题?
您可以像使用llvm::isa
和llvm::dynamic_cast
一样使用llc -march=cpp
和float
。在调试过程中,我发现Value::getValueID非常有用。
row
失败并出现模糊错误
附注:CPPBackend暂时没有更新,最近已removed。我并不感到惊讶它不起作用。