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