brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · eb96157 Raw
122 lines · plain
1; RUN: llc -o - %s -verify-machineinstrs -mtriple=aarch64-windows | FileCheck %s2 3; Windows runtime passes the establisher frame as the second argument to the4; termination handler.  Check that we copy it into fp.5 6; CHECK:      ?dtor$6@?0?main@4HA":7; CHECK:      .seh_proc "?dtor$6@?0?main@4HA"8; CHECK:      stp     x29, x30, [sp, #-16]!   // 16-byte Folded Spill9; CHECK-NEXT: .seh_save_fplr_x 1610; CHECK-NEXT: .seh_endprologue11; CHECK-NEXT: mov     x29, x112 13target datalayout = "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128"14target triple = "aarch64-unknown-windows-msvc19.15.26732"15 16; Function Attrs: noinline nounwind optnone uwtable17define dso_local i32 @main() #0 personality ptr @__C_specific_handler {18entry:19  %retval = alloca i32, align 420  %Counter = alloca i32, align 421  %__exception_code = alloca i32, align 422  call void (...) @llvm.localescape(ptr %Counter)23  store i32 0, ptr %retval, align 424  store i32 0, ptr %Counter, align 425  %call = invoke i32 @RaiseStatus(i32 -1073741675) #326          to label %invoke.cont unwind label %ehcleanup27 28invoke.cont:                                      ; preds = %entry29  %0 = call ptr @llvm.localaddress()30  invoke void @"?fin$0@0@main@@"(i8 0, ptr %0) #331          to label %invoke.cont1 unwind label %catch.dispatch32 33invoke.cont1:                                     ; preds = %invoke.cont34  br label %__try.cont35 36ehcleanup:                                        ; preds = %entry37  %1 = cleanuppad within none []38  %2 = call ptr @llvm.localaddress()39  invoke void @"?fin$0@0@main@@"(i8 1, ptr %2) #3 [ "funclet"(token %1) ]40          to label %invoke.cont2 unwind label %catch.dispatch41 42invoke.cont2:                                     ; preds = %ehcleanup43  cleanupret from %1 unwind label %catch.dispatch44 45catch.dispatch:                                   ; preds = %invoke.cont2, %ehcleanup, %invoke.cont46  %3 = catchswitch within none [label %__except] unwind to caller47 48__except:                                         ; preds = %catch.dispatch49  %4 = catchpad within %3 [ptr null]50  catchret from %4 to label %__except351 52__except3:                                        ; preds = %__except53  %5 = call i32 @llvm.eh.exceptioncode(token %4)54  store i32 %5, ptr %__exception_code, align 455  %6 = load i32, ptr %Counter, align 456  %add = add nsw i32 %6, 557  store i32 %add, ptr %Counter, align 458  br label %__try.cont59 60__try.cont:                                       ; preds = %__except3, %invoke.cont161  %7 = load i32, ptr %retval, align 462  ret i32 %763}64 65define internal void @"?fin$0@0@main@@"(i8 %abnormal_termination, ptr %frame_pointer) {66entry:67  %frame_pointer.addr = alloca ptr, align 868  %abnormal_termination.addr = alloca i8, align 169  %0 = call ptr @llvm.localrecover(ptr @main, ptr %frame_pointer, i32 0)70  store ptr %frame_pointer, ptr %frame_pointer.addr, align 871  store i8 %abnormal_termination, ptr %abnormal_termination.addr, align 172  store i32 3, ptr %0, align 473  call void @"?fin$1@0@main@@"(i8 0, ptr %frame_pointer)74  %1 = load i32, ptr %0, align 475  %add = add nsw i32 %1, 276  store i32 %add, ptr %0, align 477  %call = call i32 @RaiseStatus(i32 -1073741675)78  ret void79}80 81; Function Attrs: nounwind readnone82declare ptr @llvm.localrecover(ptr, ptr, i32) #183 84define internal void @"?fin$1@0@main@@"(i8 %abnormal_termination, ptr %frame_pointer) {85entry:86  %frame_pointer.addr = alloca ptr, align 887  %abnormal_termination.addr = alloca i8, align 188  %0 = call ptr @llvm.localrecover(ptr @main, ptr %frame_pointer, i32 0)89  store ptr %frame_pointer, ptr %frame_pointer.addr, align 890  store i8 %abnormal_termination, ptr %abnormal_termination.addr, align 191  %1 = load i32, ptr %0, align 492  %cmp = icmp eq i32 %1, 393  br i1 %cmp, label %if.then, label %if.end94 95if.then:                                          ; preds = %entry96  %2 = load i32, ptr %0, align 497  %add = add nsw i32 %2, 198  store i32 %add, ptr %0, align 499  br label %if.end100 101if.end:                                           ; preds = %if.then, %entry102  ret void103}104 105declare dso_local i32 @RaiseStatus(...)106 107declare dso_local i32 @__C_specific_handler(...)108 109; Function Attrs: nounwind readnone110declare ptr @llvm.localaddress() #1111 112; Function Attrs: nounwind readnone113declare i32 @llvm.eh.exceptioncode(token) #1114 115; Function Attrs: nounwind116declare void @llvm.localescape(...) #2117 118attributes #0 = { noinline nounwind optnone uwtable }119attributes #1 = { nounwind readnone }120attributes #2 = { nounwind }121attributes #3 = { noinline }122