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