brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · d86e2bf Raw
64 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-runtime-has-weak -fblocks -fobjc-arc -o - %s | FileCheck %s2 3// A test to ensure that we generate fused calls at -O0.4 5@class Test0;6Test0 *test0(void) {7  extern Test0 *test0_helper;8  return test0_helper;9 10  // CHECK:      [[LD:%.*]] = load ptr, ptr @test0_helper11  // CHECK-NEXT: [[T1:%.*]] = tail call ptr @llvm.objc.retainAutoreleaseReturnValue(ptr [[LD]])12  // CHECK-NEXT: ret ptr [[T1]]13}14 15id test1(void) {16  extern id test1_helper;17  return test1_helper;18 19  // CHECK:      [[LD:%.*]] = load ptr, ptr @test1_helper20  // CHECK-NEXT: [[T0:%.*]] = tail call ptr @llvm.objc.retainAutoreleaseReturnValue(ptr [[LD]])21  // CHECK-NEXT: ret ptr [[T0]]22}23 24void test2(void) {25  // CHECK:      [[X:%.*]] = alloca ptr26  // CHECK-NEXT: store ptr null, ptr [[X]]27  // CHECK-NEXT: call void @llvm.objc.destroyWeak(ptr [[X]])28  // CHECK-NEXT: ret void29  __weak id x;30}31 32id test3(void) {33  extern id test3_helper(void);34  // CHECK:      [[T0:%.*]] = call ptr @test3_helper()35  // CHECK-NEXT: ret ptr [[T0]]36  return test3_helper();37}38 39@interface Test4 { id x; } @end40@interface Test4_sub : Test4 { id y; } @end41Test4 *test4(void) {42  extern Test4_sub *test4_helper(void);43  // CHECK:      [[T0:%.*]] = call ptr @test4_helper()44  // CHECK-NEXT: ret ptr [[T0]]45  return test4_helper();46}47 48@class Test5;49void test5(void) {50  Test5 *x, *y;51  if ((x = y))52    y = 0;53 54// CHECK-LABEL:    define{{.*}} void @test5()55// CHECK:      [[X:%.*]] = alloca ptr,56// CHECK-NEXT: [[Y:%.*]] = alloca ptr,57// CHECK-NEXT: store ptr null, ptr [[X]],58// CHECK-NEXT: store ptr null, ptr [[Y]],59// CHECK-NEXT: [[T0:%.*]] = load ptr, ptr [[Y]],60// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr [[X]], ptr [[T0]])61// CHECK-NEXT: [[T3:%.*]] = icmp ne ptr [[T0]], null62// CHECK-NEXT: br i1 [[T3]],63}64