C++ LLVM传递到计数向量类型指令
我正在尝试编写一个LLVM过程来计算向量类型的指令。C++ LLVM传递到计数向量类型指令,c++,llvm,C++,Llvm,我正在尝试编写一个LLVM过程来计算向量类型的指令。 如需以下说明: %24 = or <2 x i64> %21, %23 %25 = bitcast <16 x i8> %12 to <8 x i16> %26 = shl <8 x i16> %25, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> %27 = bitcast <8 x i16&
如需以下说明:
%24 = or <2 x i64> %21, %23
%25 = bitcast <16 x i8> %12 to <8 x i16>
%26 = shl <8 x i16> %25, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
%27 = bitcast <8 x i16> %26 to <2 x i64>
%24=或%21,%23
%25=比特广播%12到
%26=shl%25,
%27=比特广播%26到
我写了这段代码:
for (auto &F : M) {
for (auto &B : F) {
for (auto &I : B) {
if (auto* VI = dyn_cast<InsertElementInst>(&I)) {
Value* op = VI->getOperand(0);
if (op->getType()->isVectorTy()){
++vcount;
}
}
for(auto&F:M){
对于(自动和B:F){
用于(自动和仪表板:B){
if(自动*VI=dyn_铸造(&I)){
值*op=VI->GetOperator(0);
if(op->getType()->isvectory()){
++vcount;
}
}
但是由于某种原因,如果(auto*VI=dyn_cast(&I))
永远不能满足要求。
知道为什么吗
提前感谢。
InsertElementInst
是一条特定的指令(将元素插入向量中),而您的指令列表中没有任何指令
您可能希望定期使用I
中的dyn\u cast
[我个人会使用一个函数或模块传递类作为基础,因此您只需要实现代码的内部循环,但这更像是“您应该如何做”,而不是为了让它工作而必须做的事情]。
InsertElementInst
是一条特定的指令(在向量中插入一个元素)-而在指令列表中没有
您可能希望定期使用I
中的dyn\u cast
[我个人会使用一个函数或模块传递类作为基础,因此您只需要实现代码的内部循环,但这更多的是“这是您应该如何做的事情”,而不是您必须要做的事情才能使其工作]。在LLVM中,指令与结果相同。举个例子
%25 = bitcast <16 x i8> %12 to <8 x i16>
%25=比特广播%12到
当您将指令I转换为值时,您将获得%25
Value* psVal = cast<Value>(&I);
Value*psVal=cast&I;
然后可以通过getType()->isvectory()检查它是否为向量类型
另外,我建议您查看llvm值的继承关系图以获得更多说明
这里在LLVM中,指令与其结果相同
%25 = bitcast <16 x i8> %12 to <8 x i16>
%25=比特广播%12到
当您将指令I转换为值时,您将获得%25
Value* psVal = cast<Value>(&I);
Value*psVal=cast&I;
然后可以通过getType()->isvectory()检查它是否为向量类型
另外,我建议您查看llvm值的继承关系图以获得更多说明
这里你根本不需要
dyn\u cast
,因为I
已经是指令&
了。@Ismail:修改得太好了。谢谢你的回答。但是我不明白我怎么用这个指令来计算返回向量类型的指令。你根本不需要dyn\u cast
,因为指令了&
这里。@Ismail:修改得太好了。谢谢你的回答。但是我不明白我怎么用这个指令来计算返回向量类型的指令。是的。这正是我想要的。谢谢。是的。这正是我想要的。谢谢。