150
|
1 ; RUN: opt -S -adce < %s | FileCheck %s
|
|
2
|
|
3 ; While it is normally okay to DCE out calls to @readonly_function and
|
|
4 ; @readnone_function, we cannot do that if they're carrying operand
|
|
5 ; bundles since the presence of unknown operand bundles implies
|
|
6 ; arbitrary memory effects.
|
|
7
|
|
8 declare void @readonly_function() readonly nounwind
|
|
9 declare void @readnone_function() readnone nounwind
|
|
10
|
|
11 define void @test0() {
|
|
12 ; CHECK-LABEL: @test0(
|
|
13 entry:
|
|
14 call void @readonly_function() [ "tag"() ]
|
|
15 ; CHECK: call void @readonly_function
|
|
16 ret void
|
|
17 }
|
|
18
|
|
19 define void @test1() {
|
|
20 ; CHECK-LABEL: @test1(
|
|
21 entry:
|
|
22 call void @readnone_function() [ "tag"() ]
|
|
23 ; CHECK: call void @readnone_function
|
|
24 ret void
|
|
25 }
|
|
26
|
|
27 define void @test2() {
|
|
28 ; CHECK-LABEL: @test2(
|
|
29 entry:
|
|
30 ; CHECK-NOT: @readonly_function(
|
|
31 call void @readonly_function() readonly [ "tag"() ]
|
|
32 ret void
|
|
33 }
|
|
34
|
|
35 define void @test3() {
|
|
36 ; CHECK-LABEL: @test3(
|
|
37 entry:
|
|
38 ; CHECK-NOT: @readnone_function(
|
|
39 call void @readnone_function() readnone [ "tag"() ]
|
|
40 ret void
|
|
41 }
|
|
42
|
|
43 define void @test4() {
|
|
44 ; CHECK-LABEL: @test4(
|
|
45 entry:
|
|
46 ; CHECK-NOT: @readonly_function()
|
|
47 call void @readonly_function() [ "deopt"() ]
|
|
48 ret void
|
|
49 }
|