544 lines · plain
1; RUN: llc -verify-machineinstrs < %s | FileCheck %s2 3; CHECK-LABEL: $ip2state$main:4; CHECK-NEXT: .long .Lfunc_begin4@IMGREL5; CHECK-NEXT: .long -1 # ToState6; CHECK-NEXT: .long .Ltmp7; CHECK-NEXT: .long 0 # ToState8; CHECK-NEXT: .long .Ltmp9; CHECK-NEXT: .long 4 # ToState10; CHECK-NEXT: .long .Ltmp11; CHECK: .long 5 # ToState12; CHECK-NEXT: .long .Ltmp13; CHECK-NEXT: .long 4 # ToState14; CHECK-NEXT: .long .Ltmp15; CHECK-NEXT: .long 0 # ToState16; CHECK-NEXT: .long .Ltmp17; CHECK-NEXT: .long 2 # ToState18; CHECK-NEXT: .long .Ltmp19; CHECK-NEXT: .long 3 # ToState20; CHECK-NEXT: .long .Ltmp21; CHECK-NEXT: .long 0 # ToState22; CHECK-NEXT: .long .Ltmp23; CHECK-NEXT: .long 1 # ToState24; CHECK-NEXT: .long .Ltmp25; CHECK-NEXT: .long 0 # ToState26; CHECK-NEXT: .long .Ltmp27; CHECK-NEXT: .long -1 # ToState28 29; ModuleID = 'windows-seh-EHa-CppCondiTemps.cpp'30source_filename = "windows-seh-EHa-CppCondiTemps.cpp"31target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"32target triple = "x86_64-unknown-windows-msvc"33 34%class.B1 = type { i32 }35%class.B2 = type { %class.B1 }36%class.B3 = type { %class.B2 }37 38$"??1B1@@QEAA@XZ" = comdat any39 40$"??1B2@@QEAA@XZ" = comdat any41 42$"??0B2@@QEAA@XZ" = comdat any43 44$"??0B3@@QEAA@XZ" = comdat any45 46$"??1B3@@QEAA@XZ" = comdat any47 48$"??0B1@@QEAA@XZ" = comdat any49 50$"??_C@_0N@FMGAAAAM@in?5B1?5Dtor?5?6?$AA@" = comdat any51 52$"??_C@_0N@GFONDMMJ@in?5B2?5Dtor?5?6?$AA@" = comdat any53 54$"??_C@_0N@HCJGCIIK@in?5B3?5Dtor?5?6?$AA@" = comdat any55 56@"?xxxx@@3HA" = dso_local global i32 0, align 457@"?ptr@@3PEAHEA" = dso_local global ptr null, align 858@"??_C@_0N@FMGAAAAM@in?5B1?5Dtor?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [13 x i8] c"in B1 Dtor \0A\00", comdat, align 159@"??_C@_0N@GFONDMMJ@in?5B2?5Dtor?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [13 x i8] c"in B2 Dtor \0A\00", comdat, align 160@"??_C@_0N@HCJGCIIK@in?5B3?5Dtor?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [13 x i8] c"in B3 Dtor \0A\00", comdat, align 161 62; Function Attrs: noinline nounwind optnone mustprogress63define dso_local i32 @"?foo@@YAHH@Z"(i32 %a) #0 {64entry:65 %a.addr = alloca i32, align 466 store i32 %a, ptr %a.addr, align 467 %0 = load i32, ptr @"?xxxx@@3HA", align 468 %1 = load i32, ptr %a.addr, align 469 %add = add nsw i32 %0, %170 ret i32 %add71}72 73; Function Attrs: noinline optnone mustprogress74define dso_local i32 @"?bar@@YAHHVB1@@VB2@@@Z"(i32 %j, i32 %b1Bar.coerce, i32 %b2Bar.coerce) #1 personality ptr @__CxxFrameHandler3 {75entry:76 %b1Bar = alloca %class.B1, align 477 %b2Bar = alloca %class.B2, align 478 %j.addr = alloca i32, align 479 %ww = alloca i32, align 480 %coerce.dive = getelementptr inbounds %class.B1, ptr %b1Bar, i32 0, i32 081 store i32 %b1Bar.coerce, ptr %coerce.dive, align 482 %coerce.dive1 = getelementptr inbounds %class.B2, ptr %b2Bar, i32 0, i32 083 %coerce.dive2 = getelementptr inbounds %class.B1, ptr %coerce.dive1, i32 0, i32 084 store i32 %b2Bar.coerce, ptr %coerce.dive2, align 485 invoke void @llvm.seh.scope.begin()86 to label %invoke.cont unwind label %ehcleanup787 88invoke.cont: ; preds = %entry89 invoke void @llvm.seh.scope.begin()90 to label %invoke.cont3 unwind label %ehcleanup91 92invoke.cont3: ; preds = %invoke.cont93 store i32 %j, ptr %j.addr, align 494 %0 = load i32, ptr %j.addr, align 495 %cmp = icmp sgt i32 %0, 096 br i1 %cmp, label %if.then, label %if.else97 98if.then: ; preds = %invoke.cont399 %data = getelementptr inbounds %class.B1, ptr %b1Bar, i32 0, i32 0100 %1 = load i32, ptr %data, align 4101 store i32 %1, ptr %ww, align 4102 br label %if.end103 104if.else: ; preds = %invoke.cont3105 %2 = bitcast ptr %b2Bar to ptr106 %data4 = getelementptr inbounds %class.B1, ptr %2, i32 0, i32 0107 %3 = load i32, ptr %data4, align 4108 store i32 %3, ptr %ww, align 4109 br label %if.end110 111if.end: ; preds = %if.else, %if.then112 %4 = load i32, ptr %ww, align 4113 %5 = load ptr, ptr @"?ptr@@3PEAHEA", align 8114 %6 = load i32, ptr %5, align 4115 %add = add nsw i32 %4, %6116 invoke void @llvm.seh.scope.end()117 to label %invoke.cont5 unwind label %ehcleanup118 119invoke.cont5: ; preds = %if.end120 call void @"??1B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b1Bar) #8121 invoke void @llvm.seh.scope.end()122 to label %invoke.cont6 unwind label %ehcleanup7123 124ehcleanup: ; preds = %if.end, %invoke.cont125 %7 = cleanuppad within none []126 call void @"??1B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b1Bar) #8 [ "funclet"(token %7) ]127 cleanupret from %7 unwind label %ehcleanup7128 129invoke.cont6: ; preds = %invoke.cont5130 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b2Bar) #8131 ret i32 %add132 133ehcleanup7: ; preds = %invoke.cont5, %ehcleanup, %entry134 %8 = cleanuppad within none []135 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b2Bar) #8 [ "funclet"(token %8) ]136 cleanupret from %8 unwind to caller137}138 139; Function Attrs: nounwind readnone140declare dso_local void @llvm.seh.scope.begin() #2141 142declare dso_local i32 @__CxxFrameHandler3(...)143 144; Function Attrs: nounwind readnone145declare dso_local void @llvm.seh.scope.end() #2146 147; Function Attrs: noinline nounwind optnone148define linkonce_odr dso_local void @"??1B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %this) unnamed_addr #3 comdat align 2 {149entry:150 %this.addr = alloca ptr, align 8151 store ptr %this, ptr %this.addr, align 8152 %this1 = load ptr, ptr %this.addr, align 8153 call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@FMGAAAAM@in?5B1?5Dtor?5?6?$AA@")154 ret void155}156 157; Function Attrs: noinline nounwind optnone158define linkonce_odr dso_local void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %this) unnamed_addr #3 comdat align 2 personality ptr @__CxxFrameHandler3 {159entry:160 %this.addr = alloca ptr, align 8161 store ptr %this, ptr %this.addr, align 8162 %this1 = load ptr, ptr %this.addr, align 8163 invoke void @llvm.seh.scope.begin()164 to label %invoke.cont unwind label %ehcleanup165 166invoke.cont: ; preds = %entry167 invoke void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@GFONDMMJ@in?5B2?5Dtor?5?6?$AA@")168 to label %invoke.cont2 unwind label %ehcleanup169 170invoke.cont2: ; preds = %invoke.cont171 invoke void @llvm.seh.scope.end()172 to label %invoke.cont3 unwind label %ehcleanup173 174invoke.cont3: ; preds = %invoke.cont2175 %0 = bitcast ptr %this1 to ptr176 call void @"??1B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %0) #8177 ret void178 179ehcleanup: ; preds = %invoke.cont2, %invoke.cont, %entry180 %1 = cleanuppad within none []181 %2 = bitcast ptr %this1 to ptr182 call void @"??1B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %2) #8 [ "funclet"(token %1) ]183 cleanupret from %1 unwind to caller184}185 186; Function Attrs: noinline optnone mustprogress187define dso_local void @"?goo@@YA?AVB1@@H@Z"(ptr noalias sret(%class.B1) align 4 %agg.result, i32 %w) #1 personality ptr @__CxxFrameHandler3 {188entry:189 %result.ptr = alloca ptr, align 8190 %w.addr = alloca i32, align 4191 %b2ingoo = alloca %class.B2, align 4192 %0 = bitcast ptr %agg.result to ptr193 store ptr %0, ptr %result.ptr, align 8194 store i32 %w, ptr %w.addr, align 4195 %call = call ptr @"??0B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b2ingoo)196 invoke void @llvm.seh.scope.begin()197 to label %invoke.cont unwind label %ehcleanup198 199invoke.cont: ; preds = %entry200 %1 = load i32, ptr %w.addr, align 4201 %2 = bitcast ptr %b2ingoo to ptr202 %data = getelementptr inbounds %class.B1, ptr %2, i32 0, i32 0203 %3 = load i32, ptr %data, align 4204 %add = add nsw i32 %3, %1205 store i32 %add, ptr %data, align 4206 %4 = bitcast ptr %b2ingoo to ptr207 %5 = bitcast ptr %agg.result to ptr208 %6 = bitcast ptr %4 to ptr209 call void @llvm.memcpy.p0.p0.i64(ptr align 4 %5, ptr align 4 %6, i64 4, i1 false)210 invoke void @llvm.seh.scope.end()211 to label %invoke.cont1 unwind label %ehcleanup212 213invoke.cont1: ; preds = %invoke.cont214 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b2ingoo) #8215 ret void216 217ehcleanup: ; preds = %invoke.cont, %entry218 %7 = cleanuppad within none []219 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b2ingoo) #8 [ "funclet"(token %7) ]220 cleanupret from %7 unwind to caller221}222 223; Function Attrs: noinline optnone224define linkonce_odr dso_local ptr @"??0B2@@QEAA@XZ"(ptr nonnull returned align 4 dereferenceable(4) %this) unnamed_addr #4 comdat align 2 personality ptr @__CxxFrameHandler3 {225entry:226 %this.addr = alloca ptr, align 8227 store ptr %this, ptr %this.addr, align 8228 %this1 = load ptr, ptr %this.addr, align 8229 %0 = bitcast ptr %this1 to ptr230 %call = call ptr @"??0B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %0)231 invoke void @llvm.seh.scope.begin()232 to label %invoke.cont unwind label %ehcleanup233 234invoke.cont: ; preds = %entry235 %1 = bitcast ptr %this1 to ptr236 %data = getelementptr inbounds %class.B1, ptr %1, i32 0, i32 0237 %2 = load i32, ptr %data, align 4238 %add = add nsw i32 %2, 222239 %call2 = call i32 @"?foo@@YAHH@Z"(i32 %add)240 invoke void @llvm.seh.scope.end()241 to label %invoke.cont3 unwind label %ehcleanup242 243invoke.cont3: ; preds = %invoke.cont244 ret ptr %this1245 246ehcleanup: ; preds = %invoke.cont, %entry247 %3 = cleanuppad within none []248 %4 = bitcast ptr %this1 to ptr249 call void @"??1B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %4) #8 [ "funclet"(token %3) ]250 cleanupret from %3 unwind to caller251}252 253; Function Attrs: argmemonly nofree nosync nounwind willreturn254declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5255 256; Function Attrs: noinline norecurse optnone mustprogress257define dso_local i32 @main() #6 personality ptr @__CxxFrameHandler3 {258entry:259 %retval = alloca i32, align 4260 %b3inmain = alloca %class.B3, align 4261 %m = alloca i32, align 4262 %ref.tmp = alloca %class.B2, align 4263 %cleanup.cond = alloca i1, align 1264 %ref.tmp5 = alloca %class.B3, align 4265 %cleanup.cond9 = alloca i1, align 1266 %i = alloca i32, align 4267 %agg.tmp = alloca %class.B2, align 4268 %agg.tmp28 = alloca %class.B1, align 4269 %b1fromgoo = alloca %class.B1, align 4270 store i32 0, ptr %retval, align 4271 %call = call ptr @"??0B3@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b3inmain)272 invoke void @llvm.seh.scope.begin()273 to label %invoke.cont unwind label %ehcleanup50274 275invoke.cont: ; preds = %entry276 %0 = load i32, ptr @"?xxxx@@3HA", align 4277 %cmp = icmp sgt i32 %0, 1278 store i1 false, ptr %cleanup.cond, align 1279 store i1 false, ptr %cleanup.cond9, align 1280 br i1 %cmp, label %cond.true, label %cond.false281 282cond.true: ; preds = %invoke.cont283 %call2 = invoke ptr @"??0B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %ref.tmp)284 to label %invoke.cont1 unwind label %ehcleanup50285 286invoke.cont1: ; preds = %cond.true287 invoke void @llvm.seh.scope.begin()288 to label %invoke.cont3 unwind label %ehcleanup21289 290invoke.cont3: ; preds = %invoke.cont1291 store i1 true, ptr %cleanup.cond, align 1292 %1 = bitcast ptr %ref.tmp to ptr293 %data = getelementptr inbounds %class.B1, ptr %1, i32 0, i32 0294 %2 = load i32, ptr %data, align 4295 %call4 = call i32 @"?foo@@YAHH@Z"(i32 99)296 %add = add nsw i32 %2, %call4297 br label %cond.end298 299cond.false: ; preds = %invoke.cont300 %call7 = invoke ptr @"??0B3@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %ref.tmp5)301 to label %invoke.cont6 unwind label %ehcleanup21302 303invoke.cont6: ; preds = %cond.false304 invoke void @llvm.seh.scope.begin()305 to label %invoke.cont8 unwind label %ehcleanup306 307invoke.cont8: ; preds = %invoke.cont6308 store i1 true, ptr %cleanup.cond9, align 1309 %3 = bitcast ptr %ref.tmp5 to ptr310 %data10 = getelementptr inbounds %class.B1, ptr %3, i32 0, i32 0311 %4 = load i32, ptr %data10, align 4312 %call11 = call i32 @"?foo@@YAHH@Z"(i32 88)313 %add12 = add nsw i32 %4, %call11314 br label %cond.end315 316cond.end: ; preds = %invoke.cont8, %invoke.cont3317 %cond = phi i32 [ %add, %invoke.cont3 ], [ %add12, %invoke.cont8 ]318 invoke void @llvm.seh.scope.end()319 to label %invoke.cont13 unwind label %ehcleanup320 321invoke.cont13: ; preds = %cond.end322 %cleanup.is_active = load i1, ptr %cleanup.cond9, align 1323 br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done324 325cleanup.action: ; preds = %invoke.cont13326 call void @"??1B3@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %ref.tmp5) #8327 br label %cleanup.done328 329cleanup.done: ; preds = %cleanup.action, %invoke.cont13330 invoke void @llvm.seh.scope.end()331 to label %invoke.cont17 unwind label %ehcleanup21332 333invoke.cont17: ; preds = %cleanup.done334 %cleanup.is_active18 = load i1, ptr %cleanup.cond, align 1335 br i1 %cleanup.is_active18, label %cleanup.action19, label %cleanup.done20336 337cleanup.action19: ; preds = %invoke.cont17338 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %ref.tmp) #8339 br label %cleanup.done20340 341cleanup.done20: ; preds = %cleanup.action19, %invoke.cont17342 store i32 %cond, ptr %m, align 4343 %call26 = invoke ptr @"??0B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %agg.tmp)344 to label %invoke.cont25 unwind label %ehcleanup50345 346invoke.cont25: ; preds = %cleanup.done20347 invoke void @llvm.seh.scope.begin()348 to label %invoke.cont27 unwind label %ehcleanup38349 350invoke.cont27: ; preds = %invoke.cont25351 %call30 = invoke ptr @"??0B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %agg.tmp28)352 to label %invoke.cont29 unwind label %ehcleanup38353 354invoke.cont29: ; preds = %invoke.cont27355 invoke void @llvm.seh.scope.begin()356 to label %invoke.cont31 unwind label %ehcleanup36357 358invoke.cont31: ; preds = %invoke.cont29359 %call32 = call i32 @"?foo@@YAHH@Z"(i32 0)360 %coerce.dive = getelementptr inbounds %class.B1, ptr %agg.tmp28, i32 0, i32 0361 %5 = load i32, ptr %coerce.dive, align 4362 %coerce.dive33 = getelementptr inbounds %class.B2, ptr %agg.tmp, i32 0, i32 0363 %coerce.dive34 = getelementptr inbounds %class.B1, ptr %coerce.dive33, i32 0, i32 0364 %6 = load i32, ptr %coerce.dive34, align 4365 invoke void @llvm.seh.scope.end()366 to label %invoke.cont35 unwind label %ehcleanup36367 368invoke.cont35: ; preds = %invoke.cont31369 invoke void @llvm.seh.scope.end()370 to label %invoke.cont37 unwind label %ehcleanup38371 372invoke.cont37: ; preds = %invoke.cont35373 %call40 = invoke i32 @"?bar@@YAHHVB1@@VB2@@@Z"(i32 %call32, i32 %5, i32 %6)374 to label %invoke.cont39 unwind label %ehcleanup50375 376invoke.cont39: ; preds = %invoke.cont37377 store i32 %call40, ptr %i, align 4378 %7 = load i32, ptr %i, align 4379 invoke void @"?goo@@YA?AVB1@@H@Z"(ptr sret(%class.B1) align 4 %b1fromgoo, i32 %7)380 to label %invoke.cont41 unwind label %ehcleanup50381 382invoke.cont41: ; preds = %invoke.cont39383 invoke void @llvm.seh.scope.begin()384 to label %invoke.cont42 unwind label %ehcleanup48385 386invoke.cont42: ; preds = %invoke.cont41387 %8 = load i32, ptr %m, align 4388 %data43 = getelementptr inbounds %class.B1, ptr %b1fromgoo, i32 0, i32 0389 %9 = load i32, ptr %data43, align 4390 %add44 = add nsw i32 %8, %9391 %10 = bitcast ptr %b3inmain to ptr392 %data45 = getelementptr inbounds %class.B1, ptr %10, i32 0, i32 0393 %11 = load i32, ptr %data45, align 4394 %add46 = add nsw i32 %add44, %11395 store i32 %add46, ptr %retval, align 4396 invoke void @llvm.seh.scope.end()397 to label %invoke.cont47 unwind label %ehcleanup48398 399ehcleanup: ; preds = %cond.end, %invoke.cont6400 %12 = cleanuppad within none []401 %cleanup.is_active14 = load i1, ptr %cleanup.cond9, align 1402 br i1 %cleanup.is_active14, label %cleanup.action15, label %cleanup.done16403 404cleanup.action15: ; preds = %ehcleanup405 call void @"??1B3@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %ref.tmp5) #8 [ "funclet"(token %12) ]406 br label %cleanup.done16407 408cleanup.done16: ; preds = %cleanup.action15, %ehcleanup409 cleanupret from %12 unwind label %ehcleanup21410 411ehcleanup21: ; preds = %cleanup.done, %cleanup.done16, %cond.false, %invoke.cont1412 %13 = cleanuppad within none []413 %cleanup.is_active22 = load i1, ptr %cleanup.cond, align 1414 br i1 %cleanup.is_active22, label %cleanup.action23, label %cleanup.done24415 416cleanup.action23: ; preds = %ehcleanup21417 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %ref.tmp) #8 [ "funclet"(token %13) ]418 br label %cleanup.done24419 420cleanup.done24: ; preds = %cleanup.action23, %ehcleanup21421 cleanupret from %13 unwind label %ehcleanup50422 423ehcleanup36: ; preds = %invoke.cont31, %invoke.cont29424 %14 = cleanuppad within none []425 call void @"??1B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %agg.tmp28) #8 [ "funclet"(token %14) ]426 cleanupret from %14 unwind label %ehcleanup38427 428ehcleanup38: ; preds = %invoke.cont35, %ehcleanup36, %invoke.cont27, %invoke.cont25429 %15 = cleanuppad within none []430 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %agg.tmp) #8 [ "funclet"(token %15) ]431 cleanupret from %15 unwind label %ehcleanup50432 433invoke.cont47: ; preds = %invoke.cont42434 call void @"??1B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b1fromgoo) #8435 invoke void @llvm.seh.scope.end()436 to label %invoke.cont49 unwind label %ehcleanup50437 438ehcleanup48: ; preds = %invoke.cont42, %invoke.cont41439 %16 = cleanuppad within none []440 call void @"??1B1@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b1fromgoo) #8 [ "funclet"(token %16) ]441 cleanupret from %16 unwind label %ehcleanup50442 443invoke.cont49: ; preds = %invoke.cont47444 call void @"??1B3@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b3inmain) #8445 %17 = load i32, ptr %retval, align 4446 ret i32 %17447 448ehcleanup50: ; preds = %invoke.cont47, %ehcleanup48, %invoke.cont39, %invoke.cont37, %ehcleanup38, %cleanup.done20, %cleanup.done24, %cond.true, %entry449 %18 = cleanuppad within none []450 call void @"??1B3@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %b3inmain) #8 [ "funclet"(token %18) ]451 cleanupret from %18 unwind to caller452}453 454; Function Attrs: noinline optnone455define linkonce_odr dso_local ptr @"??0B3@@QEAA@XZ"(ptr nonnull returned align 4 dereferenceable(4) %this) unnamed_addr #4 comdat align 2 personality ptr @__CxxFrameHandler3 {456entry:457 %this.addr = alloca ptr, align 8458 store ptr %this, ptr %this.addr, align 8459 %this1 = load ptr, ptr %this.addr, align 8460 %0 = bitcast ptr %this1 to ptr461 %call = call ptr @"??0B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %0)462 invoke void @llvm.seh.scope.begin()463 to label %invoke.cont unwind label %ehcleanup464 465invoke.cont: ; preds = %entry466 %1 = bitcast ptr %this1 to ptr467 %data = getelementptr inbounds %class.B1, ptr %1, i32 0, i32 0468 %2 = load i32, ptr %data, align 4469 %add = add nsw i32 %2, 333470 %call2 = call i32 @"?foo@@YAHH@Z"(i32 %add)471 invoke void @llvm.seh.scope.end()472 to label %invoke.cont3 unwind label %ehcleanup473 474invoke.cont3: ; preds = %invoke.cont475 ret ptr %this1476 477ehcleanup: ; preds = %invoke.cont, %entry478 %3 = cleanuppad within none []479 %4 = bitcast ptr %this1 to ptr480 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %4) #8 [ "funclet"(token %3) ]481 cleanupret from %3 unwind to caller482}483 484; Function Attrs: noinline nounwind optnone485define linkonce_odr dso_local void @"??1B3@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %this) unnamed_addr #3 comdat align 2 personality ptr @__CxxFrameHandler3 {486entry:487 %this.addr = alloca ptr, align 8488 store ptr %this, ptr %this.addr, align 8489 %this1 = load ptr, ptr %this.addr, align 8490 invoke void @llvm.seh.scope.begin()491 to label %invoke.cont unwind label %ehcleanup492 493invoke.cont: ; preds = %entry494 invoke void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@HCJGCIIK@in?5B3?5Dtor?5?6?$AA@")495 to label %invoke.cont2 unwind label %ehcleanup496 497invoke.cont2: ; preds = %invoke.cont498 invoke void @llvm.seh.scope.end()499 to label %invoke.cont3 unwind label %ehcleanup500 501invoke.cont3: ; preds = %invoke.cont2502 %0 = bitcast ptr %this1 to ptr503 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %0) #8504 ret void505 506ehcleanup: ; preds = %invoke.cont2, %invoke.cont, %entry507 %1 = cleanuppad within none []508 %2 = bitcast ptr %this1 to ptr509 call void @"??1B2@@QEAA@XZ"(ptr nonnull align 4 dereferenceable(4) %2) #8 [ "funclet"(token %1) ]510 cleanupret from %1 unwind to caller511}512 513; Function Attrs: noinline nounwind optnone514define linkonce_odr dso_local ptr @"??0B1@@QEAA@XZ"(ptr nonnull returned align 4 dereferenceable(4) %this) unnamed_addr #3 comdat align 2 {515entry:516 %this.addr = alloca ptr, align 8517 store ptr %this, ptr %this.addr, align 8518 %this1 = load ptr, ptr %this.addr, align 8519 %data = getelementptr inbounds %class.B1, ptr %this1, i32 0, i32 0520 store i32 90, ptr %data, align 4521 %data2 = getelementptr inbounds %class.B1, ptr %this1, i32 0, i32 0522 %0 = load i32, ptr %data2, align 4523 %add = add nsw i32 %0, 111524 %call = call i32 @"?foo@@YAHH@Z"(i32 %add)525 ret ptr %this1526}527 528declare dso_local void @"?printf@@YAXZZ"(...) #7529 530attributes #0 = { noinline nounwind optnone mustprogress "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" }531attributes #1 = { noinline optnone mustprogress "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" }532attributes #2 = { nounwind readnone }533attributes #3 = { noinline nounwind optnone "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" }534attributes #4 = { noinline optnone "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" }535attributes #5 = { argmemonly nofree nosync nounwind willreturn }536attributes #6 = { noinline norecurse optnone mustprogress "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" }537attributes #7 = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" }538attributes #8 = { nounwind }539 540!llvm.module.flags = !{!0, !1}541 542!0 = !{i32 1, !"wchar_size", i32 2}543!1 = !{i32 2, !"eh-asynch", i32 1}544