From: Duncan Sands Date: Mon, 5 Nov 2007 00:04:43 +0000 (+0000) Subject: Eliminate the remaining uses of getTypeSize. This X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=ca0ed744852a7d9625572fbb793f65e81225a3e8 Eliminate the remaining uses of getTypeSize. This should only effect x86 when using long double. Now 12/16 bytes are output for long double globals (the exact amount depends on the alignment). This brings globals in line with the rest of LLVM: the space reserved for an object is now always the ABI size. One tricky point is that only 10 bytes should be output for long double if it is a field in a packed struct, which is the reason for the additional argument to EmitGlobalConstant. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43688 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index 0ca7cfcbb8c..607aa70b0dd 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -286,8 +286,8 @@ namespace llvm { void EmitConstantValueOnly(const Constant *CV); /// EmitGlobalConstant - Print a general LLVM constant to the .s file. - /// - void EmitGlobalConstant(const Constant* CV); + /// If Packed is false, pad to the ABI size. + void EmitGlobalConstant(const Constant* CV, bool Packed = false); virtual void EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV); diff --git a/include/llvm/Target/TargetData.h b/include/llvm/Target/TargetData.h index cf6b5e7ef9f..3136a38ac0f 100644 --- a/include/llvm/Target/TargetData.h +++ b/include/llvm/Target/TargetData.h @@ -190,14 +190,6 @@ public: return 8*getABITypeSize(Ty); } - /// getTypeSize - Obsolete method, do not use. Replaced by getTypeStoreSize - /// and getABITypeSize. For alias analysis of loads and stores you probably - /// want getTypeStoreSize. Use getABITypeSize for GEP computations and alloca - /// sizing. - uint64_t getTypeSize(const Type *Ty) const { - return getTypeStoreSize(Ty); - } - /// getABITypeAlignment - Return the minimum ABI-required alignment for the /// specified type. unsigned char getABITypeAlignment(const Type *Ty) const; diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp index 47a53457fc9..eb9375cd13d 100644 --- a/lib/CodeGen/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter.cpp @@ -192,13 +192,13 @@ void AsmPrinter::EmitConstantPool(MachineConstantPool *MCP) { MachineConstantPoolEntry CPE = CP[i]; const Type *Ty = CPE.getType(); if (TAI->getFourByteConstantSection() && - TM.getTargetData()->getTypeSize(Ty) == 4) + TM.getTargetData()->getABITypeSize(Ty) == 4) FourByteCPs.push_back(std::make_pair(CPE, i)); else if (TAI->getEightByteConstantSection() && - TM.getTargetData()->getTypeSize(Ty) == 8) + TM.getTargetData()->getABITypeSize(Ty) == 8) EightByteCPs.push_back(std::make_pair(CPE, i)); else if (TAI->getSixteenByteConstantSection() && - TM.getTargetData()->getTypeSize(Ty) == 16) + TM.getTargetData()->getABITypeSize(Ty) == 16) SixteenByteCPs.push_back(std::make_pair(CPE, i)); else OtherCPs.push_back(std::make_pair(CPE, i)); @@ -229,7 +229,7 @@ void AsmPrinter::EmitConstantPool(unsigned Alignment, const char *Section, if (i != e-1) { const Type *Ty = CP[i].first.getType(); unsigned EntSize = - TM.getTargetData()->getTypeSize(Ty); + TM.getTargetData()->getABITypeSize(Ty); unsigned ValEnd = CP[i].first.getOffset() + EntSize; // Emit inter-object padding for alignment. EmitZeros(CP[i+1].first.getOffset()-ValEnd); @@ -750,7 +750,7 @@ void AsmPrinter::EmitConstantValueOnly(const Constant *CV) { // We can emit the pointer value into this slot if the slot is an // integer slot greater or equal to the size of the pointer. if (Ty->isInteger() && - TD->getTypeSize(Ty) >= TD->getTypeSize(Op->getType())) + TD->getABITypeSize(Ty) >= TD->getABITypeSize(Op->getType())) return EmitConstantValueOnly(Op); assert(0 && "FIXME: Don't yet support this kind of constant cast expr"); @@ -805,23 +805,21 @@ void AsmPrinter::EmitString(const ConstantArray *CVA) const { } /// EmitGlobalConstant - Print a general LLVM constant to the .s file. -/// -void AsmPrinter::EmitGlobalConstant(const Constant *CV) { +/// If Packed is false, pad to the ABI size. +void AsmPrinter::EmitGlobalConstant(const Constant *CV, bool Packed) { const TargetData *TD = TM.getTargetData(); + unsigned Size = Packed ? + TD->getTypeStoreSize(CV->getType()) : TD->getABITypeSize(CV->getType()); if (CV->isNullValue() || isa(CV)) { - EmitZeros(TD->getTypeSize(CV->getType())); + EmitZeros(Size); return; } else if (const ConstantArray *CVA = dyn_cast(CV)) { if (CVA->isString()) { EmitString(CVA); } else { // Not a string. Print the values in successive locations - for (unsigned i = 0, e = CVA->getNumOperands(); i != e; ++i) { - EmitGlobalConstant(CVA->getOperand(i)); - const Type* EltTy = CVA->getType()->getElementType(); - uint64_t padSize = TD->getABITypeSize(EltTy) - TD->getTypeSize(EltTy); - EmitZeros(padSize); - } + for (unsigned i = 0, e = CVA->getNumOperands(); i != e; ++i) + EmitGlobalConstant(CVA->getOperand(i), false); } return; } else if (const ConstantStruct *CVS = dyn_cast(CV)) { @@ -832,14 +830,14 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV) { const Constant* field = CVS->getOperand(i); // Check if padding is needed and insert one or more 0s. - uint64_t fieldSize = TD->getTypeSize(field->getType()); + uint64_t fieldSize = TD->getTypeStoreSize(field->getType()); uint64_t padSize = ((i == e-1? cvsLayout->getSizeInBytes() : cvsLayout->getElementOffset(i+1)) - cvsLayout->getElementOffset(i)) - fieldSize; sizeSoFar += fieldSize + padSize; // Now print the actual field value - EmitGlobalConstant(field); + EmitGlobalConstant(field, CVS->getType()->isPacked()); // Insert the field padding unless it's zero bytes... EmitZeros(padSize); @@ -916,6 +914,7 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV) { << "\t" << TAI->getCommentString() << " long double most significant halfword\n"; } + EmitZeros(Size - TD->getTypeStoreSize(Type::X86_FP80Ty)); return; } else if (CFP->getType() == Type::PPC_FP128Ty) { // all long double variants are printed as hex @@ -978,7 +977,7 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV) { const VectorType *PTy = CP->getType(); for (unsigned I = 0, E = PTy->getNumElements(); I < E; ++I) - EmitGlobalConstant(CP->getOperand(I)); + EmitGlobalConstant(CP->getOperand(I), false); return; } diff --git a/lib/CodeGen/ELFWriter.cpp b/lib/CodeGen/ELFWriter.cpp index 8ecddb877f4..efdf029c4a3 100644 --- a/lib/CodeGen/ELFWriter.cpp +++ b/lib/CodeGen/ELFWriter.cpp @@ -258,7 +258,7 @@ void ELFWriter::EmitGlobal(GlobalVariable *GV) { const Type *GVType = (const Type*)GV->getType(); unsigned Align = TM.getTargetData()->getPrefTypeAlignment(GVType); - unsigned Size = TM.getTargetData()->getTypeSize(GVType); + unsigned Size = TM.getTargetData()->getABITypeSize(GVType); // If this global has a zero initializer, it is part of the .bss or common // section. diff --git a/lib/CodeGen/MachOWriter.cpp b/lib/CodeGen/MachOWriter.cpp index 0c743759da6..9389088f207 100644 --- a/lib/CodeGen/MachOWriter.cpp +++ b/lib/CodeGen/MachOWriter.cpp @@ -259,7 +259,7 @@ void MachOCodeEmitter::emitConstantPool(MachineConstantPool *MCP) { // "giant object for PIC" optimization. for (unsigned i = 0, e = CP.size(); i != e; ++i) { const Type *Ty = CP[i].getType(); - unsigned Size = TM.getTargetData()->getTypeSize(Ty); + unsigned Size = TM.getTargetData()->getABITypeSize(Ty); MachOWriter::MachOSection *Sec = MOW.getConstSection(CP[i].Val.ConstVal); OutputBuffer SecDataOut(Sec->SectionData, is64Bit, isLittleEndian); @@ -333,7 +333,7 @@ MachOWriter::~MachOWriter() { void MachOWriter::AddSymbolToSection(MachOSection *Sec, GlobalVariable *GV) { const Type *Ty = GV->getType()->getElementType(); - unsigned Size = TM.getTargetData()->getTypeSize(Ty); + unsigned Size = TM.getTargetData()->getABITypeSize(Ty); unsigned Align = GV->getAlignment(); if (Align == 0) Align = TM.getTargetData()->getPrefTypeAlignment(Ty); @@ -380,7 +380,7 @@ void MachOWriter::AddSymbolToSection(MachOSection *Sec, GlobalVariable *GV) { void MachOWriter::EmitGlobal(GlobalVariable *GV) { const Type *Ty = GV->getType()->getElementType(); - unsigned Size = TM.getTargetData()->getTypeSize(Ty); + unsigned Size = TM.getTargetData()->getABITypeSize(Ty); bool NoInit = !GV->hasInitializer(); // If this global has a zero initializer, it is part of the .bss or common @@ -803,7 +803,8 @@ void MachOWriter::InitMem(const Constant *C, void *Addr, intptr_t Offset, if (isa(PC)) { continue; } else if (const ConstantVector *CP = dyn_cast(PC)) { - unsigned ElementSize = TD->getTypeSize(CP->getType()->getElementType()); + unsigned ElementSize = + TD->getABITypeSize(CP->getType()->getElementType()); for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i) WorkList.push_back(CPair(CP->getOperand(i), PA+i*ElementSize)); } else if (const ConstantExpr *CE = dyn_cast(PC)) { @@ -904,9 +905,10 @@ void MachOWriter::InitMem(const Constant *C, void *Addr, intptr_t Offset, abort(); } } else if (isa(PC)) { - memset((void*)PA, 0, (size_t)TD->getTypeSize(PC->getType())); + memset((void*)PA, 0, (size_t)TD->getABITypeSize(PC->getType())); } else if (const ConstantArray *CPA = dyn_cast(PC)) { - unsigned ElementSize = TD->getTypeSize(CPA->getType()->getElementType()); + unsigned ElementSize = + TD->getABITypeSize(CPA->getType()->getElementType()); for (unsigned i = 0, e = CPA->getNumOperands(); i != e; ++i) WorkList.push_back(CPair(CPA->getOperand(i), PA+i*ElementSize)); } else if (const ConstantStruct *CPS = dyn_cast(PC)) { diff --git a/lib/CodeGen/MachOWriter.h b/lib/CodeGen/MachOWriter.h index 6d888320cae..0492c9e93c5 100644 --- a/lib/CodeGen/MachOWriter.h +++ b/lib/CodeGen/MachOWriter.h @@ -466,7 +466,7 @@ namespace llvm { const Type *Ty = C->getType(); if (Ty->isPrimitiveType() || Ty->isInteger()) { - unsigned Size = TM.getTargetData()->getTypeSize(Ty); + unsigned Size = TM.getTargetData()->getABITypeSize(Ty); switch(Size) { default: break; // Fall through to __TEXT,__const case 4: diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp index ca7468476ad..c35674a49b1 100644 --- a/lib/CodeGen/MachineFunction.cpp +++ b/lib/CodeGen/MachineFunction.cpp @@ -435,7 +435,7 @@ unsigned MachineConstantPool::getConstantPoolIndex(Constant *C, unsigned Offset = 0; if (!Constants.empty()) { Offset = Constants.back().getOffset(); - Offset += TD->getTypeSize(Constants.back().getType()); + Offset += TD->getABITypeSize(Constants.back().getType()); Offset = (Offset+AlignMask)&~AlignMask; } @@ -459,7 +459,7 @@ unsigned MachineConstantPool::getConstantPoolIndex(MachineConstantPoolValue *V, unsigned Offset = 0; if (!Constants.empty()) { Offset = Constants.back().getOffset(); - Offset += TD->getTypeSize(Constants.back().getType()); + Offset += TD->getABITypeSize(Constants.back().getType()); Offset = (Offset+AlignMask)&~AlignMask; } diff --git a/lib/Target/ARM/ARMAsmPrinter.cpp b/lib/Target/ARM/ARMAsmPrinter.cpp index 9435cc1174f..924a2df82f6 100644 --- a/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/ARMAsmPrinter.cpp @@ -821,7 +821,7 @@ bool ARMAsmPrinter::doFinalization(Module &M) { std::string name = Mang->getValueName(I); Constant *C = I->getInitializer(); const Type *Type = C->getType(); - unsigned Size = TD->getTypeSize(Type); + unsigned Size = TD->getABITypeSize(Type); unsigned Align = TD->getPreferredAlignmentLog(I); const char *VisibilityDirective = NULL; diff --git a/lib/Target/ARM/ARMConstantIslandPass.cpp b/lib/Target/ARM/ARMConstantIslandPass.cpp index 1b936312c0a..5b4234c8a66 100644 --- a/lib/Target/ARM/ARMConstantIslandPass.cpp +++ b/lib/Target/ARM/ARMConstantIslandPass.cpp @@ -298,7 +298,7 @@ void ARMConstantIslands::DoInitialPlacement(MachineFunction &Fn, const TargetData &TD = *Fn.getTarget().getTargetData(); for (unsigned i = 0, e = CPs.size(); i != e; ++i) { - unsigned Size = TD.getTypeSize(CPs[i].getType()); + unsigned Size = TD.getABITypeSize(CPs[i].getType()); // Verify that all constant pool entries are a multiple of 4 bytes. If not, // we would have to pad them out or something so that instructions stay // aligned. diff --git a/lib/Target/Alpha/AlphaAsmPrinter.cpp b/lib/Target/Alpha/AlphaAsmPrinter.cpp index 412f28244cf..6735ff0261f 100644 --- a/lib/Target/Alpha/AlphaAsmPrinter.cpp +++ b/lib/Target/Alpha/AlphaAsmPrinter.cpp @@ -214,7 +214,7 @@ bool AlphaAsmPrinter::doFinalization(Module &M) { std::string name = Mang->getValueName(I); Constant *C = I->getInitializer(); - unsigned Size = TD->getTypeSize(C->getType()); + unsigned Size = TD->getABITypeSize(C->getType()); unsigned Align = TD->getPreferredAlignmentLog(I); //1: hidden? diff --git a/lib/Target/IA64/IA64AsmPrinter.cpp b/lib/Target/IA64/IA64AsmPrinter.cpp index 08a27d48ca2..cbc86ea3656 100644 --- a/lib/Target/IA64/IA64AsmPrinter.cpp +++ b/lib/Target/IA64/IA64AsmPrinter.cpp @@ -271,7 +271,7 @@ bool IA64AsmPrinter::doFinalization(Module &M) { O << "\n\n"; std::string name = Mang->getValueName(I); Constant *C = I->getInitializer(); - unsigned Size = TD->getTypeSize(C->getType()); + unsigned Size = TD->getABITypeSize(C->getType()); unsigned Align = TD->getPreferredTypeAlignmentShift(C->getType()); if (C->isNullValue() && @@ -279,11 +279,11 @@ bool IA64AsmPrinter::doFinalization(Module &M) { I->hasWeakLinkage() /* FIXME: Verify correct */)) { SwitchToDataSection(".data", I); if (I->hasInternalLinkage()) { - O << "\t.lcomm " << name << "#," << TD->getTypeSize(C->getType()) + O << "\t.lcomm " << name << "#," << TD->getABITypeSize(C->getType()) << "," << (1 << Align); O << "\n"; } else { - O << "\t.common " << name << "#," << TD->getTypeSize(C->getType()) + O << "\t.common " << name << "#," << TD->getABITypeSize(C->getType()) << "," << (1 << Align); O << "\n"; } diff --git a/lib/Target/MSIL/MSILWriter.cpp b/lib/Target/MSIL/MSILWriter.cpp index 5d6740bd1e8..b31658845f5 100644 --- a/lib/Target/MSIL/MSILWriter.cpp +++ b/lib/Target/MSIL/MSILWriter.cpp @@ -368,7 +368,7 @@ std::string MSILWriter::getTypePostfix(const Type* Ty, bool Expand, case Type::DoubleTyID: return "r8"; case Type::PointerTyID: - return "i"+utostr(TD->getTypeSize(Ty)); + return "i"+utostr(TD->getABITypeSize(Ty)); default: cerr << "TypeID = " << Ty->getTypeID() << '\n'; assert(0 && "Invalid type in TypeToPostfix()"); @@ -677,14 +677,14 @@ void MSILWriter::printGepInstruction(const Value* V, gep_type_iterator I, uint64_t FieldIndex = cast(IndexValue)->getZExtValue(); // Offset is the sum of all previous structure fields. for (uint64_t F = 0; FgetTypeSize(StrucTy->getContainedType((unsigned)F)); + Size += TD->getABITypeSize(StrucTy->getContainedType((unsigned)F)); printPtrLoad(Size); printSimpleInstruction("add"); continue; } else if (const SequentialType* SeqTy = dyn_cast(*I)) { - Size = TD->getTypeSize(SeqTy->getElementType()); + Size = TD->getABITypeSize(SeqTy->getElementType()); } else { - Size = TD->getTypeSize(*I); + Size = TD->getABITypeSize(*I); } // Add offset of current element to stack top. if (!isZeroValue(IndexValue)) { @@ -1008,7 +1008,7 @@ void MSILWriter::printVAArgInstruction(const VAArgInst* Inst) { void MSILWriter::printAllocaInstruction(const AllocaInst* Inst) { - uint64_t Size = TD->getTypeSize(Inst->getAllocatedType()); + uint64_t Size = TD->getABITypeSize(Inst->getAllocatedType()); // Constant optimization. if (const ConstantInt* CInt = dyn_cast(Inst->getOperand(0))) { printPtrLoad(CInt->getZExtValue()*Size); @@ -1426,7 +1426,7 @@ void MSILWriter::printDeclarations(const TypeSymbolTable& ST) { // Print not duplicated type if (Printed.insert(Ty).second) { Out << ".class value explicit ansi sealed '" << Name << "'"; - Out << " { .pack " << 1 << " .size " << TD->getTypeSize(Ty) << " }\n\n"; + Out << " { .pack " << 1 << " .size " << TD->getABITypeSize(Ty)<< " }\n\n"; } } } @@ -1454,7 +1454,7 @@ void MSILWriter::printStaticConstant(const Constant* C, uint64_t& Offset) { const Type* Ty = C->getType(); // Print zero initialized constant. if (isa(C) || C->isNullValue()) { - TySize = TD->getTypeSize(C->getType()); + TySize = TD->getABITypeSize(C->getType()); Offset += TySize; Out << "int8 (0) [" << TySize << "]"; return; @@ -1462,14 +1462,14 @@ void MSILWriter::printStaticConstant(const Constant* C, uint64_t& Offset) { // Print constant initializer switch (Ty->getTypeID()) { case Type::IntegerTyID: { - TySize = TD->getTypeSize(Ty); + TySize = TD->getABITypeSize(Ty); const ConstantInt* Int = cast(C); Out << getPrimitiveTypeName(Ty,true) << "(" << Int->getSExtValue() << ")"; break; } case Type::FloatTyID: case Type::DoubleTyID: { - TySize = TD->getTypeSize(Ty); + TySize = TD->getABITypeSize(Ty); const ConstantFP* FP = cast(C); if (Ty->getTypeID() == Type::FloatTyID) Out << "int32 (" << @@ -1488,7 +1488,7 @@ void MSILWriter::printStaticConstant(const Constant* C, uint64_t& Offset) { } break; case Type::PointerTyID: - TySize = TD->getTypeSize(C->getType()); + TySize = TD->getABITypeSize(C->getType()); // Initialize with global variable address if (const GlobalVariable *G = dyn_cast(C)) { std::string name = getValueName(G); diff --git a/lib/Target/Mips/MipsAsmPrinter.cpp b/lib/Target/Mips/MipsAsmPrinter.cpp index cd5c1a3d657..4ed3f64a728 100644 --- a/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/lib/Target/Mips/MipsAsmPrinter.cpp @@ -419,7 +419,7 @@ doFinalization(Module &M) O << "\n\n"; std::string name = Mang->getValueName(I); Constant *C = I->getInitializer(); - unsigned Size = TD->getTypeSize(C->getType()); + unsigned Size = TD->getABITypeSize(C->getType()); unsigned Align = TD->getPrefTypeAlignment(C->getType()); if (C->isNullValue() && (I->hasLinkOnceLinkage() || @@ -431,7 +431,7 @@ doFinalization(Module &M) O << "\t.local " << name << "\n"; O << "\t.comm " << name << "," - << TD->getTypeSize(C->getType()) + << TD->getABITypeSize(C->getType()) << "," << Align << "\n"; } else { diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp index 53412792180..da758877371 100644 --- a/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -657,7 +657,7 @@ bool LinuxAsmPrinter::doFinalization(Module &M) { O << Directive << name << "\n"; Constant *C = I->getInitializer(); - unsigned Size = TD->getTypeSize(C->getType()); + unsigned Size = TD->getABITypeSize(C->getType()); unsigned Align = TD->getPreferredAlignmentLog(I); if (C->isNullValue() && /* FIXME: Verify correct */ @@ -909,7 +909,7 @@ bool DarwinAsmPrinter::doFinalization(Module &M) { Constant *C = I->getInitializer(); const Type *Type = C->getType(); - unsigned Size = TD->getTypeSize(Type); + unsigned Size = TD->getABITypeSize(Type); unsigned Align = TD->getPreferredAlignmentLog(I); if (C->isNullValue() && /* FIXME: Verify correct */ diff --git a/lib/Target/Sparc/SparcAsmPrinter.cpp b/lib/Target/Sparc/SparcAsmPrinter.cpp index 98d59ee8cb9..bf47930e2ff 100644 --- a/lib/Target/Sparc/SparcAsmPrinter.cpp +++ b/lib/Target/Sparc/SparcAsmPrinter.cpp @@ -228,7 +228,7 @@ bool SparcAsmPrinter::doFinalization(Module &M) { O << "\n\n"; std::string name = Mang->getValueName(I); Constant *C = I->getInitializer(); - unsigned Size = TD->getTypeSize(C->getType()); + unsigned Size = TD->getABITypeSize(C->getType()); unsigned Align = TD->getPrefTypeAlignment(C->getType()); if (C->isNullValue() && @@ -238,7 +238,7 @@ bool SparcAsmPrinter::doFinalization(Module &M) { if (I->hasInternalLinkage()) O << "\t.local " << name << "\n"; - O << "\t.comm " << name << "," << TD->getTypeSize(C->getType()) + O << "\t.comm " << name << "," << TD->getABITypeSize(C->getType()) << "," << Align; O << "\n"; } else { diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp index 17bcaac90c3..078709bb7af 100644 --- a/lib/Target/X86/X86AsmPrinter.cpp +++ b/lib/Target/X86/X86AsmPrinter.cpp @@ -51,7 +51,7 @@ static X86MachineFunctionInfo calculateFunctionInfo(const Function *F, for (Function::const_arg_iterator AI = F->arg_begin(), AE = F->arg_end(); AI != AE; ++AI) // Size should be aligned to DWORD boundary - Size += ((TD->getTypeSize(AI->getType()) + 3)/4)*4; + Size += ((TD->getABITypeSize(AI->getType()) + 3)/4)*4; // We're not supporting tooooo huge arguments :) Info.setBytesToPopOnReturn((unsigned int)Size); @@ -156,7 +156,7 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) { std::string name = Mang->getValueName(I); Constant *C = I->getInitializer(); const Type *Type = C->getType(); - unsigned Size = TD->getTypeSize(Type); + unsigned Size = TD->getABITypeSize(Type); unsigned Align = TD->getPreferredAlignmentLog(I); if (I->hasHiddenVisibility()) {