From d2a988caad393ce88adfbadae8af6c87dabd2bf6 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Mon, 5 Feb 2007 23:51:43 +0000 Subject: [PATCH] Although targets are not required to support integers > 64bits, TargetData must in order for backends that do want to support large integer types to be able to function. Consequently, don't assert if the bitwidth > 64 bits when computing the size and alignment. Instead, compute the size by rounding up to the next even number of bytes for the size. Compute the alignment as the same as the LongABIAlignment. These provide reasonable defaults that the target can override. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33943 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/TargetData.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Target/TargetData.cpp b/lib/Target/TargetData.cpp index 559f4d04904..aa32530d4b5 100644 --- a/lib/Target/TargetData.cpp +++ b/lib/Target/TargetData.cpp @@ -295,8 +295,10 @@ static inline void getTypeInfoABI(const Type *Ty, const TargetData *TD, Size = 4; Alignment = TD->getIntABIAlignment(); } else if (BitWidth <= 64) { Size = 8; Alignment = TD->getLongABIAlignment(); - } else - assert(0 && "Integer types > 64 bits not supported."); + } else { + Size = ((BitWidth + 7) / 8) & ~1; + Alignment = TD->getLongABIAlignment(); + } return; } case Type::VoidTyID: Size = 1; Alignment = TD->getByteABIAlignment(); return;