From 78448868e56001cbdb78c930c55abf68f2167cd3 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Thu, 28 Nov 2013 13:53:05 -0800 Subject: fix alloca --- lib/Target/CppBackend/CPPBackend.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'lib/Target/CppBackend/CPPBackend.cpp') diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp index b4f84f4fd7..f990ebdc1e 100644 --- a/lib/Target/CppBackend/CPPBackend.cpp +++ b/lib/Target/CppBackend/CPPBackend.cpp @@ -1491,15 +1491,18 @@ std::string CppWriter::generateInstruction(const Instruction *I) { break; } case Instruction::Alloca: { - const AllocaInst* allocaI = cast(I); - Type *t = allocaI->getAllocatedType(); - unsigned size; - if (ArrayType *AT = dyn_cast(t)) { - size = AT->getElementType()->getScalarSizeInBits()/8 * AT->getNumElements(); + const AllocaInst* AI = cast(I); + Type *T = AI->getAllocatedType(); + assert(!isa(T)); + const Value *AS = AI->getArraySize(); + unsigned Size = T->getScalarSizeInBits()/8; + if (const ConstantInt *CI = dyn_cast(AS)) { + Size *= CI->getZExtValue(); } else { - size = t->getScalarSizeInBits()/8; + dumpIR(I); + assert(0); } - text = getAssign(iName, Type::getInt32Ty(I->getContext())) + "STACKTOP; STACKTOP = STACKTOP + " + Twine(memAlign(size)).str() + "|0;"; + text = getAssign(iName, Type::getInt32Ty(I->getContext())) + "STACKTOP; STACKTOP = STACKTOP + " + Twine(memAlign(Size)).str() + "|0;"; break; } case Instruction::Load: { -- cgit v1.2.3-70-g09d2