llvm.org GIT mirror llvm / 2b6183d
Fix PR4313: IPSCCP was not setting the lattice value for the invoke instruction when the invoke had multiple return values: it set the lattice value only on the extractvalue. This caused the invoke's lattice value to remain the default (undefined), and later propagated to extractvalue's operand, which incorrectly introduces undefined behavior. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84637 91177308-0d34-0410-b5e6-96231b3b80d8 Torok Edwin 10 years ago
2 changed file(s) with 720 addition(s) and 2 deletion(s). Raw diff Collapse all Expand all
12281228 TMRVI = TrackedMultipleRetVals.find(std::make_pair(F, 0));
12291229 if (TMRVI == TrackedMultipleRetVals.end())
12301230 goto CallOverdefined;
1231
1231
1232 // Need to mark as overdefined, otherwise it stays undefined which
1233 // creates extractvalue undef,
1234 markOverdefined(I);
12321235 // If we are tracking this callee, propagate the return values of the call
12331236 // into this call site. We do this by walking all the uses. Single-index
12341237 // ExtractValueInst uses can be tracked; anything more complicated is
12691272 mergeInValue(IV, AI, getValueState(*CAI));
12701273 }
12711274 }
1272
12731275
12741276 void SCCPSolver::Solve() {
12751277 // Process the work lists until they are empty!
0 ; RUN: opt -ipsccp <%s -S | FileCheck %s
1 ; PR4313
2 ; the return value of a multiple-return value invoke must not be left undefined
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
4 target triple = "x86_64-unknown-linux-gnu"
5
6 %0 = type <{ %1, %2, [4 x i8], %3 }>
7 %1 = type { i32 (...)**, i32, i32, i32, i32, %1*, i8*, i8*, i8* }
8 %2 = type { i32 }
9 %3 = type <{ %4, %5 }>
10 %4 = type { i32 (...)**, i8 }
11 %5 = type <{ [33 x i8], [191 x i8] }>
12 %6 = type { %1, %7, %10 }
13 %7 = type { %8 }
14 %8 = type { %9 }
15 %9 = type { i8* }
16 %10 = type { %11 }
17 %11 = type { %12 }
18 %12 = type { i32 (...)** }
19 %13 = type { %1, %14, %18, %10 }
20 %14 = type { %15 }
21 %15 = type { %16 }
22 %16 = type { %17 }
23 %17 = type { %8*, %8*, %8* }
24 %18 = type { %19 }
25 %19 = type { %20 }
26 %20 = type { i32*, i32*, i32* }
27 %21 = type { %22, %22 }
28 %22 = type { %23 }
29 %23 = type { %24 }
30 %24 = type { %25, %26, i64 }
31 %25 = type <{ i8 }>
32 %26 = type { i32, %26*, %26*, %26* }
33 %27 = type { %28, %15, i8* }
34 %28 = type { %29 }
35 %29 = type { %30 }
36 %30 = type { %31*, %31*, %31* }
37 %31 = type { %32*, %9 }
38 %32 = type { i32 (...)**, i8*, i8*, i8 }
39 %33 = type { i64, [12 x i32] }
40 %34 = type { %35 }
41 %35 = type { i32, i32, i32, i32, i32, i32, %36 }
42 %36 = type { %36*, %36* }
43 %37 = type { i32, %8, %9, %15, %38, %42 }
44 %38 = type { %39 }
45 %39 = type { %40 }
46 %40 = type { %41*, %41*, %41* }
47 %41 = type { %8, %12*, i32, %12* }
48 %42 = type { %43 }
49 %43 = type { %44 }
50 %44 = type { %37**, %37**, %37** }
51 %45 = type { i32 (...)**, i8*, i8*, i8*, i32, i8 }
52 %46 = type { %47, %37*, %12*, %8, %15, %37*, %50 }
53 %47 = type { %48 }
54 %48 = type { %49 }
55 %49 = type { i8*, i8*, i8* }
56 %50 = type { %51 }
57 %51 = type { %52 }
58 %52 = type { %46**, %46**, %46** }
59 %53 = type { %21*, %54, %63, %63, %22, %22, %22, %22, %22, %22, %37*, %37*, %37*, %72 }
60 %54 = type { %37*, %22, %55, %59, %18 }
61 %55 = type { %56 }
62 %56 = type { %57 }
63 %57 = type { %58*, %58*, %58* }
64 %58 = type { %37*, i32, i32 }
65 %59 = type { %60 }
66 %60 = type { %61 }
67 %61 = type { %62*, %62*, %62* }
68 %62 = type { %37*, %8, %42, %18, i32, i32, i32, %42, %8, %8 }
69 %63 = type { %64 }
70 %64 = type { %65 }
71 %65 = type { %66*, %66*, %66* }
72 %66 = type { %37*, %8, %8, %8, %8, %67, i32, i8, i8, %68 }
73 %67 = type { %18, %42, %18, %42 }
74 %68 = type { %69 }
75 %69 = type { %70 }
76 %70 = type { %71*, %71*, %71* }
77 %71 = type { i32, i32 }
78 %72 = type { %73 }
79 %73 = type { %74 }
80 %74 = type { %75*, %75*, %75* }
81 %75 = type { %76*, %46*, %46*, %42, i32 }
82 %76 = type { %77, %78 }
83 %77 = type { %12, %12* }
84 %78 = type { %79 }
85 %79 = type { %80 }
86 %80 = type { %12**, %12**, %12** }
87 %81 = type { %12, %21*, %53 }
88 %82 = type { %22, %8 }
89 %83 = type { %26, %84 }
90 %84 = type { i32, %22 }
91 %s2i64 = type { i64, i64 }
92 %85 = type { %26* }
93 %86 = type { %27*, i8*, %32*, i8*, i32, %8, i64, i32 }
94 %87 = type { %86, %88, %22, %95* }
95 %88 = type { %89 }
96 %89 = type { %90 }
97 %90 = type { %91*, %91*, %91* }
98 %91 = type { %92 }
99 %92 = type { %93 }
100 %93 = type { %94*, %94*, %94* }
101 %94 = type { %8, %18, %12*, %9 }
102 %95 = type { %37, %42 }
103
104 @_ZNSs4_Rep20_S_empty_rep_storageE = external global [4 x i64] ; <[4 x i64]*> [#uses=1]
105 @.str111723 = external constant [1 x i8], align 1 ; <[1 x i8]*> [#uses=1]
106 @.str181730 = external constant [4 x i8], align 1 ; <[4 x i8]*> [#uses=1]
107 @.str721784 = external constant [37 x i8], align 8 ; <[37 x i8]*> [#uses=1]
108 @_ZN12_GLOBAL__N_16ActionE = external global %0, align 32 ; <%0*> [#uses=1]
109 @_ZN12_GLOBAL__N_114OutputFilenameE = external global %6, align 32 ; <%6*> [#uses=1]
110 @_ZN12_GLOBAL__N_111IncludeDirsE = external global %13, align 32 ; <%13*> [#uses=1]
111 @.str533653 = external constant [2 x i8], align 1 ; <[2 x i8]*> [#uses=1]
112 @_ZN4llvm7RecordsE = external global %21, align 32 ; <%21*> [#uses=2]
113 @_ZL6SrcMgr = external global %27, align 32 ; <%27*> [#uses=2]
114 @.str3723 = external constant [88 x i8], align 8 ; <[88 x i8]*> [#uses=1]
115 @.str13724 = external constant [136 x i8], align 8 ; <[136 x i8]*> [#uses=1]
116
117 @_ZL20__gthrw_pthread_oncePiPFvvE = alias weak i32 (i32*, void ()*)* @pthread_once ; [#uses=0]
118 @_ZL27__gthrw_pthread_getspecificj = alias weak i8* (i32)* @pthread_getspecific ; [#uses=0]
119 @_ZL27__gthrw_pthread_setspecificjPKv = alias weak i32 (i32, i8*)* @pthread_setspecific ; [#uses=0]
120 @_ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_ = alias weak i32 (i64*, %33*, i8* (i8*)*, i8*)* @pthread_create ; [#uses=0]
121 @_ZL22__gthrw_pthread_cancelm = alias weak i32 (i64)* @pthread_cancel ; [#uses=0]
122 @_ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t = alias weak i32 (%34*)* @pthread_mutex_lock ; [#uses=0]
123 @_ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t = alias weak i32 (%34*)* @pthread_mutex_trylock ; [#uses=0]
124 @_ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t = alias weak i32 (%34*)* @pthread_mutex_unlock ; [#uses=0]
125 @_ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t = alias weak i32 (%34*, %2*)* @pthread_mutex_init ; [#uses=0]
126 @_ZL26__gthrw_pthread_key_createPjPFvPvE = alias weak i32 (i32*, void (i8*)*)* @pthread_key_create ; [#uses=0]
127 @_ZL26__gthrw_pthread_key_deletej = alias weak i32 (i32)* @pthread_key_delete ; [#uses=0]
128 @_ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t = alias weak i32 (%2*)* @pthread_mutexattr_init ; [#uses=0]
129 @_ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti = alias weak i32 (%2*, i32)* @pthread_mutexattr_settype ; [#uses=0]
130 @_ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t = alias weak i32 (%2*)* @pthread_mutexattr_destroy ; [#uses=0]
131
132 declare void @_ZNSsC1EPKcRKSaIcE(%8*, i8*, %25*)
133
134 declare i8* @_Znwm(i64)
135
136 declare zeroext i8 @_ZNK4llvm6Record12isSubClassOfENS_9StringRefE(%37*, i64, i64) align 2
137
138 declare i32 @_ZNKSs7compareEPKc(%8*, i8*)
139
140 declare %45* @_ZN4llvm11raw_ostreamlsEPKc(%45*, i8*) align 2
141
142 declare void @_ZNSsC1ERKSs(%8*, %8*)
143
144 declare %26* @_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base(%26*)
145
146 declare void @_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_(%8* noalias sret, i8*, %8*)
147
148 declare %15* @_ZNSt6vectorISsSaISsEEaSERKS1_(%15*, %15*) align 2
149
150 declare void @_ZNSt6vectorISsSaISsEE9push_backERKSs(%15*, %8*) align 2
151
152 declare i32 @_ZNK4llvm15TreePatternNode10getTypeNumEj(%46*, i32) align 2
153
154 declare void @_ZN4llvm18CodeGenDAGPatternsD1Ev(%53*) align 2
155
156 declare void @_ZN4llvm18CodeGenDAGPatternsC1ERNS_12RecordKeeperE(%53*, %21*) align 2
157
158 declare void @_ZNK4llvm14PatternToMatch17getPredicateCheckEv(%8* noalias sret, %75*) align 2
159
160 define internal void @0(%81*, %45*) align 2 {
161 invoke void @_ZNSsC1ERKSs(%8* undef, %8* null)
162 to label %3 unwind label %28
163
164 ;
165 %4 = getelementptr inbounds i8* null, i64 -24 ; [#uses=1]
166 %5 = icmp eq i8* %4, bitcast ([4 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE to i8*) ; [#uses=1]
167 br i1 %5, label %7, label %6
168
169 ;
170 unreachable
171
172 ;
173 br i1 undef, label %9, label %8
174
175 ;
176 invoke void @_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_(%8* noalias sret null, i8* getelementptr inbounds ([37 x i8]* @.str721784, i64 0, i64 0), %8* undef)
177 to label %10 unwind label %29
178
179 ;
180 unreachable
181
182 ;
183 invoke void @_ZNSsC1ERKSs(%8* null, %8* null)
184 to label %11 unwind label %30
185
186 ;
187 %12 = invoke %45* @_ZN4llvm11raw_ostreamlsEPKc(%45* %1, i8* getelementptr inbounds ([88 x i8]* @.str3723, i64 0, i64 0))
188 to label %13 unwind label %31 ; <%45*> [#uses=1]
189
190 ;
191 %14 = invoke %45* @_ZN4llvm11raw_ostreamlsEPKc(%45* %12, i8* getelementptr inbounds ([136 x i8]* @.str13724, i64 0, i64 0))
192 to label %15 unwind label %31 ; <%45*> [#uses=0]
193
194 ;
195 %16 = getelementptr inbounds i8* null, i64 -24 ; [#uses=1]
196 %17 = icmp eq i8* %16, bitcast ([4 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE to i8*) ; [#uses=1]
197 br i1 %17, label %19, label %18
198
199 ;
200 unreachable
201
202 ;
203 %20 = getelementptr inbounds i8* null, i64 -24 ; [#uses=1]
204 %21 = icmp eq i8* %20, bitcast ([4 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE to i8*) ; [#uses=1]
205 br i1 %21, label %23, label %22
206
207 ;
208 unreachable
209
210 ;
211 invoke void @_ZNSsC1ERKSs(%8* undef, %8* undef)
212 to label %24 unwind label %29
213
214 ;
215 invoke void @_ZNSsC1ERKSs(%8* undef, %8* undef)
216 to label %26 unwind label %25
217
218 ;
219 unreachable
220
221 ;
222 invoke void @f4(%82* undef, %53* undef)
223 to label %27 unwind label %32
224
225 ;
226 unreachable
227
228 ;
229 unreachable
230
231 ;
232 unreachable
233
234 ;
235 unreachable
236
237 ;
238 unreachable
239
240 ;
241 unreachable
242 }
243
244 declare void @_ZNSt3mapISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaISt4pairIKSsS1_EEED1Ev(%22*) align 2
245
246 declare void @_ZNSt3mapISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaISt4pairIKSsS1_EEEC1ERKS8_(%22*, %22*) align 2
247
248 declare %83* @_ZNSt8_Rb_treeIN4llvm3MVT15SimpleValueTypeESt4pairIKS2_St3mapISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaIS3_IKSsS7_EEEESt10_Select1stISE_ES8_IS2_ESaISE_EE14_M_create_nodeERKSE_(%23*, %84*) align 2
249
250 declare %22* @_ZNSt3mapIN12_GLOBAL__N_117OperandsSignatureES_ISsS_IN4llvm3MVT15SimpleValueTypeES_IS4_S_ISsNS0_15InstructionMemoESt4lessISsESaISt4pairIKSsS5_EEES6_IS4_ESaIS8_IKS4_SC_EEESD_SaIS8_ISE_SH_EEES7_SaIS8_IS9_SK_EEES6_IS1_ESaIS8_IKS1_SN_EEEixERSP_(%22*, %14*) align 2
251
252 define internal %22* @1(%22*, i32*) align 2 {
253 unreachable
254 }
255
256 declare void @test(i64);
257
258 define internal %22* @f3(%22*, i32*) align 2 {
259 %3 = alloca %85, align 8 ; <%85*> [#uses=1]
260 %4 = alloca %84, align 8 ; <%84*> [#uses=5]
261 invoke void @_ZNSt3mapISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaISt4pairIKSsS1_EEEC1ERKS8_(%22* undef, %22* undef)
262 to label %5 unwind label %30
263
264 ;
265 %6 = getelementptr inbounds %26* null, i64 1, i32 0 ; [#uses=1]
266 %7 = load i32* %6, align 4 ; [#uses=0]
267 br i1 false, label %8, label %11
268
269 ;
270 %9 = invoke %83* @_ZNSt8_Rb_treeIN4llvm3MVT15SimpleValueTypeESt4pairIKS2_St3mapISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaIS3_IKSsS7_EEEESt10_Select1stISE_ES8_IS2_ESaISE_EE14_M_create_nodeERKSE_(%23* undef, %84* %4)
271 to label %10 unwind label %31 ; <%83*> [#uses=0]
272
273 ;
274 unreachable
275
276 ;
277 %12 = getelementptr inbounds %85* %3, i64 0, i32 0 ; <%26**> [#uses=1]
278 %13 = load %26** %12, align 8 ; <%26*> [#uses=0]
279 br i1 false, label %14, label %17
280
281 ;
282 %15 = invoke %83* @_ZNSt8_Rb_treeIN4llvm3MVT15SimpleValueTypeESt4pairIKS2_St3mapISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaIS3_IKSsS7_EEEESt10_Select1stISE_ES8_IS2_ESaISE_EE14_M_create_nodeERKSE_(%23* undef, %84* %4)
283 to label %16 unwind label %31 ; <%83*> [#uses=0]
284
285 ;
286 unreachable
287
288 ;
289 %18 = invoke %26* @_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base(%26* undef)
290 to label %19 unwind label %31 ; <%26*> [#uses=0]
291
292 ;
293 %20 = getelementptr inbounds %84* %4, i64 0, i32 0 ; [#uses=1]
294 %21 = load i32* %20, align 8 ; [#uses=0]
295 br i1 false, label %22, label %25
296
297 ;
298 %23 = invoke %83* @_ZNSt8_Rb_treeIN4llvm3MVT15SimpleValueTypeESt4pairIKS2_St3mapISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaIS3_IKSsS7_EEEESt10_Select1stISE_ES8_IS2_ESaISE_EE14_M_create_nodeERKSE_(%23* undef, %84* %4)
299 to label %24 unwind label %31 ; <%83*> [#uses=0]
300
301 ;
302 unreachable
303
304 ;
305 %26 = invoke %s2i64 @f_3(%23* undef, %84* %4)
306 to label %l1 unwind label %31
307
308 ;
309 %eval = extractvalue %s2i64 %inv, 0 ; [#uses=0]
310 call void @test(i64 %eval)
311 ; CHECK: = invoke %s2i64 @f_3
312 ; CHECK: %eval = extractvalue %s2i64 %inv, 0
313 ; CHECK-NEXT: call void @test(i64 %eval)
314 invoke void @_ZNSt3mapISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaISt4pairIKSsS1_EEED1Ev(%22* undef)
315 to label %29 unwind label %30
316
317 l1:
318 %28 = extractvalue %s2i64 %26, 0
319 call void @test(i64 %28)
320 ;CHECK: call void @test(i64 5)
321 ;CHECK-NEXT: %inv = invoke %s2i64 @f2
322 %inv = invoke %s2i64 @f2(%23* undef, %84* %4)
323 to label %27 unwind label %31 ; <%s2i64> [#uses=1]
324
325
326 ;
327 unreachable
328
329 ;
330 unreachable
331
332 ;
333 unreachable
334 }
335 define internal %s2i64 @f2(%23*, %84*) align 2 {
336 br i1 undef, label %3, label %4
337
338 ;
339 br label %4
340
341 ;
342 %5 = insertvalue %s2i64 undef, i64 4, 1 ; <%s2i64> [#uses=1]
343 %6 = ptrtoint %84* %1 to i64
344 %7 = insertvalue %s2i64 %5, i64 %6, 0 ; <%s2i64> [#uses=1]
345 ret %s2i64 %7
346 }
347 define internal %s2i64 @f_3(%23*, %84*) align 2 {
348 br i1 undef, label %3, label %4
349
350 ;
351 br label %4
352
353 ;
354 %5 = insertvalue %s2i64 undef, i64 4, 1 ; <%s2i64> [#uses=1]
355 %6 = insertvalue %s2i64 %5, i64 5, 0 ; <%s2i64> [#uses=1]
356 ret %s2i64 %6
357 }
358
359
360 declare %22* @_ZNSt3mapISsS_IN4llvm3MVT15SimpleValueTypeES_IS2_S_ISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaISt4pairIKSsS4_EEES5_IS2_ESaIS7_IKS2_SB_EEESC_SaIS7_ISD_SG_EEES6_SaIS7_IS8_SJ_EEEixERS8_(%22*, %8*) align 2
361
362 define internal void @f4(%82*, %53*) align 2 {
363 invoke void @_ZNSsC1ERKSs(%8* undef, %8* undef)
364 to label %3 unwind label %57
365
366 ;
367 br i1 undef, label %6, label %4
368
369 ;
370 br i1 undef, label %5, label %6
371
372 ;
373 br label %6
374
375 ;
376 br i1 undef, label %8, label %7
377
378 ;
379 br i1 undef, label %56, label %9
380
381 ;
382 unreachable
383
384 ;
385 %10 = icmp eq %12* null, null ; [#uses=1]
386 br i1 %10, label %12, label %11
387
388 ;
389 unreachable
390
391 ;
392 %13 = getelementptr inbounds %46* null, i64 0, i32 6, i32 0, i32 0, i32 0 ; <%46***> [#uses=0]
393 %14 = icmp eq i32 0, 0 ; [#uses=1]
394 br i1 %14, label %16, label %15
395
396 ;
397 unreachable
398
399 ;
400 br i1 undef, label %19, label %17
401
402 ;
403 %18 = icmp eq %12* null, null ; [#uses=1]
404 br i1 %18, label %21, label %20
405
406 ;
407 unreachable
408
409 ;
410 unreachable
411
412 ;
413 %22 = invoke i32 @_ZNK4llvm15TreePatternNode10getTypeNumEj(%46* null, i32 0)
414 to label %23 unwind label %58 ; [#uses=0]
415
416 ;
417 %24 = invoke zeroext i8 @_ZNK4llvm6Record12isSubClassOfENS_9StringRefE(%37* undef, i64 undef, i64 undef)
418 to label %25 unwind label %58 ; [#uses=0]
419
420 ;
421 br i1 undef, label %26, label %27
422
423 ;
424 unreachable
425
426 ;
427 %28 = invoke i8* @_Znwm(i64 24)
428 to label %29 unwind label %59 ; [#uses=0]
429
430 ;
431 %30 = icmp eq %12* null, null ; [#uses=1]
432 br i1 %30, label %32, label %31
433
434 ;
435 unreachable
436
437 ;
438 %33 = invoke i32 @_ZNKSs7compareEPKc(%8* undef, i8* getelementptr inbounds ([4 x i8]* @.str181730, i64 0, i64 0))
439 to label %34 unwind label %59 ; [#uses=1]
440
441 ;
442 %35 = icmp eq i32 %33, 0 ; [#uses=1]
443 br i1 %35, label %37, label %36
444
445 ;
446 unreachable
447
448 ;
449 invoke void @_ZNSsC1EPKcRKSaIcE(%8* undef, i8* getelementptr inbounds ([1 x i8]* @.str111723, i64 0, i64 0), %25* undef)
450 to label %38 unwind label %60
451
452 ;
453 invoke void @_ZNSt6vectorISsSaISsEE9push_backERKSs(%15* undef, %8* undef)
454 to label %39 unwind label %61
455
456 ;
457 br i1 undef, label %42, label %40
458
459 ;
460 br i1 undef, label %41, label %42
461
462 ;
463 unreachable
464
465 ;
466 invoke void @_ZNK4llvm14PatternToMatch17getPredicateCheckEv(%8* noalias sret undef, %75* null)
467 to label %43 unwind label %59
468
469 ;
470 %44 = icmp eq %12* null, null ; [#uses=1]
471 br i1 %44, label %46, label %45
472
473 ;
474 unreachable
475
476 ;
477 invoke void @_ZNSsC1ERKSs(%8* undef, %8* undef)
478 to label %47 unwind label %62
479
480 ;
481 %48 = invoke %22* @_ZNSt3mapIN12_GLOBAL__N_117OperandsSignatureES_ISsS_IN4llvm3MVT15SimpleValueTypeES_IS4_S_ISsNS0_15InstructionMemoESt4lessISsESaISt4pairIKSsS5_EEES6_IS4_ESaIS8_IKS4_SC_EEESD_SaIS8_ISE_SH_EEES7_SaIS8_IS9_SK_EEES6_IS1_ESaIS8_IKS1_SN_EEEixERSP_(%22* undef, %14* undef)
482 to label %49 unwind label %63 ; <%22*> [#uses=1]
483
484 ;
485 %50 = invoke %22* @_ZNSt3mapISsS_IN4llvm3MVT15SimpleValueTypeES_IS2_S_ISsN12_GLOBAL__N_115InstructionMemoESt4lessISsESaISt4pairIKSsS4_EEES5_IS2_ESaIS7_IKS2_SB_EEESC_SaIS7_ISD_SG_EEES6_SaIS7_IS8_SJ_EEEixERS8_(%22* %48, %8* undef)
486 to label %51 unwind label %63 ; <%22*> [#uses=1]
487
488 ;
489 %52 = invoke %22* @1(%22* %50, i32* undef)
490 to label %53 unwind label %63 ; <%22*> [#uses=1]
491
492 ;
493 %54 = invoke %22* @f3(%22* %52, i32* undef)
494 to label %55 unwind label %63 ; <%22*> [#uses=0]
495
496 ;
497 unreachable
498
499 ;
500 ret void
501
502 ;
503 unreachable
504
505 ;
506 unreachable
507
508 ;
509 unreachable
510
511 ;
512 unreachable
513
514 ;
515 unreachable
516
517 ;
518 unreachable
519
520 ;
521 unreachable
522 }
523
524 declare i32 @_ZN4llvm7TGLexer8LexTokenEv(%86*) align 2
525
526 declare void @_ZN4llvm8TGParserD1Ev(%87*) align 2
527
528 declare i32 @_ZN4llvm9SourceMgr18AddNewSourceBufferEPNS_12MemoryBufferENS_5SMLocE(%27*, %32*, %9* noalias) align 2
529
530 define i32 @main(i32, i8**) {
531 br i1 undef, label %3, label %4
532
533 ;
534 unreachable
535
536 ;
537 %5 = icmp eq i32 0, 0 ; [#uses=1]
538 br i1 %5, label %7, label %6
539
540 ;
541 unreachable
542
543 ;
544 br i1 undef, label %8, label %9
545
546 ;
547 br i1 undef, label %10, label %9
548
549 ;
550 br i1 undef, label %14, label %18
551
552 ;
553 br label %11
554
555 ;
556 br i1 undef, label %12, label %13
557
558 ;
559 br label %11
560
561 ;
562 unreachable
563
564 ;
565 br i1 undef, label %15, label %17
566
567 ;
568 br i1 undef, label %17, label %16
569
570 ;
571 unreachable
572
573 ;
574 unreachable
575
576 ;
577 %19 = invoke i32 @_ZN4llvm9SourceMgr18AddNewSourceBufferEPNS_12MemoryBufferENS_5SMLocE(%27* @_ZL6SrcMgr, %32* undef, %9* noalias undef)
578 to label %20 unwind label %34 ; [#uses=0]
579
580 ;
581 %21 = invoke %15* @_ZNSt6vectorISsSaISsEEaSERKS1_(%15* getelementptr inbounds (%27* @_ZL6SrcMgr, i64 0, i32 1), %15* getelementptr inbounds (%13* @_ZN12_GLOBAL__N_111IncludeDirsE, i64 0, i32 1, i32 0))
582 to label %22 unwind label %34 ; <%15*> [#uses=0]
583
584 ;
585 %23 = getelementptr inbounds %27* null, i64 0, i32 0, i32 0, i32 0, i32 1 ; <%31**> [#uses=1]
586 %24 = load %31** %23, align 8 ; <%31*> [#uses=1]
587 %25 = ptrtoint %31* %24 to i64 ; [#uses=1]
588 %26 = sub i64 %25, 0 ; [#uses=1]
589 %27 = icmp ugt i64 %26, 15 ; [#uses=1]
590 br i1 %27, label %29, label %28
591
592 ;
593 unreachable
594
595 ;
596 %30 = invoke i32 @_ZN4llvm7TGLexer8LexTokenEv(%86* undef)
597 to label %31 unwind label %35 ; [#uses=0]
598
599 ;
600 invoke void @_ZN4llvm8TGParserD1Ev(%87* null)
601 to label %32 unwind label %34
602
603 ;
604 %33 = icmp eq i8 0, 0 ; [#uses=1]
605 br i1 %33, label %36, label %56
606
607 ;
608 unreachable
609
610 ;
611 unreachable
612
613 ;
614 %37 = invoke i32 @_ZNKSs7compareEPKc(%8* getelementptr inbounds (%6* @_ZN12_GLOBAL__N_114OutputFilenameE, i64 0, i32 1, i32 0), i8* getelementptr inbounds ([2 x i8]* @.str533653, i64 0, i64 0))
615 to label %38 unwind label %57 ; [#uses=1]
616
617 ;
618 %39 = icmp eq i32 %37, 0 ; [#uses=1]
619 br i1 %39, label %43, label %40
620
621 ;
622 %41 = invoke i8* @_Znwm(i64 56)
623 to label %42 unwind label %58 ; [#uses=0]
624
625 ;
626 unreachable
627
628 ;
629 %44 = load i32* getelementptr inbounds (%0* @_ZN12_GLOBAL__N_16ActionE, i64 0, i32 1, i32 0), align 8 ; [#uses=1]
630 switch i32 %44, label %56 [
631 i32 0, label %45
632 i32 12, label %48
633 i32 13, label %51
634 ]
635
636 ;
637 br i1 undef, label %46, label %47
638
639 ;
640 unreachable
641
642 ;
643 unreachable
644
645 ;
646 invoke void @_ZN4llvm18CodeGenDAGPatternsC1ERNS_12RecordKeeperE(%53* undef, %21* @_ZN4llvm7RecordsE)
647 to label %50 unwind label %49
648
649 ;
650 unreachable
651
652 ;
653 unreachable
654
655 ;
656 invoke void @_ZN4llvm18CodeGenDAGPatternsC1ERNS_12RecordKeeperE(%53* undef, %21* @_ZN4llvm7RecordsE)
657 to label %53 unwind label %52
658
659 ;
660 unreachable
661
662 ;
663 invoke void @0(%81* undef, %45* null)
664 to label %54 unwind label %60
665
666 ;
667 invoke void @_ZN4llvm18CodeGenDAGPatternsD1Ev(%53* undef)
668 to label %55 unwind label %59
669
670 ;
671 unreachable
672
673 ;
674 ret i32 1
675
676 ;
677 unreachable
678
679 ;
680 unreachable
681
682 ;
683 unreachable
684
685 ;
686 unreachable
687 }
688
689 declare i8* @pthread_getspecific(i32) nounwind
690
691 declare i32 @pthread_setspecific(i32, i8*) nounwind
692
693 declare i32 @pthread_key_delete(i32) nounwind
694
695 declare i32 @pthread_key_create(i32*, void (i8*)*) nounwind
696
697 declare i32 @pthread_mutex_trylock(%34*) nounwind
698
699 declare i32 @pthread_mutex_unlock(%34*) nounwind
700
701 declare i32 @pthread_mutex_lock(%34*) nounwind
702
703 declare i32 @pthread_mutexattr_init(%2*) nounwind
704
705 declare i32 @pthread_mutexattr_settype(%2*, i32) nounwind
706
707 declare i32 @pthread_mutex_init(%34*, %2*) nounwind
708
709 declare i32 @pthread_mutexattr_destroy(%2*) nounwind
710
711 declare extern_weak i32 @pthread_once(i32*, void ()*)
712
713 declare extern_weak i32 @pthread_create(i64*, %33*, i8* (i8*)*, i8*)
714
715 declare extern_weak i32 @pthread_cancel(i64)