diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2009-01-25 07:59:57 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2009-01-25 07:59:57 +0000 |
commit | 9d4979123e5cf264fe21888b711d5bd141413fbd (patch) | |
tree | 7062f023229bad2338b5796703bf94286af88c64 | |
parent | 1902a129a5b9fc9ac1ecbaf76d2ff7a1bf04691a (diff) |
The function that does nothing but call malloc is noalias return.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62956 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/IPO/IndMemRemoval.cpp | 11 | ||||
-rw-r--r-- | test/Transforms/IndMemRem/2009-01-24-Noalias.ll | 11 |
2 files changed, 17 insertions, 5 deletions
diff --git a/lib/Transforms/IPO/IndMemRemoval.cpp b/lib/Transforms/IPO/IndMemRemoval.cpp index b251ab4b09..6b1f969e44 100644 --- a/lib/Transforms/IPO/IndMemRemoval.cpp +++ b/lib/Transforms/IPO/IndMemRemoval.cpp @@ -44,11 +44,11 @@ static RegisterPass<IndMemRemPass> X("indmemrem","Indirect Malloc and Free Removal"); bool IndMemRemPass::runOnModule(Module &M) { - //in Theory, all direct calls of malloc and free should be promoted - //to intrinsics. Therefor, this goes through and finds where the - //address of free or malloc are taken and replaces those with bounce - //functions, ensuring that all malloc and free that might happen - //happen through intrinsics. + // In theory, all direct calls of malloc and free should be promoted + // to intrinsics. Therefore, this goes through and finds where the + // address of free or malloc are taken and replaces those with bounce + // functions, ensuring that all malloc and free that might happen + // happen through intrinsics. bool changed = false; if (Function* F = M.getFunction("free")) { if (F->isDeclaration() && F->arg_size() == 1 && !F->use_empty()) { @@ -69,6 +69,7 @@ bool IndMemRemPass::runOnModule(Module &M) { Function* FN = Function::Create(F->getFunctionType(), GlobalValue::LinkOnceLinkage, "malloc_llvm_bounce", &M); + FN->setDoesNotAlias(0); BasicBlock* bb = BasicBlock::Create("entry",FN); Instruction* c = CastInst::CreateIntegerCast( FN->arg_begin(), Type::Int32Ty, false, "c", bb); diff --git a/test/Transforms/IndMemRem/2009-01-24-Noalias.ll b/test/Transforms/IndMemRem/2009-01-24-Noalias.ll new file mode 100644 index 0000000000..bc3d0bfe5e --- /dev/null +++ b/test/Transforms/IndMemRem/2009-01-24-Noalias.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | opt -indmemrem | llvm-dis | grep bounce | grep noalias + +declare i8* @malloc(i32) + +@g = external global i8* + +define void @test() { + %A = bitcast i8* (i32) * @malloc to i8* + store i8* %A, i8** @g + ret void +} |