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