Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[FunctionAttrs] Remove readonly and writeonly assertion
There are scenarios where mutually recursive functions may cause the SCC to contain both read only and write only functions. This removes an assertion when adding read attributes which caused a crash with a the provided test case, and instead just doesn't add the attributes. Patch by Luke Lau <luke.lau@intel.com> Differential Revision: https://reviews.llvm.org/D60761 llvm-svn: 366090
- Loading branch information
Johannes Doerfert
committed
Jul 15, 2019
1 parent
8e7eee6
commit 3dcd799
Showing
2 changed files
with
25 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
; RUN: opt -S -functionattrs < %s | FileCheck %s | ||
; RUN: opt -S -passes=function-attrs < %s | FileCheck %s | ||
|
||
@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 } |