diff options
Diffstat (limited to 'llvm/test/Transforms/ObjCARC/contract-replace-arg-use.ll')
-rw-r--r-- | llvm/test/Transforms/ObjCARC/contract-replace-arg-use.ll | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/test/Transforms/ObjCARC/contract-replace-arg-use.ll b/llvm/test/Transforms/ObjCARC/contract-replace-arg-use.ll new file mode 100644 index 00000000000..26b0cd9a42a --- /dev/null +++ b/llvm/test/Transforms/ObjCARC/contract-replace-arg-use.ll @@ -0,0 +1,18 @@ +; RUN: opt -objc-arc-contract -S < %s | FileCheck %s + +declare i8* @objc_autoreleaseReturnValue(i8*) +declare i8* @foo1() + +; Check that ARC contraction replaces the function return with the value +; returned by @objc_autoreleaseReturnValue. + +; CHECK: %[[V0:[0-9]+]] = tail call i8* @objc_autoreleaseReturnValue( +; CHECK: %[[V1:[0-9]+]] = bitcast i8* %[[V0]] to i32* +; CHECK: ret i32* %[[V1]] + +define i32* @autoreleaseRVTailCall() { + %1 = call i8* @foo1() + %2 = bitcast i8* %1 to i32* + %3 = tail call i8* @objc_autoreleaseReturnValue(i8* %1) + ret i32* %2 +} |