[llvm-dev] How to generate IR code to dynamically compute object size ?
Stéphane Letz via llvm-dev
llvm-dev at lists.llvm.org
Thu Oct 1 03:01:09 PDT 2015
Hi,
We are using the following kind code to compile the size of a dynamically allocated object, flowing the recommendation described here :
http://nondot.org/sabre/LLVMNotes/SizeOf-OffsetOf-VariableSizedStructs.txt
Our code was :
Value* ptr_size = GetElementPtrInst::Create(ConstantPointerNull::get(dsp_type_ptr), genInt64(fModule, 1), "ptr_size", entry_func_llvm_create_dsp);
CastInst* size_inst = new PtrToIntInst(ptr_size, fBuilder->getInt64Ty(), "size", entry_func_llvm_create_dsp);
CallInst* call_inst1 = CallInst::Create(func_malloc, size_inst, "", entry_func_llvm_create_dsp);
With LLVM 3.7 the prototype of GetElementPtrInst::Create has changed, so we tried :
#if defined(LLVM_37)
ConstantPointerNull* null_ptr = ConstantPointerNull::get(dsp_type_ptr);
Value* ptr_size = GetElementPtrInst::Create(null_ptr->getType(), null_ptr, genInt64(fModule, 1), "ptr_size", entry_func_llvm_create_dsp);
#else
Value* ptr_size = GetElementPtrInst::Create(ConstantPointerNull::get(dsp_type_ptr), genInt64(fModule, 1), "ptr_size", entry_func_llvm_create_dsp);
#endif
CastInst* size_inst = new PtrToIntInst(ptr_size, fBuilder->getInt64Ty(), "size", entry_func_llvm_create_dsp);
CallInst* call_inst1 = CallInst::Create(func_malloc, size_inst, "", entry_func_llvm_create_dsp);
But we get the following error when running the code :
Assertion failed: (PointeeType == cast<PointerType>(Ptr->getType()->getScalarType())->getElementType()), function Create, file /opt/local/libexec/llvm-3.7/include/llvm/IR/Instructions.h, line 880.
Is there a cleaner and more official way to generate code to compute the size of a dynamically allocated object with LLVM 3.7?
Thanks.
Stéphane Letz
More information about the llvm-dev
mailing list