如何在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