如何使用dyn_cast<>在LLVM中投射向量

时间:2016-03-07 20:38:57

标签: llvm

我想写一个包含这样的东西的llvm传递:

for (auto& B : F) {
  for (auto& I : B) {
    if (auto* vc = dyn_cast<T>(&I)) {
.
.
}

我需要用什么来代替T来投射矢量? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您不能以这种方式投射矢量类型。

您正在迭代说明,因此您可以dyn_cast指示。

您可以使用矢量类型转换为指令,例如InsertElementInst。你会写一些类似的东西:

for (auto& B : F) {
  for (auto& I : B) {
    if (auto VI = dyn_cast<InsertElementInst>(&I)) {
    }
  }
}

InsertElementInst你可以获得指令的操作数。在这种情况下,操作数0应该是一个值(即,应该插入元素的向量),它具有向量类型。

for (auto& B : F) {
  for (auto& I : B) {
    if (auto VI = dyn_cast<InsertElementInst>(&I)) {
        Value* op = VI->getOperand(0); 
        VectorType* t = cast<VectorType>(op->getType()); 
    }
  }
}

但请注意,op又是InstructionConstant。 LLVM是一种静态单一赋值语言,不代表常见变量,如C / C ++。