[opaque pointer type] Add textual IR support for explicit type parameter to gep operator
[oota-llvm.git] / test / CodeGen / X86 / 2007-08-09-IllegalX86-64Asm.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin | not grep "movb   %ah, %r"
2
3         %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 }
4         %struct.PyBoolScalarObject = type { i64, %struct._typeobject*, i8 }
5         %struct.PyBufferProcs = type { i64 (%struct.PyObject*, i64, i8**)*, i64 (%struct.PyObject*, i64, i8**)*, i64 (%struct.PyObject*, i64*)*, i64 (%struct.PyObject*, i64, i8**)* }
6         %struct.PyGetSetDef = type { i8*, %struct.PyObject* (%struct.PyObject*, i8*)*, i32 (%struct.PyObject*, %struct.PyObject*, i8*)*, i8*, i8* }
7         %struct.PyMappingMethods = type { i64 (%struct.PyObject*)*, %struct.PyObject* (%struct.PyObject*, %struct.PyObject*)*, i32 (%struct.PyObject*, %struct.PyObject*, %struct.PyObject*)* }
8         %struct.PyMemberDef = type opaque
9         %struct.PyMethodDef = type { i8*, %struct.PyObject* (%struct.PyObject*, %struct.PyObject*)*, i32, i8* }
10         %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*)* }
11         %struct.PyObject = type { i64, %struct._typeobject* }
12         %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)* }
13         %struct.PyTupleObject = type { i64, %struct._typeobject*, i64, [1 x %struct.PyObject*] }
14         %struct.__sFILEX = type opaque
15         %struct.__sbuf = type { i8*, i32 }
16         %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*)* }
17 @PyArray_API = external global i8**             ; <i8***> [#uses=4]
18 @PyUFunc_API = external global i8**             ; <i8***> [#uses=4]
19 @.str5 = external constant [14 x i8]            ; <[14 x i8]*> [#uses=1]
20
21 define %struct.PyObject* @ubyte_divmod(%struct.PyObject* %a, %struct.PyObject* %b) {
22 entry:
23         %arg1 = alloca i8, align 1              ; <i8*> [#uses=3]
24         %arg2 = alloca i8, align 1              ; <i8*> [#uses=3]
25         %first = alloca i32, align 4            ; <i32*> [#uses=2]
26         %bufsize = alloca i32, align 4          ; <i32*> [#uses=1]
27         %errmask = alloca i32, align 4          ; <i32*> [#uses=2]
28         %errobj = alloca %struct.PyObject*, align 8             ; <%struct.PyObject**> [#uses=2]
29         %tmp3.i = call fastcc i32 @_ubyte_convert_to_ctype( %struct.PyObject* %a, i8* %arg1 )           ; <i32> [#uses=2]
30         %tmp5.i = icmp slt i32 %tmp3.i, 0               ; <i1> [#uses=1]
31         br i1 %tmp5.i, label %_ubyte_convert2_to_ctypes.exit, label %cond_next.i
32
33 cond_next.i:            ; preds = %entry
34         %tmp11.i = call fastcc i32 @_ubyte_convert_to_ctype( %struct.PyObject* %b, i8* %arg2 )          ; <i32> [#uses=2]
35         %tmp13.i = icmp slt i32 %tmp11.i, 0             ; <i1> [#uses=1]
36         %retval.i = select i1 %tmp13.i, i32 %tmp11.i, i32 0             ; <i32> [#uses=1]
37         switch i32 %retval.i, label %bb35 [
38                  i32 -2, label %bb17
39                  i32 -1, label %bb4
40         ]
41
42 _ubyte_convert2_to_ctypes.exit:         ; preds = %entry
43         switch i32 %tmp3.i, label %bb35 [
44                  i32 -2, label %bb17
45                  i32 -1, label %bb4
46         ]
47
48 bb4:            ; preds = %_ubyte_convert2_to_ctypes.exit, %cond_next.i
49         %tmp5 = load i8**, i8*** @PyArray_API, align 8          ; <i8**> [#uses=1]
50         %tmp6 = getelementptr i8*, i8** %tmp5, i64 2            ; <i8**> [#uses=1]
51         %tmp7 = load i8*, i8** %tmp6            ; <i8*> [#uses=1]
52         %tmp78 = bitcast i8* %tmp7 to %struct._typeobject*              ; <%struct._typeobject*> [#uses=1]
53         %tmp9 = getelementptr %struct._typeobject, %struct._typeobject* %tmp78, i32 0, i32 12           ; <%struct.PyNumberMethods**> [#uses=1]
54         %tmp10 = load %struct.PyNumberMethods*, %struct.PyNumberMethods** %tmp9         ; <%struct.PyNumberMethods*> [#uses=1]
55         %tmp11 = getelementptr %struct.PyNumberMethods, %struct.PyNumberMethods* %tmp10, i32 0, i32 5           ; <%struct.PyObject* (%struct.PyObject*, %struct.PyObject*)**> [#uses=1]
56         %tmp12 = load %struct.PyObject* (%struct.PyObject*, %struct.PyObject*)*, %struct.PyObject* (%struct.PyObject*, %struct.PyObject*)** %tmp11              ; <%struct.PyObject* (%struct.PyObject*, %struct.PyObject*)*> [#uses=1]
57         %tmp15 = call %struct.PyObject* %tmp12( %struct.PyObject* %a, %struct.PyObject* %b )            ; <%struct.PyObject*> [#uses=1]
58         ret %struct.PyObject* %tmp15
59
60 bb17:           ; preds = %_ubyte_convert2_to_ctypes.exit, %cond_next.i
61         %tmp18 = call %struct.PyObject* @PyErr_Occurred( )              ; <%struct.PyObject*> [#uses=1]
62         %tmp19 = icmp eq %struct.PyObject* %tmp18, null         ; <i1> [#uses=1]
63         br i1 %tmp19, label %cond_next, label %UnifiedReturnBlock
64
65 cond_next:              ; preds = %bb17
66         %tmp22 = load i8**, i8*** @PyArray_API, align 8         ; <i8**> [#uses=1]
67         %tmp23 = getelementptr i8*, i8** %tmp22, i64 10         ; <i8**> [#uses=1]
68         %tmp24 = load i8*, i8** %tmp23          ; <i8*> [#uses=1]
69         %tmp2425 = bitcast i8* %tmp24 to %struct._typeobject*           ; <%struct._typeobject*> [#uses=1]
70         %tmp26 = getelementptr %struct._typeobject, %struct._typeobject* %tmp2425, i32 0, i32 12                ; <%struct.PyNumberMethods**> [#uses=1]
71         %tmp27 = load %struct.PyNumberMethods*, %struct.PyNumberMethods** %tmp26                ; <%struct.PyNumberMethods*> [#uses=1]
72         %tmp28 = getelementptr %struct.PyNumberMethods, %struct.PyNumberMethods* %tmp27, i32 0, i32 5           ; <%struct.PyObject* (%struct.PyObject*, %struct.PyObject*)**> [#uses=1]
73         %tmp29 = load %struct.PyObject* (%struct.PyObject*, %struct.PyObject*)*, %struct.PyObject* (%struct.PyObject*, %struct.PyObject*)** %tmp28              ; <%struct.PyObject* (%struct.PyObject*, %struct.PyObject*)*> [#uses=1]
74         %tmp32 = call %struct.PyObject* %tmp29( %struct.PyObject* %a, %struct.PyObject* %b )            ; <%struct.PyObject*> [#uses=1]
75         ret %struct.PyObject* %tmp32
76
77 bb35:           ; preds = %_ubyte_convert2_to_ctypes.exit, %cond_next.i
78         %tmp36 = load i8**, i8*** @PyUFunc_API, align 8         ; <i8**> [#uses=1]
79         %tmp37 = getelementptr i8*, i8** %tmp36, i64 27         ; <i8**> [#uses=1]
80         %tmp38 = load i8*, i8** %tmp37          ; <i8*> [#uses=1]
81         %tmp3839 = bitcast i8* %tmp38 to void ()*               ; <void ()*> [#uses=1]
82         call void %tmp3839( )
83         %tmp40 = load i8, i8* %arg2, align 1            ; <i8> [#uses=4]
84         %tmp1.i = icmp eq i8 %tmp40, 0          ; <i1> [#uses=2]
85         br i1 %tmp1.i, label %cond_true.i, label %cond_false.i
86
87 cond_true.i:            ; preds = %bb35
88         %tmp3.i196 = call i32 @feraiseexcept( i32 4 )           ; <i32> [#uses=0]
89         %tmp46207 = load i8, i8* %arg2, align 1         ; <i8> [#uses=3]
90         %tmp48208 = load i8, i8* %arg1, align 1         ; <i8> [#uses=2]
91         %tmp1.i197210 = icmp eq i8 %tmp48208, 0         ; <i1> [#uses=1]
92         %tmp4.i212 = icmp eq i8 %tmp46207, 0            ; <i1> [#uses=1]
93         %tmp7.i198213 = or i1 %tmp1.i197210, %tmp4.i212         ; <i1> [#uses=1]
94         br i1 %tmp7.i198213, label %cond_true.i200, label %cond_next17.i
95
96 cond_false.i:           ; preds = %bb35
97         %tmp42 = load i8, i8* %arg1, align 1            ; <i8> [#uses=3]
98         %tmp7.i = udiv i8 %tmp42, %tmp40                ; <i8> [#uses=2]
99         %tmp1.i197 = icmp eq i8 %tmp42, 0               ; <i1> [#uses=1]
100         %tmp7.i198 = or i1 %tmp1.i197, %tmp1.i          ; <i1> [#uses=1]
101         br i1 %tmp7.i198, label %cond_true.i200, label %cond_next17.i
102
103 cond_true.i200:         ; preds = %cond_false.i, %cond_true.i
104         %out.0 = phi i8 [ 0, %cond_true.i ], [ %tmp7.i, %cond_false.i ]         ; <i8> [#uses=2]
105         %tmp46202.0 = phi i8 [ %tmp46207, %cond_true.i ], [ %tmp40, %cond_false.i ]             ; <i8> [#uses=1]
106         %tmp11.i199 = icmp eq i8 %tmp46202.0, 0         ; <i1> [#uses=1]
107         br i1 %tmp11.i199, label %cond_true14.i, label %ubyte_ctype_remainder.exit
108
109 cond_true14.i:          ; preds = %cond_true.i200
110         %tmp15.i = call i32 @feraiseexcept( i32 4 )             ; <i32> [#uses=0]
111         br label %ubyte_ctype_remainder.exit
112
113 cond_next17.i:          ; preds = %cond_false.i, %cond_true.i
114         %out.1 = phi i8 [ 0, %cond_true.i ], [ %tmp7.i, %cond_false.i ]         ; <i8> [#uses=1]
115         %tmp46202.1 = phi i8 [ %tmp46207, %cond_true.i ], [ %tmp40, %cond_false.i ]             ; <i8> [#uses=1]
116         %tmp48205.1 = phi i8 [ %tmp48208, %cond_true.i ], [ %tmp42, %cond_false.i ]             ; <i8> [#uses=1]
117         %tmp20.i = urem i8 %tmp48205.1, %tmp46202.1             ; <i8> [#uses=1]
118         br label %ubyte_ctype_remainder.exit
119
120 ubyte_ctype_remainder.exit:             ; preds = %cond_next17.i, %cond_true14.i, %cond_true.i200
121         %out2.0 = phi i8 [ %tmp20.i, %cond_next17.i ], [ 0, %cond_true14.i ], [ 0, %cond_true.i200 ]            ; <i8> [#uses=1]
122         %out.2 = phi i8 [ %out.1, %cond_next17.i ], [ %out.0, %cond_true14.i ], [ %out.0, %cond_true.i200 ]             ; <i8> [#uses=1]
123         %tmp52 = load i8**, i8*** @PyUFunc_API, align 8         ; <i8**> [#uses=1]
124         %tmp53 = getelementptr i8*, i8** %tmp52, i64 28         ; <i8**> [#uses=1]
125         %tmp54 = load i8*, i8** %tmp53          ; <i8*> [#uses=1]
126         %tmp5455 = bitcast i8* %tmp54 to i32 ()*                ; <i32 ()*> [#uses=1]
127         %tmp56 = call i32 %tmp5455( )           ; <i32> [#uses=2]
128         %tmp58 = icmp eq i32 %tmp56, 0          ; <i1> [#uses=1]
129         br i1 %tmp58, label %cond_next89, label %cond_true61
130
131 cond_true61:            ; preds = %ubyte_ctype_remainder.exit
132         %tmp62 = load i8**, i8*** @PyUFunc_API, align 8         ; <i8**> [#uses=1]
133         %tmp63 = getelementptr i8*, i8** %tmp62, i64 25         ; <i8**> [#uses=1]
134         %tmp64 = load i8*, i8** %tmp63          ; <i8*> [#uses=1]
135         %tmp6465 = bitcast i8* %tmp64 to i32 (i8*, i32*, i32*, %struct.PyObject**)*             ; <i32 (i8*, i32*, i32*, %struct.PyObject**)*> [#uses=1]
136         %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]
137         %tmp68 = icmp slt i32 %tmp67, 0         ; <i1> [#uses=1]
138         br i1 %tmp68, label %UnifiedReturnBlock, label %cond_next73
139
140 cond_next73:            ; preds = %cond_true61
141         store i32 1, i32* %first, align 4
142         %tmp74 = load i8**, i8*** @PyUFunc_API, align 8         ; <i8**> [#uses=1]
143         %tmp75 = getelementptr i8*, i8** %tmp74, i64 29         ; <i8**> [#uses=1]
144         %tmp76 = load i8*, i8** %tmp75          ; <i8*> [#uses=1]
145         %tmp7677 = bitcast i8* %tmp76 to i32 (i32, %struct.PyObject*, i32, i32*)*               ; <i32 (i32, %struct.PyObject*, i32, i32*)*> [#uses=1]
146         %tmp79 = load %struct.PyObject*, %struct.PyObject** %errobj, align 8            ; <%struct.PyObject*> [#uses=1]
147         %tmp80 = load i32, i32* %errmask, align 4               ; <i32> [#uses=1]
148         %tmp82 = call i32 %tmp7677( i32 %tmp80, %struct.PyObject* %tmp79, i32 %tmp56, i32* %first )             ; <i32> [#uses=1]
149         %tmp83 = icmp eq i32 %tmp82, 0          ; <i1> [#uses=1]
150         br i1 %tmp83, label %cond_next89, label %UnifiedReturnBlock
151
152 cond_next89:            ; preds = %cond_next73, %ubyte_ctype_remainder.exit
153         %tmp90 = call %struct.PyObject* @PyTuple_New( i64 2 )           ; <%struct.PyObject*> [#uses=9]
154         %tmp92 = icmp eq %struct.PyObject* %tmp90, null         ; <i1> [#uses=1]
155         br i1 %tmp92, label %UnifiedReturnBlock, label %cond_next97
156
157 cond_next97:            ; preds = %cond_next89
158         %tmp98 = load i8**, i8*** @PyArray_API, align 8         ; <i8**> [#uses=1]
159         %tmp99 = getelementptr i8*, i8** %tmp98, i64 25         ; <i8**> [#uses=1]
160         %tmp100 = load i8*, i8** %tmp99         ; <i8*> [#uses=1]
161         %tmp100101 = bitcast i8* %tmp100 to %struct._typeobject*                ; <%struct._typeobject*> [#uses=2]
162         %tmp102 = getelementptr %struct._typeobject, %struct._typeobject* %tmp100101, i32 0, i32 38             ; <%struct.PyObject* (%struct._typeobject*, i64)**> [#uses=1]
163         %tmp103 = load %struct.PyObject* (%struct._typeobject*, i64)*, %struct.PyObject* (%struct._typeobject*, i64)** %tmp102          ; <%struct.PyObject* (%struct._typeobject*, i64)*> [#uses=1]
164         %tmp108 = call %struct.PyObject* %tmp103( %struct._typeobject* %tmp100101, i64 0 )              ; <%struct.PyObject*> [#uses=3]
165         %tmp110 = icmp eq %struct.PyObject* %tmp108, null               ; <i1> [#uses=1]
166         br i1 %tmp110, label %cond_true113, label %cond_next135
167
168 cond_true113:           ; preds = %cond_next97
169         %tmp115 = getelementptr %struct.PyObject, %struct.PyObject* %tmp90, i32 0, i32 0                ; <i64*> [#uses=2]
170         %tmp116 = load i64, i64* %tmp115                ; <i64> [#uses=1]
171         %tmp117 = add i64 %tmp116, -1           ; <i64> [#uses=2]
172         store i64 %tmp117, i64* %tmp115
173         %tmp123 = icmp eq i64 %tmp117, 0                ; <i1> [#uses=1]
174         br i1 %tmp123, label %cond_true126, label %UnifiedReturnBlock
175
176 cond_true126:           ; preds = %cond_true113
177         %tmp128 = getelementptr %struct.PyObject, %struct.PyObject* %tmp90, i32 0, i32 1                ; <%struct._typeobject**> [#uses=1]
178         %tmp129 = load %struct._typeobject*, %struct._typeobject** %tmp128              ; <%struct._typeobject*> [#uses=1]
179         %tmp130 = getelementptr %struct._typeobject, %struct._typeobject* %tmp129, i32 0, i32 6         ; <void (%struct.PyObject*)**> [#uses=1]
180         %tmp131 = load void (%struct.PyObject*)*, void (%struct.PyObject*)** %tmp130            ; <void (%struct.PyObject*)*> [#uses=1]
181         call void %tmp131( %struct.PyObject* %tmp90 )
182         ret %struct.PyObject* null
183
184 cond_next135:           ; preds = %cond_next97
185         %tmp136137 = bitcast %struct.PyObject* %tmp108 to %struct.PyBoolScalarObject*           ; <%struct.PyBoolScalarObject*> [#uses=1]
186         %tmp139 = getelementptr %struct.PyBoolScalarObject, %struct.PyBoolScalarObject* %tmp136137, i32 0, i32 2                ; <i8*> [#uses=1]
187         store i8 %out.2, i8* %tmp139
188         %tmp140141 = bitcast %struct.PyObject* %tmp90 to %struct.PyTupleObject*         ; <%struct.PyTupleObject*> [#uses=2]
189         %tmp143 = getelementptr %struct.PyTupleObject, %struct.PyTupleObject* %tmp140141, i32 0, i32 3, i64 0           ; <%struct.PyObject**> [#uses=1]
190         store %struct.PyObject* %tmp108, %struct.PyObject** %tmp143
191         %tmp145 = load i8**, i8*** @PyArray_API, align 8                ; <i8**> [#uses=1]
192         %tmp146 = getelementptr i8*, i8** %tmp145, i64 25               ; <i8**> [#uses=1]
193         %tmp147 = load i8*, i8** %tmp146                ; <i8*> [#uses=1]
194         %tmp147148 = bitcast i8* %tmp147 to %struct._typeobject*                ; <%struct._typeobject*> [#uses=2]
195         %tmp149 = getelementptr %struct._typeobject, %struct._typeobject* %tmp147148, i32 0, i32 38             ; <%struct.PyObject* (%struct._typeobject*, i64)**> [#uses=1]
196         %tmp150 = load %struct.PyObject* (%struct._typeobject*, i64)*, %struct.PyObject* (%struct._typeobject*, i64)** %tmp149          ; <%struct.PyObject* (%struct._typeobject*, i64)*> [#uses=1]
197         %tmp155 = call %struct.PyObject* %tmp150( %struct._typeobject* %tmp147148, i64 0 )              ; <%struct.PyObject*> [#uses=3]
198         %tmp157 = icmp eq %struct.PyObject* %tmp155, null               ; <i1> [#uses=1]
199         br i1 %tmp157, label %cond_true160, label %cond_next182
200
201 cond_true160:           ; preds = %cond_next135
202         %tmp162 = getelementptr %struct.PyObject, %struct.PyObject* %tmp90, i32 0, i32 0                ; <i64*> [#uses=2]
203         %tmp163 = load i64, i64* %tmp162                ; <i64> [#uses=1]
204         %tmp164 = add i64 %tmp163, -1           ; <i64> [#uses=2]
205         store i64 %tmp164, i64* %tmp162
206         %tmp170 = icmp eq i64 %tmp164, 0                ; <i1> [#uses=1]
207         br i1 %tmp170, label %cond_true173, label %UnifiedReturnBlock
208
209 cond_true173:           ; preds = %cond_true160
210         %tmp175 = getelementptr %struct.PyObject, %struct.PyObject* %tmp90, i32 0, i32 1                ; <%struct._typeobject**> [#uses=1]
211         %tmp176 = load %struct._typeobject*, %struct._typeobject** %tmp175              ; <%struct._typeobject*> [#uses=1]
212         %tmp177 = getelementptr %struct._typeobject, %struct._typeobject* %tmp176, i32 0, i32 6         ; <void (%struct.PyObject*)**> [#uses=1]
213         %tmp178 = load void (%struct.PyObject*)*, void (%struct.PyObject*)** %tmp177            ; <void (%struct.PyObject*)*> [#uses=1]
214         call void %tmp178( %struct.PyObject* %tmp90 )
215         ret %struct.PyObject* null
216
217 cond_next182:           ; preds = %cond_next135
218         %tmp183184 = bitcast %struct.PyObject* %tmp155 to %struct.PyBoolScalarObject*           ; <%struct.PyBoolScalarObject*> [#uses=1]
219         %tmp186 = getelementptr %struct.PyBoolScalarObject, %struct.PyBoolScalarObject* %tmp183184, i32 0, i32 2                ; <i8*> [#uses=1]
220         store i8 %out2.0, i8* %tmp186
221         %tmp190 = getelementptr %struct.PyTupleObject, %struct.PyTupleObject* %tmp140141, i32 0, i32 3, i64 1           ; <%struct.PyObject**> [#uses=1]
222         store %struct.PyObject* %tmp155, %struct.PyObject** %tmp190
223         ret %struct.PyObject* %tmp90
224
225 UnifiedReturnBlock:             ; preds = %cond_true160, %cond_true113, %cond_next89, %cond_next73, %cond_true61, %bb17
226         ret %struct.PyObject* null
227 }
228
229 declare i32 @feraiseexcept(i32)
230
231 declare fastcc i32 @_ubyte_convert_to_ctype(%struct.PyObject*, i8*)
232
233 declare %struct.PyObject* @PyErr_Occurred()
234
235 declare %struct.PyObject* @PyTuple_New(i64)