163 lines · plain
1; RUN: llc < %s -mtriple=i686-windows-gnu | FileCheck %s --check-prefix=CHECK-MINGW-X862 3%struct.as = type { ptr }4 5@_ZZ2amiE2au = internal unnamed_addr global %struct.as zeroinitializer, align 46@_ZGVZ2amiE2au = internal global i64 0, align 87@_ZTIi = external constant ptr8 9define void @_Z2ami(i32) #0 personality ptr @__gxx_personality_v0 {10; CHECK-MINGW-X86-LABEL: _Z2ami:11; CHECK-MINGW-X86: # %bb.0: # %entry12; CHECK-MINGW-X86-NEXT: pushl %edi13; CHECK-MINGW-X86-NEXT: .cfi_def_cfa_offset 814; CHECK-MINGW-X86-NEXT: pushl %esi15; CHECK-MINGW-X86-NEXT: .cfi_def_cfa_offset 1216; CHECK-MINGW-X86-NEXT: .cfi_offset %esi, -1217; CHECK-MINGW-X86-NEXT: .cfi_offset %edi, -818; CHECK-MINGW-X86-NEXT: movzbl __ZGVZ2amiE2au, %eax19; CHECK-MINGW-X86-NEXT: testb %al, %al20; CHECK-MINGW-X86-NEXT: jne LBB0_421; CHECK-MINGW-X86-NEXT: # %bb.1: # %init.check22; CHECK-MINGW-X86-NEXT: .cfi_escape 0x2e, 0x0423; CHECK-MINGW-X86-NEXT: pushl $__ZGVZ2amiE2au24; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 425; CHECK-MINGW-X86-NEXT: calll ___cxa_guard_acquire26; CHECK-MINGW-X86-NEXT: addl $4, %esp27; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset -428; CHECK-MINGW-X86-NEXT: testl %eax, %eax29; CHECK-MINGW-X86-NEXT: je LBB0_430; CHECK-MINGW-X86-NEXT: # %bb.2: # %init31; CHECK-MINGW-X86-NEXT: Ltmp0:32; CHECK-MINGW-X86-NEXT: .cfi_escape 0x2e, 0x0433; CHECK-MINGW-X86-NEXT: pushl $434; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 435; CHECK-MINGW-X86-NEXT: calll __Znwj36; CHECK-MINGW-X86-NEXT: addl $4, %esp37; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset -438; CHECK-MINGW-X86-NEXT: Ltmp1:39; CHECK-MINGW-X86-NEXT: # %bb.3: # %invoke.cont40; CHECK-MINGW-X86-NEXT: movl %eax, __ZZ2amiE2au41; CHECK-MINGW-X86-NEXT: .cfi_escape 0x2e, 0x0442; CHECK-MINGW-X86-NEXT: pushl $__ZGVZ2amiE2au43; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 444; CHECK-MINGW-X86-NEXT: calll ___cxa_guard_release45; CHECK-MINGW-X86-NEXT: addl $4, %esp46; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset -447; CHECK-MINGW-X86-NEXT: LBB0_4: # %init.end48; CHECK-MINGW-X86-NEXT: .cfi_escape 0x2e, 0x0449; CHECK-MINGW-X86-NEXT: pushl $450; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 451; CHECK-MINGW-X86-NEXT: calll __Znwj52; CHECK-MINGW-X86-NEXT: addl $4, %esp53; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset -454; CHECK-MINGW-X86-NEXT: movl %eax, %esi55; CHECK-MINGW-X86-NEXT: .cfi_escape 0x2e, 0x0456; CHECK-MINGW-X86-NEXT: pushl $457; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 458; CHECK-MINGW-X86-NEXT: calll ___cxa_allocate_exception59; CHECK-MINGW-X86-NEXT: addl $4, %esp60; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset -461; CHECK-MINGW-X86-NEXT: movl $0, (%eax)62; CHECK-MINGW-X86-NEXT: Ltmp3:63; CHECK-MINGW-X86-NEXT: .cfi_escape 0x2e, 0x0c64; CHECK-MINGW-X86-NEXT: movl .refptr.__ZTIi, %ecx65; CHECK-MINGW-X86-NEXT: pushl $066; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 467; CHECK-MINGW-X86-NEXT: pushl %ecx68; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 469; CHECK-MINGW-X86-NEXT: pushl %eax70; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 471; CHECK-MINGW-X86-NEXT: calll ___cxa_throw72; CHECK-MINGW-X86-NEXT: addl $12, %esp73; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset -1274; CHECK-MINGW-X86-NEXT: Ltmp4:75; CHECK-MINGW-X86-NEXT: # %bb.8: # %unreachable76; CHECK-MINGW-X86-NEXT: LBB0_5: # %lpad77; CHECK-MINGW-X86-NEXT: Ltmp2:78; CHECK-MINGW-X86-NEXT: movl %eax, %edi79; CHECK-MINGW-X86-NEXT: .cfi_escape 0x2e, 0x0480; CHECK-MINGW-X86-NEXT: pushl $__ZGVZ2amiE2au81; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 482; CHECK-MINGW-X86-NEXT: calll ___cxa_guard_abort83; CHECK-MINGW-X86-NEXT: jmp LBB0_784; CHECK-MINGW-X86-NEXT: LBB0_6: # %lpad185; CHECK-MINGW-X86-NEXT: .cfi_def_cfa_offset 1286; CHECK-MINGW-X86-NEXT: Ltmp5:87; CHECK-MINGW-X86-NEXT: movl %eax, %edi88; CHECK-MINGW-X86-NEXT: .cfi_escape 0x2e, 0x0489; CHECK-MINGW-X86-NEXT: pushl %esi90; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 491; CHECK-MINGW-X86-NEXT: calll __ZdlPv92; CHECK-MINGW-X86-NEXT: LBB0_7: # %eh.resume93; CHECK-MINGW-X86-NEXT: addl $4, %esp94; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset -495; CHECK-MINGW-X86-NEXT: .cfi_escape 0x2e, 0x0496; CHECK-MINGW-X86-NEXT: pushl %edi97; CHECK-MINGW-X86-NEXT: .cfi_adjust_cfa_offset 498; CHECK-MINGW-X86-NEXT: calll __Unwind_Resume99; CHECK-MINGW-X86-NEXT: Lfunc_end0:100entry:101 %1 = load atomic i8, ptr @_ZGVZ2amiE2au acquire, align 8102 %guard.uninitialized = icmp eq i8 %1, 0103 br i1 %guard.uninitialized, label %init.check, label %init.end104 105init.check: ; preds = %entry106 %2 = tail call i32 @__cxa_guard_acquire(ptr nonnull @_ZGVZ2amiE2au)107 %tobool = icmp eq i32 %2, 0108 br i1 %tobool, label %init.end, label %init109 110init: ; preds = %init.check111 %call.i3 = invoke ptr @_Znwj(i32 4)112 to label %invoke.cont unwind label %lpad113 114invoke.cont: ; preds = %init115 store ptr %call.i3, ptr @_ZZ2amiE2au, align 4116 tail call void @__cxa_guard_release(ptr nonnull @_ZGVZ2amiE2au)117 br label %init.end118 119init.end: ; preds = %init.check, %invoke.cont, %entry120 %call.i = tail call ptr @_Znwj(i32 4)121 %exception = tail call ptr @__cxa_allocate_exception(i32 4)122 store i32 0, ptr %exception, align 16123 invoke void @__cxa_throw(ptr %exception, ptr @_ZTIi, ptr null)124 to label %unreachable unwind label %lpad1125 126lpad: ; preds = %init127 %3 = landingpad { ptr, i32 }128 cleanup129 %4 = extractvalue { ptr, i32 } %3, 0130 %5 = extractvalue { ptr, i32 } %3, 1131 tail call void @__cxa_guard_abort(ptr nonnull @_ZGVZ2amiE2au) #1132 br label %eh.resume133 134lpad1: ; preds = %init.end135 %6 = landingpad { ptr, i32 }136 cleanup137 %7 = extractvalue { ptr, i32 } %6, 0138 %8 = extractvalue { ptr, i32 } %6, 1139 tail call void @_ZdlPv(ptr nonnull %call.i)140 br label %eh.resume141 142eh.resume: ; preds = %lpad1, %lpad143 %exn.slot.0 = phi ptr [ %7, %lpad1 ], [ %4, %lpad ]144 %ehselector.slot.0 = phi i32 [ %8, %lpad1 ], [ %5, %lpad ]145 %lpad.val = insertvalue { ptr, i32 } undef, ptr %exn.slot.0, 0146 %lpad.val2 = insertvalue { ptr, i32 } %lpad.val, i32 %ehselector.slot.0, 1147 resume { ptr, i32 } %lpad.val2148 149unreachable: ; preds = %init.end150 unreachable151}152 153declare i32 @__cxa_guard_acquire(ptr)154declare i32 @__gxx_personality_v0(...)155declare void @__cxa_guard_abort(ptr)156declare void @__cxa_guard_release(ptr)157declare ptr @__cxa_allocate_exception(i32)158declare void @__cxa_throw(ptr, ptr, ptr)159declare noalias nonnull ptr @_Znwj(i32)160declare ptr @__cxa_begin_catch(ptr)161declare void @__cxa_end_catch()162declare void @_ZdlPv(ptr)163