1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i386-apple-darwin | FileCheck %s
3; Make sure xorl operands are 32-bit registers.
4
5	%struct.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8* }
6	%struct.wxDateTime = type { %struct.wxLongLong }
7	%"struct.wxDateTime::TimeZone" = type { i32 }
8	%struct.wxLongLong = type { i64 }
9	%struct.wxString = type { %struct.wxStringBase }
10	%struct.wxStringBase = type { i32* }
11@.str = external constant [27 x i32]		; <[27 x i32]*> [#uses=1]
12@.str4 = external constant [14 x i32]		; <[14 x i32]*> [#uses=1]
13@_ZZNK10wxDateTime5GetTmERKNS_8TimeZoneEE12__FUNCTION__ = external constant [6 x i8]		; <[6 x i8]*> [#uses=1]
14@.str33 = external constant [29 x i32]		; <[29 x i32]*> [#uses=1]
15@.str89 = external constant [5 x i32]		; <[5 x i32]*> [#uses=1]
16
17define void @_ZNK10wxDateTime6FormatEPKwRKNS_8TimeZoneE(%struct.wxString* noalias sret  %agg.result, %struct.wxDateTime* %this, i32* %format, %"struct.wxDateTime::TimeZone"* %tz, i1 %foo) personality i32 (...)* @__gxx_personality_v0 {
18; CHECK-LABEL: _ZNK10wxDateTime6FormatEPKwRKNS_8TimeZoneE:
19; CHECK:       ## %bb.0: ## %entry
20; CHECK-NEXT:    pushl %ebp
21; CHECK-NEXT:    .cfi_def_cfa_offset 8
22; CHECK-NEXT:    pushl %ebx
23; CHECK-NEXT:    .cfi_def_cfa_offset 12
24; CHECK-NEXT:    pushl %edi
25; CHECK-NEXT:    .cfi_def_cfa_offset 16
26; CHECK-NEXT:    pushl %esi
27; CHECK-NEXT:    .cfi_def_cfa_offset 20
28; CHECK-NEXT:    subl $28, %esp
29; CHECK-NEXT:    .cfi_def_cfa_offset 48
30; CHECK-NEXT:    .cfi_offset %esi, -20
31; CHECK-NEXT:    .cfi_offset %edi, -16
32; CHECK-NEXT:    .cfi_offset %ebx, -12
33; CHECK-NEXT:    .cfi_offset %ebp, -8
34; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %esi
35; CHECK-NEXT:    movb {{[0-9]+}}(%esp), %bl
36; CHECK-NEXT:    testb $1, %bl
37; CHECK-NEXT:    je LBB0_27
38; CHECK-NEXT:  ## %bb.1: ## %bb116.i
39; CHECK-NEXT:    je LBB0_27
40; CHECK-NEXT:  ## %bb.2: ## %bb52.i.i
41; CHECK-NEXT:    testb $1, %bl
42; CHECK-NEXT:    je LBB0_27
43; CHECK-NEXT:  ## %bb.3: ## %bb142.i
44; CHECK-NEXT:    je LBB0_27
45; CHECK-NEXT:  ## %bb.4:
46; CHECK-NEXT:    movl L_.str89$non_lazy_ptr, %edi
47; CHECK-NEXT:    movb $1, %bh
48; CHECK-NEXT:    movl $274877907, %ebp ## imm = 0x10624DD3
49; CHECK-NEXT:    jmp LBB0_5
50; CHECK-NEXT:    .p2align 4, 0x90
51; CHECK-NEXT:  LBB0_23: ## %bb7806
52; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
53; CHECK-NEXT:  Ltmp16:
54; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
55; CHECK-NEXT:    movl $1, {{[0-9]+}}(%esp)
56; CHECK-NEXT:    movl $0, (%esp)
57; CHECK-NEXT:    calll __ZN12wxStringBase6appendEmw
58; CHECK-NEXT:  Ltmp17:
59; CHECK-NEXT:  LBB0_5: ## %bb3261
60; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1
61; CHECK-NEXT:    cmpl $37, 0
62; CHECK-NEXT:    jne LBB0_27
63; CHECK-NEXT:  ## %bb.6: ## %bb3306
64; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
65; CHECK-NEXT:  Ltmp0:
66; CHECK-NEXT:    movl %edi, {{[0-9]+}}(%esp)
67; CHECK-NEXT:    movl $0, (%esp)
68; CHECK-NEXT:    calll __ZN12wxStringBaseaSEPKw
69; CHECK-NEXT:  Ltmp1:
70; CHECK-NEXT:  ## %bb.7: ## %bb3314
71; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
72; CHECK-NEXT:    movl 0, %eax
73; CHECK-NEXT:    cmpl $121, %eax
74; CHECK-NEXT:    ja LBB0_27
75; CHECK-NEXT:  ## %bb.8: ## %bb3314
76; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
77; CHECK-NEXT:    jmpl *LJTI0_0(,%eax,4)
78; CHECK-NEXT:  LBB0_10: ## %bb5809
79; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
80; CHECK-NEXT:    xorl %eax, %eax
81; CHECK-NEXT:    testb %al, %al
82; CHECK-NEXT:    jne LBB0_27
83; CHECK-NEXT:  ## %bb.11: ## %bb5809
84; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
85; CHECK-NEXT:    testb %bh, %bh
86; CHECK-NEXT:    je LBB0_27
87; CHECK-NEXT:  ## %bb.12: ## %bb91.i8504
88; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
89; CHECK-NEXT:    testb $1, %bl
90; CHECK-NEXT:    je LBB0_14
91; CHECK-NEXT:  ## %bb.13: ## %bb155.i8541
92; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
93; CHECK-NEXT:  Ltmp4:
94; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
95; CHECK-NEXT:    movl $0, (%esp)
96; CHECK-NEXT:    calll _gmtime_r
97; CHECK-NEXT:  Ltmp5:
98; CHECK-NEXT:  LBB0_14: ## %bb182.i8560
99; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
100; CHECK-NEXT:    testb $1, %bl
101; CHECK-NEXT:    je LBB0_15
102; CHECK-NEXT:  ## %bb.17: ## %bb278.i8617
103; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
104; CHECK-NEXT:    je LBB0_19
105; CHECK-NEXT:  ## %bb.18: ## %bb440.i8663
106; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
107; CHECK-NEXT:  Ltmp6:
108; CHECK-NEXT:    movl L_.str4$non_lazy_ptr, %eax
109; CHECK-NEXT:    movl %eax, {{[0-9]+}}(%esp)
110; CHECK-NEXT:    movl L_.str33$non_lazy_ptr, %eax
111; CHECK-NEXT:    movl %eax, {{[0-9]+}}(%esp)
112; CHECK-NEXT:    movl L__ZZNK10wxDateTime5GetTmERKNS_8TimeZoneEE12__FUNCTION__$non_lazy_ptr, %eax
113; CHECK-NEXT:    movl %eax, {{[0-9]+}}(%esp)
114; CHECK-NEXT:    movl L_.str$non_lazy_ptr, %eax
115; CHECK-NEXT:    movl %eax, (%esp)
116; CHECK-NEXT:    movl $1717, {{[0-9]+}}(%esp) ## imm = 0x6B5
117; CHECK-NEXT:    calll __Z10wxOnAssertPKwiPKcS0_S0_
118; CHECK-NEXT:  Ltmp7:
119; CHECK-NEXT:  LBB0_19: ## %bb448.i8694
120; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
121; CHECK-NEXT:    xorl %eax, %eax
122; CHECK-NEXT:    jmp LBB0_20
123; CHECK-NEXT:  LBB0_15: ## %bb187.i8591
124; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
125; CHECK-NEXT:    jne LBB0_27
126; CHECK-NEXT:  ## %bb.16: ## %bb265.i8606
127; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
128; CHECK-NEXT:    xorl %eax, %eax
129; CHECK-NEXT:    imull %ebp
130; CHECK-NEXT:    movl %edx, %eax
131; CHECK-NEXT:    shrl $31, %eax
132; CHECK-NEXT:    shrl $6, %edx
133; CHECK-NEXT:    addl %eax, %edx
134; CHECK-NEXT:    imull $1000, %edx, %eax ## imm = 0x3E8
135; CHECK-NEXT:    negl %eax
136; CHECK-NEXT:  LBB0_20: ## %invcont5814
137; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
138; CHECK-NEXT:    movzwl %ax, %eax
139; CHECK-NEXT:  Ltmp8:
140; CHECK-NEXT:    movl %eax, {{[0-9]+}}(%esp)
141; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
142; CHECK-NEXT:    movl $0, (%esp)
143; CHECK-NEXT:    calll __ZN8wxString6FormatEPKwz
144; CHECK-NEXT:    subl $4, %esp
145; CHECK-NEXT:  Ltmp9:
146; CHECK-NEXT:  ## %bb.21: ## %invcont5831
147; CHECK-NEXT:    ## in Loop: Header=BB0_5 Depth=1
148; CHECK-NEXT:  Ltmp10:
149; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
150; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
151; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
152; CHECK-NEXT:    movl $0, (%esp)
153; CHECK-NEXT:    calll __ZN12wxStringBase10ConcatSelfEmPKwm
154; CHECK-NEXT:  Ltmp11:
155; CHECK-NEXT:    jmp LBB0_5
156; CHECK-NEXT:  LBB0_22: ## %bb5968
157; CHECK-NEXT:  Ltmp2:
158; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
159; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)
160; CHECK-NEXT:    movl $0, (%esp)
161; CHECK-NEXT:    calll __ZN8wxString6FormatEPKwz
162; CHECK-NEXT:    subl $4, %esp
163; CHECK-NEXT:  Ltmp3:
164; CHECK-NEXT:    jmp LBB0_27
165; CHECK-NEXT:  LBB0_9: ## %bb5657
166; CHECK-NEXT:  Ltmp13:
167; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
168; CHECK-NEXT:    movl %eax, {{[0-9]+}}(%esp)
169; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
170; CHECK-NEXT:    movl %eax, (%esp)
171; CHECK-NEXT:    calll __ZNK10wxDateTime12GetDayOfYearERKNS_8TimeZoneE
172; CHECK-NEXT:  Ltmp14:
173; CHECK-NEXT:  LBB0_27: ## %bb115.critedge.i
174; CHECK-NEXT:    movl %esi, %eax
175; CHECK-NEXT:    addl $28, %esp
176; CHECK-NEXT:    popl %esi
177; CHECK-NEXT:    popl %edi
178; CHECK-NEXT:    popl %ebx
179; CHECK-NEXT:    popl %ebp
180; CHECK-NEXT:    retl $4
181; CHECK-NEXT:  LBB0_25: ## %lpad.loopexit.split-lp
182; CHECK-NEXT:  Ltmp15:
183; CHECK-NEXT:    jmp LBB0_27
184; CHECK-NEXT:  LBB0_26: ## %lpad8185
185; CHECK-NEXT:  Ltmp12:
186; CHECK-NEXT:    jmp LBB0_27
187; CHECK-NEXT:  LBB0_24: ## %lpad.loopexit
188; CHECK-NEXT:  Ltmp18:
189; CHECK-NEXT:    jmp LBB0_27
190; CHECK-NEXT:  Lfunc_end0:
191entry:
192	br i1 %foo, label %bb116.i, label %bb115.critedge.i
193bb115.critedge.i:		; preds = %entry
194	ret void
195bb116.i:		; preds = %entry
196	br i1 %foo, label %bb52.i.i, label %bb3118
197bb3118:		; preds = %bb116.i
198	ret void
199bb52.i.i:		; preds = %bb116.i
200	br i1 %foo, label %bb142.i, label %bb115.critedge.i.i
201bb115.critedge.i.i:		; preds = %bb52.i.i
202	ret void
203bb142.i:		; preds = %bb52.i.i
204	br i1 %foo, label %bb161.i, label %bb182.i
205bb161.i:		; preds = %bb142.i
206	br label %bb3261
207bb182.i:		; preds = %bb142.i
208	ret void
209bb3261:		; preds = %bb7834, %bb161.i
210	%tmp3263 = load i32, i32* null, align 4		; <i32> [#uses=1]
211	%tmp3264 = icmp eq i32 %tmp3263, 37		; <i1> [#uses=1]
212	br i1 %tmp3264, label %bb3306, label %bb3267
213bb3267:		; preds = %bb3261
214	ret void
215bb3306:		; preds = %bb3261
216	%tmp3310 = invoke %struct.wxStringBase* @_ZN12wxStringBaseaSEPKw( %struct.wxStringBase* null, i32* getelementptr ([5 x i32], [5 x i32]* @.str89, i32 0, i32 0) )
217			to label %bb3314 unwind label %lpad		; <%struct.wxStringBase*> [#uses=0]
218bb3314:		; preds = %bb3306
219	%tmp3316 = load i32, i32* null, align 4		; <i32> [#uses=1]
220	switch i32 %tmp3316, label %bb7595 [
221		 i32 0, label %bb7819
222		 i32 37, label %bb7806
223		 i32 66, label %bb3477
224		 i32 72, label %bb5334
225		 i32 73, label %bb5484
226		 i32 77, label %bb6118
227		 i32 83, label %bb6406
228		 i32 85, label %bb6556
229		 i32 87, label %bb6708
230		 i32 89, label %bb7308
231		 i32 98, label %bb3477
232		 i32 99, label %bb3626
233		 i32 100, label %bb5184
234		 i32 106, label %bb5657
235		 i32 108, label %bb5809
236		 i32 109, label %bb5968
237		 i32 119, label %bb6860
238		 i32 120, label %bb3626
239		 i32 121, label %bb7158
240	]
241bb3477:		; preds = %bb3314, %bb3314
242	ret void
243bb3626:		; preds = %bb3314, %bb3314
244	ret void
245bb5184:		; preds = %bb3314
246	ret void
247bb5334:		; preds = %bb3314
248	ret void
249bb5484:		; preds = %bb3314
250	ret void
251bb5657:		; preds = %bb3314
252	%tmp5661 = invoke zeroext i16 @_ZNK10wxDateTime12GetDayOfYearERKNS_8TimeZoneE( %struct.wxDateTime* %this, %"struct.wxDateTime::TimeZone"* %tz )
253			to label %invcont5660 unwind label %lpad		; <i16> [#uses=0]
254invcont5660:		; preds = %bb5657
255	ret void
256bb5809:		; preds = %bb3314
257	%tmp61.i.i8486 = icmp sgt i64 0, -1		; <i1> [#uses=1]
258	%tmp95.i.i8490 = icmp slt i64 0, 2147483647000		; <i1> [#uses=1]
259	%bothcond9308 = and i1 %tmp61.i.i8486, %tmp95.i.i8490		; <i1> [#uses=1]
260	br i1 %bothcond9308, label %bb91.i8504, label %bb115.critedge.i.i8492
261bb115.critedge.i.i8492:		; preds = %bb5809
262	ret void
263bb91.i8504:		; preds = %bb5809
264	br i1 %foo, label %bb155.i8541, label %bb182.i8560
265bb155.i8541:		; preds = %bb91.i8504
266	%tmp156.i85398700 = invoke %struct.tm* @gmtime_r( i32* null, %struct.tm* null )
267			to label %bb182.i8560 unwind label %lpad		; <%struct.tm*> [#uses=1]
268bb182.i8560:		; preds = %bb155.i8541, %bb91.i8504
269	%tm48.0.i8558 = phi %struct.tm* [ null, %bb91.i8504 ], [ %tmp156.i85398700, %bb155.i8541 ]		; <%struct.tm*> [#uses=0]
270	br i1 %foo, label %bb278.i8617, label %bb187.i8591
271bb187.i8591:		; preds = %bb182.i8560
272	%tmp245.i8588 = srem i64 0, 86400000		; <i64> [#uses=1]
273	br i1 %foo, label %bb264.i8592, label %bb265.i8606
274bb264.i8592:		; preds = %bb187.i8591
275	ret void
276bb265.i8606:		; preds = %bb187.i8591
277	%tmp268269.i8593 = trunc i64 %tmp245.i8588 to i32		; <i32> [#uses=1]
278	%tmp273.i8594 = srem i32 %tmp268269.i8593, 1000		; <i32> [#uses=1]
279	%tmp273274.i8595 = trunc i32 %tmp273.i8594 to i16		; <i16> [#uses=1]
280	br label %invcont5814
281bb278.i8617:		; preds = %bb182.i8560
282	%timeOnly50.0.i8622 = add i32 0, 0		; <i32> [#uses=1]
283	br i1 %foo, label %bb440.i8663, label %bb448.i8694
284bb440.i8663:		; preds = %bb278.i8617
285	invoke void @_Z10wxOnAssertPKwiPKcS0_S0_( i32* getelementptr ([27 x i32], [27 x i32]* @.str, i32 0, i32 0), i32 1717, i8* getelementptr ([6 x i8], [6 x i8]* @_ZZNK10wxDateTime5GetTmERKNS_8TimeZoneEE12__FUNCTION__, i32 0, i32 0), i32* getelementptr ([29 x i32], [29 x i32]* @.str33, i32 0, i32 0), i32* getelementptr ([14 x i32], [14 x i32]* @.str4, i32 0, i32 0) )
286			to label %bb448.i8694 unwind label %lpad
287bb448.i8694:		; preds = %bb440.i8663, %bb278.i8617
288	%tmp477.i8669 = srem i32 %timeOnly50.0.i8622, 1000		; <i32> [#uses=1]
289	%tmp477478.i8670 = trunc i32 %tmp477.i8669 to i16		; <i16> [#uses=1]
290	br label %invcont5814
291invcont5814:		; preds = %bb448.i8694, %bb265.i8606
292	%tmp812.0.0 = phi i16 [ %tmp477478.i8670, %bb448.i8694 ], [ %tmp273274.i8595, %bb265.i8606 ]		; <i16> [#uses=1]
293	%tmp58165817 = zext i16 %tmp812.0.0 to i32		; <i32> [#uses=1]
294	invoke void (%struct.wxString*, i32*, ...) @_ZN8wxString6FormatEPKwz( %struct.wxString* noalias sret  null, i32* null, i32 %tmp58165817 )
295			to label %invcont5831 unwind label %lpad
296invcont5831:		; preds = %invcont5814
297	%tmp5862 = invoke zeroext  i8 @_ZN12wxStringBase10ConcatSelfEmPKwm( %struct.wxStringBase* null, i32 0, i32* null, i32 0 )
298			to label %bb7834 unwind label %lpad8185		; <i8> [#uses=0]
299bb5968:		; preds = %bb3314
300	invoke void (%struct.wxString*, i32*, ...) @_ZN8wxString6FormatEPKwz( %struct.wxString* noalias sret  null, i32* null, i32 0 )
301			to label %invcont5981 unwind label %lpad
302invcont5981:		; preds = %bb5968
303	ret void
304bb6118:		; preds = %bb3314
305	ret void
306bb6406:		; preds = %bb3314
307	ret void
308bb6556:		; preds = %bb3314
309	ret void
310bb6708:		; preds = %bb3314
311	ret void
312bb6860:		; preds = %bb3314
313	ret void
314bb7158:		; preds = %bb3314
315	ret void
316bb7308:		; preds = %bb3314
317	ret void
318bb7595:		; preds = %bb3314
319	ret void
320bb7806:		; preds = %bb3314
321	%tmp7814 = invoke %struct.wxStringBase* @_ZN12wxStringBase6appendEmw( %struct.wxStringBase* null, i32 1, i32 0 )
322			to label %bb7834 unwind label %lpad		; <%struct.wxStringBase*> [#uses=0]
323bb7819:		; preds = %bb3314
324	ret void
325bb7834:		; preds = %bb7806, %invcont5831
326	br label %bb3261
327lpad:		; preds = %bb7806, %bb5968, %invcont5814, %bb440.i8663, %bb155.i8541, %bb5657, %bb3306
328        %exn = landingpad {i8*, i32}
329                 cleanup
330	ret void
331lpad8185:		; preds = %invcont5831
332        %exn8185 = landingpad {i8*, i32}
333                 cleanup
334	ret void
335}
336
337declare void @_Z10wxOnAssertPKwiPKcS0_S0_(i32*, i32, i8*, i32*, i32*)
338
339declare zeroext  i8 @_ZN12wxStringBase10ConcatSelfEmPKwm(%struct.wxStringBase*, i32, i32*, i32)
340
341declare %struct.tm* @gmtime_r(i32*, %struct.tm*)
342
343declare zeroext  i16 @_ZNK10wxDateTime12GetDayOfYearERKNS_8TimeZoneE(%struct.wxDateTime*, %"struct.wxDateTime::TimeZone"*)
344
345declare %struct.wxStringBase* @_ZN12wxStringBase6appendEmw(%struct.wxStringBase*, i32, i32)
346
347declare %struct.wxStringBase* @_ZN12wxStringBaseaSEPKw(%struct.wxStringBase*, i32*)
348
349declare void @_ZN8wxString6FormatEPKwz(%struct.wxString* noalias sret , i32*, ...)
350
351declare i32 @__gxx_personality_v0(...)
352