如何处理LLVM metadata.h中的更改

时间:2015-04-25 00:15:31

标签: c++ metadata llvm llvm-ir

在LLVM版本3.6中,他们已经大量更改了元数据类,并且他们已经从值中拆分了元数据。 所以我之前基于3.5版本的代码不再适用了。我在升级代码时遇到了困难。任何人都可以提供帮助。

e.g。 :上一个代码:

MDNode *record;
Value *undVal = record->getOperand(1);
Type *type_hint = undVal->getType();

有谁知道如何升级此代码以使其兼容3.6?

我试过了:

MDNode *record;
const MDOperand &undVal = record->getOperand(1);
Type *type_hint = undVal->getType();

但它不起作用。导致编译错误说

  

'的getType' :不是< llvm :: Metadata'

的成员

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你有没有试过dyn_cast<>,就像这样:

Value* undval = dyn_cast<Value>(record->getoperand(1));
Type* type_hint;
if(undval) type_hint = undVal->hetType();

答案 1 :(得分:1)

MDNode *record;
Value *undVal = dyn_cast<ValueAsMetadata>(record->getOperand(1))->getValue();
@sadeq建议并没有为我编制,但绝对是朝着正确方向迈出的一步。