xref: /llvm-project/llvm/test/CodeGen/X86/2007-08-09-IllegalX86-64Asm.ll (revision a4951eca40c070e020aa5d2689c08177fbeb780d)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
3
4	%struct.FILE = type { ptr, i32, i32, i16, i16, %struct.__sbuf, i32, ptr, ptr, ptr, ptr, ptr, %struct.__sbuf, ptr, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, [4 x i8], i64 }
5	%struct.PyBoolScalarObject = type { i64, ptr, i8 }
6	%struct.PyBufferProcs = type { ptr, ptr, ptr, ptr }
7	%struct.PyGetSetDef = type { ptr, ptr, ptr, ptr, ptr }
8	%struct.PyMappingMethods = type { ptr, ptr, ptr }
9	%struct.PyMemberDef = type opaque
10	%struct.PyMethodDef = type { ptr, ptr, i32, ptr }
11	%struct.PyNumberMethods = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
12	%struct.PyObject = type { i64, ptr }
13	%struct.PySequenceMethods = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
14	%struct.PyTupleObject = type { i64, ptr, i64, [1 x ptr] }
15	%struct.__sFILEX = type opaque
16	%struct.__sbuf = type { ptr, i32 }
17	%struct._typeobject = type { i64, ptr, i64, ptr, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, ptr, ptr, ptr, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
18@PyArray_API = external global ptr		; <ptr> [#uses=4]
19@PyUFunc_API = external global ptr		; <ptr> [#uses=4]
20@.str5 = external constant [14 x i8]		; <ptr> [#uses=1]
21
22define ptr @ubyte_divmod(ptr %a, ptr %b) {
23; CHECK-LABEL: ubyte_divmod:
24; CHECK:       ## %bb.0: ## %entry
25; CHECK-NEXT:    pushq %rbp
26; CHECK-NEXT:    .cfi_def_cfa_offset 16
27; CHECK-NEXT:    pushq %r15
28; CHECK-NEXT:    .cfi_def_cfa_offset 24
29; CHECK-NEXT:    pushq %r14
30; CHECK-NEXT:    .cfi_def_cfa_offset 32
31; CHECK-NEXT:    pushq %r12
32; CHECK-NEXT:    .cfi_def_cfa_offset 40
33; CHECK-NEXT:    pushq %rbx
34; CHECK-NEXT:    .cfi_def_cfa_offset 48
35; CHECK-NEXT:    subq $32, %rsp
36; CHECK-NEXT:    .cfi_def_cfa_offset 80
37; CHECK-NEXT:    .cfi_offset %rbx, -48
38; CHECK-NEXT:    .cfi_offset %r12, -40
39; CHECK-NEXT:    .cfi_offset %r14, -32
40; CHECK-NEXT:    .cfi_offset %r15, -24
41; CHECK-NEXT:    .cfi_offset %rbp, -16
42; CHECK-NEXT:    movq %rsi, %rbx
43; CHECK-NEXT:    movq %rdi, %r14
44; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi
45; CHECK-NEXT:    callq __ubyte_convert_to_ctype
46; CHECK-NEXT:    testl %eax, %eax
47; CHECK-NEXT:    js LBB0_6
48; CHECK-NEXT:  ## %bb.1: ## %cond_next.i
49; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi
50; CHECK-NEXT:    movq %rbx, %rdi
51; CHECK-NEXT:    callq __ubyte_convert_to_ctype
52; CHECK-NEXT:    movl %eax, %ecx
53; CHECK-NEXT:    sarl $31, %ecx
54; CHECK-NEXT:    andl %eax, %ecx
55; CHECK-NEXT:    cmpl $-2, %ecx
56; CHECK-NEXT:    je LBB0_10
57; CHECK-NEXT:  ## %bb.2: ## %cond_next.i
58; CHECK-NEXT:    cmpl $-1, %ecx
59; CHECK-NEXT:    jne LBB0_3
60; CHECK-NEXT:  LBB0_8: ## %bb4
61; CHECK-NEXT:    movq _PyArray_API@GOTPCREL(%rip), %rax
62; CHECK-NEXT:    movq (%rax), %rax
63; CHECK-NEXT:    movq 16(%rax), %rax
64; CHECK-NEXT:    jmp LBB0_9
65; CHECK-NEXT:  LBB0_6: ## %_ubyte_convert2_to_ctypes.exit
66; CHECK-NEXT:    cmpl $-2, %eax
67; CHECK-NEXT:    je LBB0_10
68; CHECK-NEXT:  ## %bb.7: ## %_ubyte_convert2_to_ctypes.exit
69; CHECK-NEXT:    cmpl $-1, %eax
70; CHECK-NEXT:    je LBB0_8
71; CHECK-NEXT:  LBB0_3: ## %bb35
72; CHECK-NEXT:    movq _PyUFunc_API@GOTPCREL(%rip), %r14
73; CHECK-NEXT:    movq (%r14), %rax
74; CHECK-NEXT:    callq *216(%rax)
75; CHECK-NEXT:    movzbl {{[0-9]+}}(%rsp), %edx
76; CHECK-NEXT:    testb %dl, %dl
77; CHECK-NEXT:    je LBB0_4
78; CHECK-NEXT:  ## %bb.12: ## %cond_false.i
79; CHECK-NEXT:    setne %dil
80; CHECK-NEXT:    movzbl {{[0-9]+}}(%rsp), %esi
81; CHECK-NEXT:    movzbl %sil, %ecx
82; CHECK-NEXT:    movl %ecx, %eax
83; CHECK-NEXT:    divb %dl
84; CHECK-NEXT:    movl %eax, %r15d
85; CHECK-NEXT:    testb %cl, %cl
86; CHECK-NEXT:    setne %al
87; CHECK-NEXT:    testb %dil, %al
88; CHECK-NEXT:    jne LBB0_5
89; CHECK-NEXT:  LBB0_13: ## %cond_true.i200
90; CHECK-NEXT:    testb %dl, %dl
91; CHECK-NEXT:    jne LBB0_15
92; CHECK-NEXT:  ## %bb.14: ## %cond_true14.i
93; CHECK-NEXT:    movl $4, %edi
94; CHECK-NEXT:    callq _feraiseexcept
95; CHECK-NEXT:  LBB0_15: ## %ubyte_ctype_remainder.exit
96; CHECK-NEXT:    xorl %ebx, %ebx
97; CHECK-NEXT:    jmp LBB0_16
98; CHECK-NEXT:  LBB0_10: ## %bb17
99; CHECK-NEXT:    callq _PyErr_Occurred
100; CHECK-NEXT:    testq %rax, %rax
101; CHECK-NEXT:    jne LBB0_23
102; CHECK-NEXT:  ## %bb.11: ## %cond_next
103; CHECK-NEXT:    movq _PyArray_API@GOTPCREL(%rip), %rax
104; CHECK-NEXT:    movq (%rax), %rax
105; CHECK-NEXT:    movq 80(%rax), %rax
106; CHECK-NEXT:  LBB0_9: ## %bb4
107; CHECK-NEXT:    movq 96(%rax), %rax
108; CHECK-NEXT:    movq %r14, %rdi
109; CHECK-NEXT:    movq %rbx, %rsi
110; CHECK-NEXT:    callq *40(%rax)
111; CHECK-NEXT:    jmp LBB0_24
112; CHECK-NEXT:  LBB0_4: ## %cond_true.i
113; CHECK-NEXT:    movl $4, %edi
114; CHECK-NEXT:    callq _feraiseexcept
115; CHECK-NEXT:    movzbl {{[0-9]+}}(%rsp), %edx
116; CHECK-NEXT:    movzbl {{[0-9]+}}(%rsp), %esi
117; CHECK-NEXT:    testb %sil, %sil
118; CHECK-NEXT:    sete %al
119; CHECK-NEXT:    testb %dl, %dl
120; CHECK-NEXT:    sete %cl
121; CHECK-NEXT:    xorl %r15d, %r15d
122; CHECK-NEXT:    orb %al, %cl
123; CHECK-NEXT:    jne LBB0_13
124; CHECK-NEXT:  LBB0_5: ## %cond_next17.i
125; CHECK-NEXT:    movzbl %sil, %eax
126; CHECK-NEXT:    divb %dl
127; CHECK-NEXT:    movzbl %ah, %ebx
128; CHECK-NEXT:  LBB0_16: ## %ubyte_ctype_remainder.exit
129; CHECK-NEXT:    movq (%r14), %rax
130; CHECK-NEXT:    callq *224(%rax)
131; CHECK-NEXT:    testl %eax, %eax
132; CHECK-NEXT:    je LBB0_19
133; CHECK-NEXT:  ## %bb.17: ## %cond_true61
134; CHECK-NEXT:    movl %eax, %ebp
135; CHECK-NEXT:    movq (%r14), %rax
136; CHECK-NEXT:    movq _.str5@GOTPCREL(%rip), %rdi
137; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi
138; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx
139; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx
140; CHECK-NEXT:    callq *200(%rax)
141; CHECK-NEXT:    testl %eax, %eax
142; CHECK-NEXT:    js LBB0_23
143; CHECK-NEXT:  ## %bb.18: ## %cond_next73
144; CHECK-NEXT:    movl $1, {{[0-9]+}}(%rsp)
145; CHECK-NEXT:    movq (%r14), %rax
146; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
147; CHECK-NEXT:    movl {{[0-9]+}}(%rsp), %edi
148; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx
149; CHECK-NEXT:    movl %ebp, %edx
150; CHECK-NEXT:    callq *232(%rax)
151; CHECK-NEXT:    testl %eax, %eax
152; CHECK-NEXT:    jne LBB0_23
153; CHECK-NEXT:  LBB0_19: ## %cond_next89
154; CHECK-NEXT:    movl $2, %edi
155; CHECK-NEXT:    callq _PyTuple_New
156; CHECK-NEXT:    testq %rax, %rax
157; CHECK-NEXT:    je LBB0_23
158; CHECK-NEXT:  ## %bb.20: ## %cond_next97
159; CHECK-NEXT:    movq %rax, %r14
160; CHECK-NEXT:    movq _PyArray_API@GOTPCREL(%rip), %r12
161; CHECK-NEXT:    movq (%r12), %rax
162; CHECK-NEXT:    movq 200(%rax), %rdi
163; CHECK-NEXT:    xorl %esi, %esi
164; CHECK-NEXT:    callq *304(%rdi)
165; CHECK-NEXT:    testq %rax, %rax
166; CHECK-NEXT:    je LBB0_21
167; CHECK-NEXT:  ## %bb.25: ## %cond_next135
168; CHECK-NEXT:    movb %r15b, 16(%rax)
169; CHECK-NEXT:    movq %rax, 24(%r14)
170; CHECK-NEXT:    movq (%r12), %rax
171; CHECK-NEXT:    movq 200(%rax), %rdi
172; CHECK-NEXT:    xorl %esi, %esi
173; CHECK-NEXT:    callq *304(%rdi)
174; CHECK-NEXT:    testq %rax, %rax
175; CHECK-NEXT:    je LBB0_21
176; CHECK-NEXT:  ## %bb.26: ## %cond_next182
177; CHECK-NEXT:    movb %bl, 16(%rax)
178; CHECK-NEXT:    movq %rax, 32(%r14)
179; CHECK-NEXT:    movq %r14, %rax
180; CHECK-NEXT:    jmp LBB0_24
181; CHECK-NEXT:  LBB0_21: ## %cond_true113
182; CHECK-NEXT:    decq (%r14)
183; CHECK-NEXT:    jne LBB0_23
184; CHECK-NEXT:  ## %bb.22: ## %cond_true126
185; CHECK-NEXT:    movq 8(%r14), %rax
186; CHECK-NEXT:    movq %r14, %rdi
187; CHECK-NEXT:    callq *48(%rax)
188; CHECK-NEXT:  LBB0_23: ## %UnifiedReturnBlock
189; CHECK-NEXT:    xorl %eax, %eax
190; CHECK-NEXT:  LBB0_24: ## %UnifiedReturnBlock
191; CHECK-NEXT:    addq $32, %rsp
192; CHECK-NEXT:    popq %rbx
193; CHECK-NEXT:    popq %r12
194; CHECK-NEXT:    popq %r14
195; CHECK-NEXT:    popq %r15
196; CHECK-NEXT:    popq %rbp
197; CHECK-NEXT:    retq
198entry:
199	%arg1 = alloca i8, align 1		; <ptr> [#uses=3]
200	%arg2 = alloca i8, align 1		; <ptr> [#uses=3]
201	%first = alloca i32, align 4		; <ptr> [#uses=2]
202	%bufsize = alloca i32, align 4		; <ptr> [#uses=1]
203	%errmask = alloca i32, align 4		; <ptr> [#uses=2]
204	%errobj = alloca ptr, align 8		; <ptr> [#uses=2]
205	%tmp3.i = call fastcc i32 @_ubyte_convert_to_ctype( ptr %a, ptr %arg1 )		; <i32> [#uses=2]
206	%tmp5.i = icmp slt i32 %tmp3.i, 0		; <i1> [#uses=1]
207	br i1 %tmp5.i, label %_ubyte_convert2_to_ctypes.exit, label %cond_next.i
208
209cond_next.i:		; preds = %entry
210	%tmp11.i = call fastcc i32 @_ubyte_convert_to_ctype( ptr %b, ptr %arg2 )		; <i32> [#uses=2]
211	%tmp13.i = icmp slt i32 %tmp11.i, 0		; <i1> [#uses=1]
212	%retval.i = select i1 %tmp13.i, i32 %tmp11.i, i32 0		; <i32> [#uses=1]
213	switch i32 %retval.i, label %bb35 [
214		 i32 -2, label %bb17
215		 i32 -1, label %bb4
216	]
217
218_ubyte_convert2_to_ctypes.exit:		; preds = %entry
219	switch i32 %tmp3.i, label %bb35 [
220		 i32 -2, label %bb17
221		 i32 -1, label %bb4
222	]
223
224bb4:		; preds = %_ubyte_convert2_to_ctypes.exit, %cond_next.i
225	%tmp5 = load ptr, ptr @PyArray_API, align 8		; <ptr> [#uses=1]
226	%tmp6 = getelementptr ptr, ptr %tmp5, i64 2		; <ptr> [#uses=1]
227	%tmp7 = load ptr, ptr %tmp6		; <ptr> [#uses=1]
228	%tmp9 = getelementptr %struct._typeobject, ptr %tmp7, i32 0, i32 12		; <ptr> [#uses=1]
229	%tmp10 = load ptr, ptr %tmp9		; <ptr> [#uses=1]
230	%tmp11 = getelementptr %struct.PyNumberMethods, ptr %tmp10, i32 0, i32 5		; <ptr> [#uses=1]
231	%tmp12 = load ptr, ptr %tmp11		; <ptr> [#uses=1]
232	%tmp15 = call ptr %tmp12( ptr %a, ptr %b )		; <ptr> [#uses=1]
233	ret ptr %tmp15
234
235bb17:		; preds = %_ubyte_convert2_to_ctypes.exit, %cond_next.i
236	%tmp18 = call ptr @PyErr_Occurred( )		; <ptr> [#uses=1]
237	%tmp19 = icmp eq ptr %tmp18, null		; <i1> [#uses=1]
238	br i1 %tmp19, label %cond_next, label %UnifiedReturnBlock
239
240cond_next:		; preds = %bb17
241	%tmp22 = load ptr, ptr @PyArray_API, align 8		; <ptr> [#uses=1]
242	%tmp23 = getelementptr ptr, ptr %tmp22, i64 10		; <ptr> [#uses=1]
243	%tmp24 = load ptr, ptr %tmp23		; <ptr> [#uses=1]
244	%tmp26 = getelementptr %struct._typeobject, ptr %tmp24, i32 0, i32 12		; <ptr> [#uses=1]
245	%tmp27 = load ptr, ptr %tmp26		; <ptr> [#uses=1]
246	%tmp28 = getelementptr %struct.PyNumberMethods, ptr %tmp27, i32 0, i32 5		; <ptr> [#uses=1]
247	%tmp29 = load ptr, ptr %tmp28		; <ptr> [#uses=1]
248	%tmp32 = call ptr %tmp29( ptr %a, ptr %b )		; <ptr> [#uses=1]
249	ret ptr %tmp32
250
251bb35:		; preds = %_ubyte_convert2_to_ctypes.exit, %cond_next.i
252	%tmp36 = load ptr, ptr @PyUFunc_API, align 8		; <ptr> [#uses=1]
253	%tmp37 = getelementptr ptr, ptr %tmp36, i64 27		; <ptr> [#uses=1]
254	%tmp38 = load ptr, ptr %tmp37		; <ptr> [#uses=1]
255	call void %tmp38( )
256	%tmp40 = load i8, ptr %arg2, align 1		; <i8> [#uses=4]
257	%tmp1.i = icmp eq i8 %tmp40, 0		; <i1> [#uses=2]
258	br i1 %tmp1.i, label %cond_true.i, label %cond_false.i
259
260cond_true.i:		; preds = %bb35
261	%tmp3.i196 = call i32 @feraiseexcept( i32 4 )		; <i32> [#uses=0]
262	%tmp46207 = load i8, ptr %arg2, align 1		; <i8> [#uses=3]
263	%tmp48208 = load i8, ptr %arg1, align 1		; <i8> [#uses=2]
264	%tmp1.i197210 = icmp eq i8 %tmp48208, 0		; <i1> [#uses=1]
265	%tmp4.i212 = icmp eq i8 %tmp46207, 0		; <i1> [#uses=1]
266	%tmp7.i198213 = or i1 %tmp1.i197210, %tmp4.i212		; <i1> [#uses=1]
267	br i1 %tmp7.i198213, label %cond_true.i200, label %cond_next17.i
268
269cond_false.i:		; preds = %bb35
270	%tmp42 = load i8, ptr %arg1, align 1		; <i8> [#uses=3]
271	%tmp7.i = udiv i8 %tmp42, %tmp40		; <i8> [#uses=2]
272	%tmp1.i197 = icmp eq i8 %tmp42, 0		; <i1> [#uses=1]
273	%tmp7.i198 = or i1 %tmp1.i197, %tmp1.i		; <i1> [#uses=1]
274	br i1 %tmp7.i198, label %cond_true.i200, label %cond_next17.i
275
276cond_true.i200:		; preds = %cond_false.i, %cond_true.i
277	%out.0 = phi i8 [ 0, %cond_true.i ], [ %tmp7.i, %cond_false.i ]		; <i8> [#uses=2]
278	%tmp46202.0 = phi i8 [ %tmp46207, %cond_true.i ], [ %tmp40, %cond_false.i ]		; <i8> [#uses=1]
279	%tmp11.i199 = icmp eq i8 %tmp46202.0, 0		; <i1> [#uses=1]
280	br i1 %tmp11.i199, label %cond_true14.i, label %ubyte_ctype_remainder.exit
281
282cond_true14.i:		; preds = %cond_true.i200
283	%tmp15.i = call i32 @feraiseexcept( i32 4 )		; <i32> [#uses=0]
284	br label %ubyte_ctype_remainder.exit
285
286cond_next17.i:		; preds = %cond_false.i, %cond_true.i
287	%out.1 = phi i8 [ 0, %cond_true.i ], [ %tmp7.i, %cond_false.i ]		; <i8> [#uses=1]
288	%tmp46202.1 = phi i8 [ %tmp46207, %cond_true.i ], [ %tmp40, %cond_false.i ]		; <i8> [#uses=1]
289	%tmp48205.1 = phi i8 [ %tmp48208, %cond_true.i ], [ %tmp42, %cond_false.i ]		; <i8> [#uses=1]
290	%tmp20.i = urem i8 %tmp48205.1, %tmp46202.1		; <i8> [#uses=1]
291	br label %ubyte_ctype_remainder.exit
292
293ubyte_ctype_remainder.exit:		; preds = %cond_next17.i, %cond_true14.i, %cond_true.i200
294	%out2.0 = phi i8 [ %tmp20.i, %cond_next17.i ], [ 0, %cond_true14.i ], [ 0, %cond_true.i200 ]		; <i8> [#uses=1]
295	%out.2 = phi i8 [ %out.1, %cond_next17.i ], [ %out.0, %cond_true14.i ], [ %out.0, %cond_true.i200 ]		; <i8> [#uses=1]
296	%tmp52 = load ptr, ptr @PyUFunc_API, align 8		; <ptr> [#uses=1]
297	%tmp53 = getelementptr ptr, ptr %tmp52, i64 28		; <ptr> [#uses=1]
298	%tmp54 = load ptr, ptr %tmp53		; <ptr> [#uses=1]
299	%tmp56 = call i32 %tmp54( )		; <i32> [#uses=2]
300	%tmp58 = icmp eq i32 %tmp56, 0		; <i1> [#uses=1]
301	br i1 %tmp58, label %cond_next89, label %cond_true61
302
303cond_true61:		; preds = %ubyte_ctype_remainder.exit
304	%tmp62 = load ptr, ptr @PyUFunc_API, align 8		; <ptr> [#uses=1]
305	%tmp63 = getelementptr ptr, ptr %tmp62, i64 25		; <ptr> [#uses=1]
306	%tmp64 = load ptr, ptr %tmp63		; <ptr> [#uses=1]
307	%tmp67 = call i32 %tmp64( ptr @.str5, ptr %bufsize, ptr %errmask, ptr %errobj )		; <i32> [#uses=1]
308	%tmp68 = icmp slt i32 %tmp67, 0		; <i1> [#uses=1]
309	br i1 %tmp68, label %UnifiedReturnBlock, label %cond_next73
310
311cond_next73:		; preds = %cond_true61
312	store i32 1, ptr %first, align 4
313	%tmp74 = load ptr, ptr @PyUFunc_API, align 8		; <ptr> [#uses=1]
314	%tmp75 = getelementptr ptr, ptr %tmp74, i64 29		; <ptr> [#uses=1]
315	%tmp76 = load ptr, ptr %tmp75		; <ptr> [#uses=1]
316	%tmp79 = load ptr, ptr %errobj, align 8		; <ptr> [#uses=1]
317	%tmp80 = load i32, ptr %errmask, align 4		; <i32> [#uses=1]
318	%tmp82 = call i32 %tmp76( i32 %tmp80, ptr %tmp79, i32 %tmp56, ptr %first )		; <i32> [#uses=1]
319	%tmp83 = icmp eq i32 %tmp82, 0		; <i1> [#uses=1]
320	br i1 %tmp83, label %cond_next89, label %UnifiedReturnBlock
321
322cond_next89:		; preds = %cond_next73, %ubyte_ctype_remainder.exit
323	%tmp90 = call ptr @PyTuple_New( i64 2 )		; <ptr> [#uses=9]
324	%tmp92 = icmp eq ptr %tmp90, null		; <i1> [#uses=1]
325	br i1 %tmp92, label %UnifiedReturnBlock, label %cond_next97
326
327cond_next97:		; preds = %cond_next89
328	%tmp98 = load ptr, ptr @PyArray_API, align 8		; <ptr> [#uses=1]
329	%tmp99 = getelementptr ptr, ptr %tmp98, i64 25		; <ptr> [#uses=1]
330	%tmp100 = load ptr, ptr %tmp99		; <ptr> [#uses=1]
331	%tmp102 = getelementptr %struct._typeobject, ptr %tmp100, i32 0, i32 38		; <ptr> [#uses=1]
332	%tmp103 = load ptr, ptr %tmp102		; <ptr> [#uses=1]
333	%tmp108 = call ptr %tmp103( ptr %tmp100, i64 0 )		; <ptr> [#uses=3]
334	%tmp110 = icmp eq ptr %tmp108, null		; <i1> [#uses=1]
335	br i1 %tmp110, label %cond_true113, label %cond_next135
336
337cond_true113:		; preds = %cond_next97
338	%tmp115 = getelementptr %struct.PyObject, ptr %tmp90, i32 0, i32 0		; <ptr> [#uses=2]
339	%tmp116 = load i64, ptr %tmp115		; <i64> [#uses=1]
340	%tmp117 = add i64 %tmp116, -1		; <i64> [#uses=2]
341	store i64 %tmp117, ptr %tmp115
342	%tmp123 = icmp eq i64 %tmp117, 0		; <i1> [#uses=1]
343	br i1 %tmp123, label %cond_true126, label %UnifiedReturnBlock
344
345cond_true126:		; preds = %cond_true113
346	%tmp128 = getelementptr %struct.PyObject, ptr %tmp90, i32 0, i32 1		; <ptr> [#uses=1]
347	%tmp129 = load ptr, ptr %tmp128		; <ptr> [#uses=1]
348	%tmp130 = getelementptr %struct._typeobject, ptr %tmp129, i32 0, i32 6		; <ptr> [#uses=1]
349	%tmp131 = load ptr, ptr %tmp130		; <ptr> [#uses=1]
350	call void %tmp131( ptr %tmp90 )
351	ret ptr null
352
353cond_next135:		; preds = %cond_next97
354	%tmp139 = getelementptr %struct.PyBoolScalarObject, ptr %tmp108, i32 0, i32 2		; <ptr> [#uses=1]
355	store i8 %out.2, ptr %tmp139
356	%tmp143 = getelementptr %struct.PyTupleObject, ptr %tmp90, i32 0, i32 3, i64 0		; <ptr> [#uses=1]
357	store ptr %tmp108, ptr %tmp143
358	%tmp145 = load ptr, ptr @PyArray_API, align 8		; <ptr> [#uses=1]
359	%tmp146 = getelementptr ptr, ptr %tmp145, i64 25		; <ptr> [#uses=1]
360	%tmp147 = load ptr, ptr %tmp146		; <ptr> [#uses=1]
361	%tmp149 = getelementptr %struct._typeobject, ptr %tmp147, i32 0, i32 38		; <ptr> [#uses=1]
362	%tmp150 = load ptr, ptr %tmp149		; <ptr> [#uses=1]
363	%tmp155 = call ptr %tmp150( ptr %tmp147, i64 0 )		; <ptr> [#uses=3]
364	%tmp157 = icmp eq ptr %tmp155, null		; <i1> [#uses=1]
365	br i1 %tmp157, label %cond_true160, label %cond_next182
366
367cond_true160:		; preds = %cond_next135
368	%tmp162 = getelementptr %struct.PyObject, ptr %tmp90, i32 0, i32 0		; <ptr> [#uses=2]
369	%tmp163 = load i64, ptr %tmp162		; <i64> [#uses=1]
370	%tmp164 = add i64 %tmp163, -1		; <i64> [#uses=2]
371	store i64 %tmp164, ptr %tmp162
372	%tmp170 = icmp eq i64 %tmp164, 0		; <i1> [#uses=1]
373	br i1 %tmp170, label %cond_true173, label %UnifiedReturnBlock
374
375cond_true173:		; preds = %cond_true160
376	%tmp175 = getelementptr %struct.PyObject, ptr %tmp90, i32 0, i32 1		; <ptr> [#uses=1]
377	%tmp176 = load ptr, ptr %tmp175		; <ptr> [#uses=1]
378	%tmp177 = getelementptr %struct._typeobject, ptr %tmp176, i32 0, i32 6		; <ptr> [#uses=1]
379	%tmp178 = load ptr, ptr %tmp177		; <ptr> [#uses=1]
380	call void %tmp178( ptr %tmp90 )
381	ret ptr null
382
383cond_next182:		; preds = %cond_next135
384	%tmp186 = getelementptr %struct.PyBoolScalarObject, ptr %tmp155, i32 0, i32 2		; <ptr> [#uses=1]
385	store i8 %out2.0, ptr %tmp186
386	%tmp190 = getelementptr %struct.PyTupleObject, ptr %tmp90, i32 0, i32 3, i64 1		; <ptr> [#uses=1]
387	store ptr %tmp155, ptr %tmp190
388	ret ptr %tmp90
389
390UnifiedReturnBlock:		; preds = %cond_true160, %cond_true113, %cond_next89, %cond_next73, %cond_true61, %bb17
391	ret ptr null
392}
393
394declare i32 @feraiseexcept(i32)
395
396declare fastcc i32 @_ubyte_convert_to_ctype(ptr, ptr)
397
398declare ptr @PyErr_Occurred()
399
400declare ptr @PyTuple_New(i64)
401