From cfd0ebea276521a48370c197e651064b032a381e Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Wed, 6 May 2009 08:42:00 +0000 Subject: [PATCH] Fix PR3754: don't mark functions that wrap MallocInst with the readnone. Since MallocInst is scheduled for deletion it doesn't seem worth doing anything more subtle, such as having mayWriteToMemory return true for MallocInst. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71077 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/FunctionAttrs.cpp | 5 +++++ test/Transforms/FunctionAttrs/2009-05-06-Malloc.ll | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 test/Transforms/FunctionAttrs/2009-05-06-Malloc.ll diff --git a/lib/Transforms/IPO/FunctionAttrs.cpp b/lib/Transforms/IPO/FunctionAttrs.cpp index 65faef32e5e..e8315247b23 100644 --- a/lib/Transforms/IPO/FunctionAttrs.cpp +++ b/lib/Transforms/IPO/FunctionAttrs.cpp @@ -152,6 +152,11 @@ bool FunctionAttrs::AddReadAttrs(const std::vector &SCC) { if (I->mayWriteToMemory()) // Writes memory. Just give up. return false; + + if (isa(I)) + // MallocInst claims not to write memory! PR3754. + return false; + // If this instruction may read memory, remember that. ReadsMemory |= I->mayReadFromMemory(); } diff --git a/test/Transforms/FunctionAttrs/2009-05-06-Malloc.ll b/test/Transforms/FunctionAttrs/2009-05-06-Malloc.ll new file mode 100644 index 00000000000..4022033c3b0 --- /dev/null +++ b/test/Transforms/FunctionAttrs/2009-05-06-Malloc.ll @@ -0,0 +1,7 @@ +; RUN: llvm-as < %s | opt -functionattrs | llvm-dis | not grep read +; PR3754 + +define i8* @m(i32 %size) { + %tmp = malloc i8, i32 %size ; [#uses=1] + ret i8* %tmp +}