[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / X86 / 2007-08-09-IllegalX86-64Asm.ll
blob28b4541c1bfc7f5dd7ab94b021f96e88e6f2e656
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
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]
22 define 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
198 entry:
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
209 cond_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         ]
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         ]
224 bb4:            ; 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
235 bb17:           ; 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
240 cond_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
251 bb35:           ; 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
260 cond_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
269 cond_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
276 cond_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
282 cond_true14.i:          ; preds = %cond_true.i200
283         %tmp15.i = call i32 @feraiseexcept( i32 4 )             ; <i32> [#uses=0]
284         br label %ubyte_ctype_remainder.exit
286 cond_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
293 ubyte_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
303 cond_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
311 cond_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
322 cond_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
327 cond_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
337 cond_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
345 cond_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
353 cond_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
367 cond_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
375 cond_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
383 cond_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
390 UnifiedReturnBlock:             ; preds = %cond_true160, %cond_true113, %cond_next89, %cond_next73, %cond_true61, %bb17
391         ret ptr null
394 declare i32 @feraiseexcept(i32)
396 declare fastcc i32 @_ubyte_convert_to_ctype(ptr, ptr)
398 declare ptr @PyErr_Occurred()
400 declare ptr @PyTuple_New(i64)