brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 47a8892 Raw
42 lines · plain
1; RUN: opt -passes=objc-arc-contract -S < %s | FileCheck %s2 3declare ptr @llvm.objc.autoreleaseReturnValue(ptr)4declare ptr @foo1()5 6; Check that ARC contraction replaces the function return with the value7; returned by @llvm.objc.autoreleaseReturnValue.8 9; CHECK-LABEL: define ptr @autoreleaseRVTailCall(10; CHECK: %[[V0:[0-9]+]] = tail call ptr @llvm.objc.autoreleaseReturnValue(11; CHECK: ret ptr %[[V0]]12 13define ptr @autoreleaseRVTailCall() {14  %1 = call ptr @foo1()15  %2 = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr %1)16  ret ptr %117}18 19declare ptr @foo2(i32);20 21; CHECK-LABEL: define ptr @autoreleaseRVTailCallPhi(22; CHECK: %[[PHIVAL:.*]] = phi ptr [ %{{.*}}, %bb1 ], [ %{{.*}}, %bb2 ]23; CHECK: %[[RETVAL:.*]] = phi ptr [ %{{.*}}, %bb1 ], [ %{{.*}}, %bb2 ]24; CHECK: %[[V4:.*]] = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr %[[PHIVAL]])25; CHECK: ret ptr %[[V4]]26 27define ptr @autoreleaseRVTailCallPhi(i1 %cond) {28entry:29  br i1 %cond, label %bb1, label %bb230bb1:31  %v0 = call ptr @foo2(i32 1)32  br label %bb333bb2:34  %v2 = call ptr @foo2(i32 2)35  br label %bb336bb3:37  %phival = phi ptr [ %v0, %bb1 ], [ %v2, %bb2 ]38  %retval = phi ptr [ %v0, %bb1 ], [ %v2, %bb2 ]39  %v4 = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr %phival)40  ret ptr %retval41}42