brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 5aa9b8b Raw
41 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -mtriple=i686-unknown-windows-msvc -passes=objc-arc-contract -S -o - %s | FileCheck %s3 4declare void @f()5declare i32 @__CxxFrameHandler3(...)6declare dllimport ptr @llvm.objc.retain(ptr)7declare dllimport ptr @llvm.objc.retainAutoreleasedReturnValue(ptr)8declare dllimport void @llvm.objc.release(ptr)9 10@x = external global ptr11 12define void @g(ptr %p) personality ptr @__CxxFrameHandler3 {13; CHECK-LABEL: @g(14; CHECK-NEXT:    invoke void @f()15; CHECK-NEXT:    to label [[INVOKE_CONT:%.*]] unwind label [[EHCLEANUP:%.*]]16; CHECK:       invoke.cont:17; CHECK-NEXT:    tail call void @llvm.objc.storeStrong(ptr @x, ptr [[P:%.*]]) #[[ATTR0:[0-9]+]]18; CHECK-NEXT:    ret void19; CHECK:       ehcleanup:20; CHECK-NEXT:    [[TMP1:%.*]] = cleanuppad within none []21; CHECK-NEXT:    tail call void @llvm.objc.storeStrong(ptr @x, ptr [[P]]) #[[ATTR0]] [ "funclet"(token [[TMP1]]) ]22; CHECK-NEXT:    cleanupret from [[TMP1]] unwind to caller23;24  invoke void @f() to label %invoke.cont unwind label %ehcleanup25 26invoke.cont:27  %call = tail call ptr @llvm.objc.retain(ptr %p) nounwind28  %tmp = load ptr, ptr @x, align 429  store ptr %call, ptr @x, align 430  tail call void @llvm.objc.release(ptr %tmp) nounwind31  ret void32 33ehcleanup:34  %1 = cleanuppad within none []35  %call1 = tail call ptr @llvm.objc.retain(ptr %p) nounwind [ "funclet"(token %1) ]36  %tmp1 = load ptr, ptr @x, align 437  store ptr %call1, ptr @x, align 438  tail call void @llvm.objc.release(ptr %tmp1) nounwind [ "funclet"(token %1) ]39  cleanupret from %1 unwind to caller40}41