diff options
Diffstat (limited to 'llvm/lib/Analysis/TargetLibraryInfo.cpp')
| -rw-r--r-- | llvm/lib/Analysis/TargetLibraryInfo.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index e0482b2b1ce0..8557901192e4 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -1459,19 +1459,16 @@ unsigned TargetLibraryInfoImpl::getWCharSize(const Module &M) const { } unsigned TargetLibraryInfoImpl::getSizeTSize(const Module &M) const { - // There is really no guarantee that sizeof(size_t) is equal to sizeof(int*). - // If that isn't true then it should be possible to derive the SizeTTy from - // the target triple here instead and do an early return. - - // Historically LLVM assume that size_t has same size as intptr_t (hence - // deriving the size from sizeof(int*) in address space zero). This should - // work for most targets. For future consideration: DataLayout also implement - // getIndexSizeInBits which might map better to size_t compared to - // getPointerSizeInBits. Hard coding address space zero here might be - // unfortunate as well. Maybe getDefaultGlobalsAddressSpace() or - // getAllocaAddrSpace() is better. - unsigned AddressSpace = 0; - return M.getDataLayout().getPointerSizeInBits(AddressSpace); + // There is really no guarantee that sizeof(size_t) is equal to the index + // size of the default address space. If that isn't true then it should be + // possible to derive the SizeTTy from the target triple here instead and do + // an early return. + + // Hard coding address space zero may seem unfortunate, but a number of + // configurations of common targets (i386, x86-64 x32, aarch64 x32, possibly + // others) have larger-than-size_t index sizes on non-default address spaces, + // making this the best default. + return M.getDataLayout().getIndexSizeInBits(/*AddressSpace=*/0); } TargetLibraryInfoWrapperPass::TargetLibraryInfoWrapperPass() |
