brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.3 KiB · cc100c2 Raw
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