我想写一个包含这样的东西的llvm传递:
for (auto& B : F) {
for (auto& I : B) {
if (auto* vc = dyn_cast<T>(&I)) {
.
.
}
我需要用什么来代替T来投射矢量? 提前谢谢。
答案 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
又是Instruction
或Constant
。 LLVM是一种静态单一赋值语言,不代表常见变量,如C / C ++。