Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LLVM传递到计数向量类型指令_C++_Llvm - Fatal编程技术网

C++ 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&

我正在尝试编写一个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> %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
,因为e> 我已经是一个
指令了&
这里。@Ismail:修改得太好了。谢谢你的回答。但是我不明白我怎么用这个指令来计算返回向量类型的指令。是的。这正是我想要的。谢谢。是的。这正是我想要的。谢谢。