blob: c1c269118739a813942577a4bc21db5aff4df273 [file] [log] [blame]
Tom Stellard1b5cf622016-07-14 15:50:27 +00001; RUN: opt < %s -disable-basicaa -globals-aa -dse -S | FileCheck %s
2
3@X = internal global i32 4
4
Eli Friedmana6707f52016-08-12 01:09:53 +00005define i32 @test0() {
Tom Stellard1b5cf622016-07-14 15:50:27 +00006; CHECK-LABEL: @test0
7; CHECK: store i32 0, i32* @X
Eli Friedmana6707f52016-08-12 01:09:53 +00008; CHECK-NEXT: call i32 @func_readonly() #0
Tom Stellard1b5cf622016-07-14 15:50:27 +00009; CHECK-NEXT: store i32 1, i32* @X
10 store i32 0, i32* @X
Eli Friedmana6707f52016-08-12 01:09:53 +000011 %x = call i32 @func_readonly() #0
Tom Stellard1b5cf622016-07-14 15:50:27 +000012 store i32 1, i32* @X
Eli Friedmana6707f52016-08-12 01:09:53 +000013 ret i32 %x
Tom Stellard1b5cf622016-07-14 15:50:27 +000014}
15
Eli Friedmana6707f52016-08-12 01:09:53 +000016define i32 @test1() {
Tom Stellard1b5cf622016-07-14 15:50:27 +000017; CHECK-LABEL: @test1
18; CHECK-NOT: store
Eli Friedmana6707f52016-08-12 01:09:53 +000019; CHECK: call i32 @func_read_argmem_only() #1
Tom Stellard1b5cf622016-07-14 15:50:27 +000020; CHECK-NEXT: store i32 3, i32* @X
21 store i32 2, i32* @X
Eli Friedmana6707f52016-08-12 01:09:53 +000022 %x = call i32 @func_read_argmem_only() #1
Tom Stellard1b5cf622016-07-14 15:50:27 +000023 store i32 3, i32* @X
Eli Friedmana6707f52016-08-12 01:09:53 +000024 ret i32 %x
Tom Stellard1b5cf622016-07-14 15:50:27 +000025}
26
Eli Friedmana6707f52016-08-12 01:09:53 +000027declare i32 @func_readonly() #0
28declare i32 @func_read_argmem_only() #1
Tom Stellard1b5cf622016-07-14 15:50:27 +000029
Eli Friedmana6707f52016-08-12 01:09:53 +000030attributes #0 = { readonly nounwind }
31attributes #1 = { readonly argmemonly nounwind }