diff options
author | Victor Hernandez <vhernandez@apple.com> | 2009-10-21 19:11:40 +0000 |
---|---|---|
committer | Victor Hernandez <vhernandez@apple.com> | 2009-10-21 19:11:40 +0000 |
commit | 68afa54033eccda0f55e920cb548588e71a45418 (patch) | |
tree | a8c1c6300819ecbde4ff9cdc64e7b72ae0f370a5 /lib/AsmParser | |
parent | b27b51aaa6602a2062ab0f778b87628fb70e0a0b (diff) | |
download | external_llvm-68afa54033eccda0f55e920cb548588e71a45418.zip external_llvm-68afa54033eccda0f55e920cb548588e71a45418.tar.gz external_llvm-68afa54033eccda0f55e920cb548588e71a45418.tar.bz2 |
Make changes to rev 84292 as requested by Chris Lattner.
Most changes are cleanup, but there is 1 correctness fix:
I fixed InstCombine so that the icmp is removed only if the malloc call is removed (which requires explicit removal because the Worklist won't DCE any calls since they can have side-effects).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84772 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser')
-rw-r--r-- | lib/AsmParser/LLParser.cpp | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index f1d5e4f..d21f987 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -69,7 +69,7 @@ bool LLParser::Run() { /// ValidateEndOfModule - Do final validity and sanity checks at the end of the /// module. bool LLParser::ValidateEndOfModule() { - // Update auto-upgraded malloc calls from "autoupgrade_malloc" to "malloc". + // Update auto-upgraded malloc calls to "malloc". // FIXME: Remove in LLVM 3.0. if (MallocF) { MallocF->setName("malloc"); @@ -77,15 +77,10 @@ bool LLParser::ValidateEndOfModule() { // declaration of "malloc". In that case, iterate over all calls to MallocF // and get them to call the declared "malloc" instead. if (MallocF->getName() != "malloc") { - Function* realMallocF = M->getFunction("malloc"); - for (User::use_iterator UI = MallocF->use_begin(), UE= MallocF->use_end(); - UI != UE; ) { - User* user = *UI; - UI++; - if (CallInst *Call = dyn_cast<CallInst>(user)) - Call->setCalledFunction(realMallocF); - } - if (!realMallocF->doesNotAlias(0)) realMallocF->setDoesNotAlias(0); + Constant* RealMallocF = M->getFunction("malloc"); + if (RealMallocF->getType() != MallocF->getType()) + RealMallocF = ConstantExpr::getBitCast(RealMallocF, MallocF->getType()); + MallocF->replaceAllUsesWith(RealMallocF); MallocF->eraseFromParent(); MallocF = NULL; } @@ -3482,21 +3477,21 @@ bool LLParser::ParseAlloc(Instruction *&Inst, PerFunctionState &PFS, if (Size && Size->getType() != Type::getInt32Ty(Context)) return Error(SizeLoc, "element count must be i32"); - if (isAlloca) + if (isAlloca) { Inst = new AllocaInst(Ty, Size, Alignment); - else { - // Autoupgrade old malloc instruction to malloc call. - const Type* IntPtrTy = Type::getInt32Ty(Context); - const Type* Int8PtrTy = PointerType::getUnqual(Type::getInt8Ty(Context)); - if (!MallocF) - // Prototype malloc as "void *autoupgrade_malloc(int32)". - MallocF = cast<Function>(M->getOrInsertFunction("autoupgrade_malloc", - Int8PtrTy, IntPtrTy, NULL)); - // "autoupgrade_malloc" updated to "malloc" in ValidateEndOfModule(). - - Inst = cast<Instruction>(CallInst::CreateMalloc(BB, IntPtrTy, Ty, - Size, MallocF)); + return false; } + + // Autoupgrade old malloc instruction to malloc call. + // FIXME: Remove in LLVM 3.0. + const Type *IntPtrTy = Type::getInt32Ty(Context); + const Type *Int8PtrTy = Type::getInt8PtrTy(Context); + if (!MallocF) + // Prototype malloc as "void *(int32)". + // This function is renamed as "malloc" in ValidateEndOfModule(). + MallocF = cast<Function>(M->getOrInsertFunction(NULL, Int8PtrTy, + IntPtrTy, NULL)); + Inst = CallInst::CreateMalloc(BB, IntPtrTy, Ty, Size, MallocF); return false; } |