xref: /llvm-project/llvm/test/Bitcode/operand-bundles.ll (revision 15de239406bfc0a1dfbd0640490c4bd5d1e0ac33)
1; RUN: llvm-as < %s | llvm-dis | FileCheck %s
2
3declare void @callee0()
4declare void @callee1(i32,i32)
5
6define void @f0(i32* %ptr) {
7; CHECK-LABEL: @f0(
8 entry:
9  %l = load i32, i32* %ptr
10  %x = add i32 42, 1
11  call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
12; CHECK: call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
13  ret void
14}
15
16define void @f1(i32* %ptr) {
17; CHECK-LABEL: @f1(
18 entry:
19  %l = load i32, i32* %ptr
20  %x = add i32 42, 1
21
22  call void @callee0()
23  call void @callee0() [ "foo"() ]
24  call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
25; CHECK: @callee0(){{$}}
26; CHECK-NEXT: call void @callee0() [ "foo"() ]
27; CHECK-NEXT: call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
28  ret void
29}
30
31define void @f2(i32* %ptr) {
32; CHECK-LABEL: @f2(
33 entry:
34  call void @callee0() [ "foo"() ]
35; CHECK: call void @callee0() [ "foo"() ]
36  ret void
37}
38
39define void @f3(i32* %ptr) {
40; CHECK-LABEL: @f3(
41 entry:
42  %l = load i32, i32* %ptr
43  %x = add i32 42, 1
44  call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
45; CHECK: call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
46  ret void
47}
48
49define void @f4(i32* %ptr) {
50; CHECK-LABEL: @f4(
51 entry:
52  %l = load i32, i32* %ptr
53  %x = add i32 42, 1
54  call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
55; CHECK: call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
56  ret void
57}
58
59define void @f5(i32 %x) {
60entry:
61  call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ]
62; CHECK: call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ]
63  ret void
64}
65
66; Invoke versions of the above tests:
67
68
69define void @g0(i32* %ptr) personality i8 3 {
70; CHECK-LABEL: @g0(
71 entry:
72  %l = load i32, i32* %ptr
73  %x = add i32 42, 1
74  invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ] to label %normal unwind label %exception
75; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
76
77exception:
78  %cleanup = landingpad i8 cleanup
79  br label %normal
80normal:
81  ret void
82}
83
84define void @g1(i32* %ptr) personality i8 3 {
85; CHECK-LABEL: @g1(
86 entry:
87  %l = load i32, i32* %ptr
88  %x = add i32 42, 1
89
90  invoke void @callee0() to label %normal unwind label %exception
91; CHECK: invoke void @callee0(){{$}}
92
93exception:
94  %cleanup = landingpad i8 cleanup
95  br label %normal
96
97normal:
98  invoke void @callee0() [ "foo"() ] to label %normal1 unwind label %exception1
99; CHECK: invoke void @callee0() [ "foo"() ]
100
101exception1:
102  %cleanup1 = landingpad i8 cleanup
103  br label %normal1
104
105normal1:
106  invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ] to label %normal2 unwind label %exception2
107; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
108
109exception2:
110  %cleanup2 = landingpad i8 cleanup
111  br label %normal2
112
113normal2:
114  ret void
115}
116
117define void @g2(i32* %ptr) personality i8 3 {
118; CHECK-LABEL: @g2(
119 entry:
120  invoke void @callee0() [ "foo"() ] to label %normal unwind label %exception
121; CHECK: invoke void @callee0() [ "foo"() ]
122
123exception:
124  %cleanup = landingpad i8 cleanup
125  br label %normal
126normal:
127  ret void
128}
129
130define void @g3(i32* %ptr) personality i8 3 {
131; CHECK-LABEL: @g3(
132 entry:
133  %l = load i32, i32* %ptr
134  %x = add i32 42, 1
135  invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ] to label %normal unwind label %exception
136; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
137
138exception:
139  %cleanup = landingpad i8 cleanup
140  br label %normal
141normal:
142  ret void
143}
144
145define void @g4(i32* %ptr) personality i8 3 {
146; CHECK-LABEL: @g4(
147 entry:
148  %l = load i32, i32* %ptr
149  %x = add i32 42, 1
150  invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
151        to label %normal unwind label %exception
152; CHECK: invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
153
154exception:
155  %cleanup = landingpad i8 cleanup
156  br label %normal
157normal:
158  ret void
159}
160
161define void @g5(ptr %ptr) personality i8 3 {
162entry:
163  %l = load i32, ptr %ptr, align 4
164  %x = add i32 42, 1
165  invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ]
166          to label %normal unwind label %exception
167; CHECK:   invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ]
168
169exception:                                        ; preds = %entry
170  %cleanup = landingpad i8
171          cleanup
172  br label %normal
173
174normal:                                           ; preds = %exception, %entry
175  ret void
176}
177