【发布时间】:2012-03-22 16:53:46
【问题描述】:
我正在尝试检测数组声明并为静态大小的数组构建符号值表。它将包含一个 name-arraySize 配对。我有几个问题:
给定一条指令,例如
%a = alloca [200 x i8], align 16
如何从中提取数组名称a?-
我正在尝试将
200提取为数组大小,但此代码:if(AllocaInst *allocInst = dyn_cast<AllocaInst>(&*I)){ PointerType *p = allocInst->getType(); if(p->getElementType()->isArrayTy()){ Value* v = allocInst->getOperand(0); errs() << *v ; } }当我打印
v时,我得到了i32 1。
有谁知道这是为什么?
我认为除了地址之外没有任何 32 位的内容。
【问题讨论】:
-
好的,所以我想出了如何获取大小: ArrayType *a = cast
(p->getElementType()); a->getNumElements() -
好吧...所以...我也想出了如何获取名称... allocInst->getName() 为什么只是在stackoverflow上发布可以帮助我更快地找到答案...: P
-
最好只发布包含此信息的答案,而不是 cmets。这样,问题将被正确标记为已回答。
-
Realn0wherman,我同意@Oak,请发布这些 cmets 作为答案并接受它们,因为人们通常在花时间阅读 cmets 之前向下滚动以寻找那张可爱的绿色支票。
-
多维数组呢。如果我取 arr[100][100],那么 a->getNumElements() 给出 100。如何获得总大小?。
标签: llvm