c/c++语言开发共享计算数组的数量

如何在C程序中计算数组的总数?

LLVM IR中的数组声明对应于alloca类型的操作。 所以

int a[10]; 

对应于

 %a = alloca [10 x i32], align 4 

在LLVM IR中。

但我也注意到了

  int j = 0; 

也对应于alloca指令

  %j = alloca i32, align 4 

那么如何计算仅对应数组的alloca指令数?

编辑:

  for (Function::iterator i = F.begin(), e = F.end(); i != e; ++i) { for (BasicBlock::iterator ii =(*i).begin(), ii_e = (*i).end(); ii != ii_e; ++ii) { Instruction *n = dyn_cast(&*ii); for( int num = 0; num getNumOperands(); ++num) if(isa(n->getOperand(num)->getType())) { // doesn't work errs()<<"yayayayay Arrayn"; } } } 

    AllocaInst有公共方法isArrayAllocation() 。 您可以使用它来计算仅对应于数组的alloca指令数。

     for (Function::iterator BB = F.begin(), BE = F.end(); BB != BE; ++BB) for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); II != IE; ++II) if (AllocaInst *AI = dyn_cast(II)) if (AI->isArrayAllocation()) errs() << "Alloca of array is found!n"; 

    打开LLVM演示页面并编译以下代码

     int main(int argc, char **argv) { int a[10]; return 0; } 

    到LLVM C ++ API调用。

    这是如何创建的:

     AllocaInst* ptr_a = new AllocaInst(ArrayTy_6, "a", label_9); 

    其中ArrayTy_6是:

     ArrayType* ArrayTy_6 = ArrayType::get(IntegerType::get(mod->getContext(), 32), 10); 

    因此,要查明您正在查看的alloca指令是否正在定义数组,只需在它的第一个参数上执行isa()

    有关详细信息,请参阅LLVM文档 。

      以上就是c/c++开发分享计算数组的数量相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519293.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐