| ; 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 |
| } |