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