[PATCH] D60761: [FunctionAttrs] Remove readonly and writeonly assertion
Johannes Doerfert via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 15 10:32:00 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL366090: [FunctionAttrs] Remove readonly and writeonly assertion (authored by jdoerfert, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D60761?vs=209786&id=209902#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D60761/new/
https://reviews.llvm.org/D60761
Files:
llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp
llvm/trunk/test/Transforms/FunctionAttrs/read-write-scc.ll
Index: llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp
===================================================================
--- llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp
+++ llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp
@@ -261,12 +261,15 @@
}
}
+ // If the SCC contains both functions that read and functions that write, then
+ // we cannot add readonly attributes.
+ if (ReadsMemory && WritesMemory)
+ return false;
+
// Success! Functions in this SCC do not access memory, or only read memory.
// Give them the appropriate attribute.
bool MadeChange = false;
- assert(!(ReadsMemory && WritesMemory) &&
- "Function marked read-only and write-only");
for (Function *F : SCCNodes) {
if (F->doesNotAccessMemory())
// Already perfect!
Index: llvm/trunk/test/Transforms/FunctionAttrs/read-write-scc.ll
===================================================================
--- llvm/trunk/test/Transforms/FunctionAttrs/read-write-scc.ll
+++ llvm/trunk/test/Transforms/FunctionAttrs/read-write-scc.ll
@@ -0,0 +1,20 @@
+; RUN: opt -S -functionattrs < %s | FileCheck %s
+; RUN: opt -S -passes=function-attrs < %s | FileCheck %s
+
+ at i = global i32 0
+
+define void @foo() {
+; CHECK-LABEL: define void @foo() #0 {
+ store i32 1, i32* @i
+ call void @bar()
+ ret void
+}
+
+define void @bar() {
+; CHECK-LABEL: define void @bar() #0 {
+ %i = load i32, i32* @i
+ call void @foo()
+ ret void
+}
+
+; CHECK: attributes #0 = { nofree nounwind }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60761.209902.patch
Type: text/x-patch
Size: 1495 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190715/1af3e392/attachment.bin>
More information about the llvm-commits
mailing list