首页 > 解决方案 > 获取 LLVM 类型/“取消引用”类型的大小

问题描述

这个问题与这个问题非常相似,但我不确定如何在以下情况下获得大小:

我有一个指针类型,例如i32*.

现在我想获得“指向”类型的大小,所以i32(又名 4)。

现在我正在使用以下代码,这似乎有效,但我不确定它是否真的正确:

Value *get_size(Type *t, IRBuilder<>& irb)
{
    Value *sizePtr = irb.CreateGEP(t->getContainedType(0),
            irb.CreateIntToPtr(ConstantInt::get(irb.getInt8Ty(), 0), t),
            ConstantInt::get(irb.getInt8Ty(), 1));

    return irb.CreatePtrToInt(sizePtr, irb.getInt64Ty());
}

(注意:t传递给函数的类型总是指针类型)

标签: c++llvmllvm-irllvm-c++-apillvm-codegen

解决方案


推荐阅读