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