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