如何将值*转换为LLVM中的ConstantDataArray *?

时间:2013-04-20 20:05:23

标签: llvm

我扩展了LLVM Kaleidoscope示例以支持字符串。我添加了一个StringExprAST,它具有虚拟Codegen方法impl,如下所示:

Value *StringExprAST::Codegen() {
  StringRef r(Val);
  return ConstantDataArray::getString(getGlobalContext(), r, false);
}

我正在尝试连接字符串并使用其Codegen方法进行ConcatExprAST。在尝试访问ConstantDataArray中的数据时,我需要将Value *强制转换为ConstantDataArray *以便使用getAsString()方法。

我该怎么做?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Value的任何子类型转换为另一个子类型的正确方法是cast<>(),例如:

Value* v = ...
ConstantDataArray* result = cast<ConstantDataArray>(v);

但是,请记住,在您的示例中,您不返回类型为ConstantDataArray的对象,但返回的返回类型为ConstantDataArray::getString(),这不一定是{的实例{1}}本身,您只知道它是ConstantDataArray(例如,它可能是Constant,而不是ConstantAggregateZero

在任何情况下,如果您不确定ConstantDataArray确实属于特定类型,请先执行v(或使用the dyn_cast<>() idiom),然后再执行{isa<>() 1}}。