On Sep 22, 2009, at 4:49 PM, Talin wrote:> > // Calculate the size of the specified LLVM type. > Constant * DebugInfoBuilder::getSize(const Type * type) { > Constant * one = ConstantInt::get(Type::Int32Ty, 1); > return ConstantExpr::getPtrToInt( > ConstantExpr::getGetElementPtr( > ConstantPointerNull::get(PointerType::getUnqual(type)), > &one, 1), Type::Int32Ty); > } > > Constant * DebugInfoBuilder::getAlignment(const Type * type) { > // Calculates the alignment of T using "sizeof({i8, T}) - sizeof > (T)" > return ConstantExpr::getSub( > getSize(StructType::get(Type::Int8Ty, type, NULL)), > getSize(type)); > }Are ConstantExpr::getAlignOf, getSizeOf, and getOffsetOf what you're looking for? Dan
On Wed, Sep 23, 2009 at 1:51 PM, Dan Gohman <gohman at apple.com> wrote:> > On Sep 22, 2009, at 4:49 PM, Talin wrote: > >> >> // Calculate the size of the specified LLVM type. >> Constant * DebugInfoBuilder::getSize(const Type * type) { >> Constant * one = ConstantInt::get(Type::Int32Ty, 1); >> return ConstantExpr::getPtrToInt( >> ConstantExpr::getGetElementPtr( >> ConstantPointerNull::get(PointerType::getUnqual(type)), >> &one, 1), Type::Int32Ty); >> } >> >> Constant * DebugInfoBuilder::getAlignment(const Type * type) { >> // Calculates the alignment of T using "sizeof({i8, T}) - sizeof(T)" >> return ConstantExpr::getSub( >> getSize(StructType::get(Type::Int8Ty, type, NULL)), >> getSize(type)); >> } >> > > Are ConstantExpr::getAlignOf, getSizeOf, and getOffsetOf what > you're looking for? > > That will work. Now all I need is for the methods of DIFactory to take aConstant* instead of uint64. -- -- Talin -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090923/ac51bec2/attachment.html>
On Wed, Sep 23, 2009 at 2:27 PM, Talin <viridia at gmail.com> wrote:> On Wed, Sep 23, 2009 at 1:51 PM, Dan Gohman <gohman at apple.com> wrote: >> >> On Sep 22, 2009, at 4:49 PM, Talin wrote: >>> >>> // Calculate the size of the specified LLVM type. >>> Constant * DebugInfoBuilder::getSize(const Type * type) { >>> Constant * one = ConstantInt::get(Type::Int32Ty, 1); >>> return ConstantExpr::getPtrToInt( >>> ConstantExpr::getGetElementPtr( >>> ConstantPointerNull::get(PointerType::getUnqual(type)), >>> &one, 1), Type::Int32Ty); >>> } >>> >>> Constant * DebugInfoBuilder::getAlignment(const Type * type) { >>> // Calculates the alignment of T using "sizeof({i8, T}) - sizeof(T)" >>> return ConstantExpr::getSub( >>> getSize(StructType::get(Type::Int8Ty, type, NULL)), >>> getSize(type)); >>> } >> >> Are ConstantExpr::getAlignOf, getSizeOf, and getOffsetOf what >> you're looking for? >> > That will work. Now all I need is for the methods of DIFactory to take a > Constant* instead of uint64.ok. Feel free to add /// CreateBasicType - Create a basic type like int, float, etc. DIBasicType CreateBasicType(DIDescriptor Context, const std::string &Name, DICompileUnit CompileUnit, unsigned LineNumber, uint64_t SizeInBits, uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, unsigned Encoding); variants that take Constant*, for example, /// CreateBasicType - Create a basic type like int, float, etc. DIBasicType CreateBasicType(DIDescriptor Context, const std::string &Name, DICompileUnit CompileUnit, unsigned LineNumber, Constant *SizeInBits, Constant *AlignInBits, Constant *OffsetInBits, unsigned Flags, unsigned Encoding); and so on. - Devang