diff options
Diffstat (limited to 'test/CodeGenObjC/arc.m')
-rw-r--r-- | test/CodeGenObjC/arc.m | 76 |
1 files changed, 41 insertions, 35 deletions
diff --git a/test/CodeGenObjC/arc.m b/test/CodeGenObjC/arc.m index 7262dc8..00cdb6f 100644 --- a/test/CodeGenObjC/arc.m +++ b/test/CodeGenObjC/arc.m @@ -32,7 +32,7 @@ // ARC-NATIVE: declare i8* @objc_autorelease(i8*) // ARC-NATIVE: declare i8* @objc_retainAutorelease(i8*) -// CHECK: define void @test0 +// CHECK-LABEL: define void @test0 void test0(id x) { // CHECK: [[X:%.*]] = alloca i8* // CHECK-NEXT: [[PARM:%.*]] = call i8* @objc_retain(i8* {{.*}}) @@ -42,7 +42,7 @@ void test0(id x) { // CHECK-NEXT: ret void } -// CHECK: define i8* @test1(i8* +// CHECK-LABEL: define i8* @test1(i8* id test1(id x) { // CHECK: [[X:%.*]] = alloca i8* // CHECK-NEXT: [[Y:%.*]] = alloca i8* @@ -94,7 +94,7 @@ id test1(id x) { - (id) copy; @end -// CHECK: define void @test3_unelided() +// CHECK-LABEL: define void @test3_unelided() void test3_unelided() { extern void test3_helper(void); @@ -125,7 +125,7 @@ void test3_unelided() { // CHECK-NEXT: ret void } -// CHECK: define void @test3() +// CHECK-LABEL: define void @test3() void test3() { // CHECK: [[X:%.*]] = alloca i8* @@ -166,7 +166,7 @@ void test3() { // CHECK-NEXT: ret void } -// CHECK: define i8* @test4() +// CHECK-LABEL: define i8* @test4() id test4() { // Call to +alloc. // CHECK: load {{.*}}* @"\01L_OBJC_CLASSLIST_REFERENCES_ @@ -197,7 +197,7 @@ id test4() { } @end -// CHECK: define void @test5 +// CHECK-LABEL: define void @test5 void test5(Test5 *x, id y) { // Prologue. // CHECK: [[X:%.*]] = alloca [[TEST5:%.*]]*, @@ -241,7 +241,7 @@ void test5(Test5 *x, id y) { } id test6_helper(void) __attribute__((ns_returns_retained)); -// CHECK: define void @test6() +// CHECK-LABEL: define void @test6() void test6() { // CHECK: [[X:%.*]] = alloca i8* // CHECK-NEXT: [[CALL:%.*]] = call i8* @test6_helper() @@ -253,7 +253,7 @@ void test6() { } void test7_helper(id __attribute__((ns_consumed))); -// CHECK: define void @test7() +// CHECK-LABEL: define void @test7() void test7() { // CHECK: [[X:%.*]] = alloca i8* // CHECK-NEXT: store i8* null, i8** [[X]] @@ -284,7 +284,7 @@ void test10() { Test10 *x; id y = x.me.me; - // CHECK: define void @test10() + // CHECK-LABEL: define void @test10() // CHECK: [[X:%.*]] = alloca [[TEST10:%.*]]*, align // CHECK-NEXT: [[Y:%.*]] = alloca i8*, align // CHECK-NEXT: store [[TEST10]]* null, [[TEST10]]** [[X]] @@ -314,7 +314,7 @@ void test10() { } void test11(id (*f)(void) __attribute__((ns_returns_retained))) { - // CHECK: define void @test11( + // CHECK-LABEL: define void @test11( // CHECK: [[F:%.*]] = alloca i8* ()*, align // CHECK-NEXT: [[X:%.*]] = alloca i8*, align // CHECK-NEXT: store i8* ()* {{%.*}}, i8* ()** [[F]], align @@ -330,7 +330,7 @@ void test11(id (*f)(void) __attribute__((ns_returns_retained))) { void test12(void) { extern id test12_helper(void); - // CHECK: define void @test12() + // CHECK-LABEL: define void @test12() // CHECK: [[X:%.*]] = alloca i8*, align // CHECK-NEXT: [[Y:%.*]] = alloca i8*, align @@ -358,7 +358,7 @@ void test12(void) { // Indirect consuming calls. void test13(void) { - // CHECK: define void @test13() + // CHECK-LABEL: define void @test13() // CHECK: [[X:%.*]] = alloca i8*, align // CHECK-NEXT: store i8* null, i8** [[X]], align id x; @@ -458,7 +458,7 @@ void test13(void) { @end void test19() { - // CHECK: define void @test19() + // CHECK-LABEL: define void @test19() // CHECK: [[X:%.*]] = alloca [5 x i8*], align 16 // CHECK: call void @llvm.lifetime.start // CHECK-NEXT: [[T0:%.*]] = bitcast [5 x i8*]* [[X]] to i8* @@ -490,7 +490,7 @@ void test19() { } void test20(unsigned n) { - // CHECK: define void @test20 + // CHECK-LABEL: define void @test20 // CHECK: [[N:%.*]] = alloca i32, align 4 // CHECK-NEXT: [[SAVED_STACK:%.*]] = alloca i8* // CHECK-NEXT: store i32 {{%.*}}, i32* [[N]], align 4 @@ -531,7 +531,7 @@ void test20(unsigned n) { } void test21(unsigned n) { - // CHECK: define void @test21 + // CHECK-LABEL: define void @test21 // CHECK: [[N:%.*]] = alloca i32, align 4 // CHECK-NEXT: [[SAVED_STACK:%.*]] = alloca i8* // CHECK-NEXT: store i32 {{%.*}}, i32* [[N]], align 4 @@ -829,7 +829,7 @@ char *helper; @end __attribute__((ns_returns_retained)) id test32(void) { -// CHECK: define i8* @test32() +// CHECK-LABEL: define i8* @test32() // CHECK: [[CALL:%.*]] = call i8* @test32_helper() // CHECK-NEXT: [[T0:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[CALL]]) // CHECK-NEXT: ret i8* [[T0]] @@ -932,7 +932,7 @@ void test33(Test33 *ptr) { } -// CHECK: define void @test36 +// CHECK-LABEL: define void @test36 void test36(id x) { // CHECK: [[X:%.*]] = alloca i8* @@ -960,7 +960,7 @@ void test37(void) { Test37 *var; test37_helper(&var); - // CHECK: define void @test37() + // CHECK-LABEL: define void @test37() // CHECK: [[VAR:%.*]] = alloca [[TEST37:%.*]]*, // CHECK-NEXT: [[TEMP:%.*]] = alloca i8* // CHECK-NEXT: store [[TEST37]]* null, [[TEST37]]** [[VAR]] @@ -1037,7 +1037,7 @@ void test47(void) { extern id test47_helper(void); id x = x = test47_helper(); - // CHECK: define void @test47() + // CHECK-LABEL: define void @test47() // CHECK: [[X:%.*]] = alloca i8* // CHECK-NEXT: store i8* null, i8** [[X]] // CHECK-NEXT: [[CALL:%.*]] = call i8* @test47_helper() @@ -1057,7 +1057,7 @@ void test47(void) { void test48(void) { extern id test48_helper(void); __weak id x = x = test48_helper(); - // CHECK: define void @test48() + // CHECK-LABEL: define void @test48() // CHECK: [[X:%.*]] = alloca i8* // CHECK-NEXT: [[T0:%.*]] = call i8* @objc_initWeak(i8** [[X]], i8* null) // CHECK-NEXT: [[T1:%.*]] = call i8* @test48_helper() @@ -1072,7 +1072,7 @@ void test48(void) { void test49(void) { extern id test49_helper(void); __autoreleasing id x = x = test49_helper(); - // CHECK: define void @test49() + // CHECK-LABEL: define void @test49() // CHECK: [[X:%.*]] = alloca i8* // CHECK-NEXT: store i8* null, i8** [[X]] // CHECK-NEXT: [[CALL:%.*]] = call i8* @test49_helper() @@ -1113,13 +1113,16 @@ id test52(void) { id test52_helper(int) __attribute__((ns_returns_retained)); return ({ int x = 5; test52_helper(x); }); -// CHECK: define i8* @test52() +// CHECK-LABEL: define i8* @test52() // CHECK: [[X:%.*]] = alloca i32 +// CHECK-NEXT: [[TMPALLOCA:%.*]] = alloca i8* // CHECK-NEXT: store i32 5, i32* [[X]], // CHECK-NEXT: [[T0:%.*]] = load i32* [[X]], // CHECK-NEXT: [[T1:%.*]] = call i8* @test52_helper(i32 [[T0]]) -// CHECK-NEXT: [[T2:%.*]] = tail call i8* @objc_autoreleaseReturnValue(i8* [[T1]]) -// CHECK-NEXT: ret i8* [[T2]] +// CHECK-NEXT: store i8* [[T1]], i8** [[TMPALLOCA]] +// CHECK-NEXT: [[T2:%.*]] = load i8** [[TMPALLOCA]] +// CHECK-NEXT: [[T3:%.*]] = tail call i8* @objc_autoreleaseReturnValue(i8* [[T2]]) +// CHECK-NEXT: ret i8* [[T3]] } // rdar://problem/9400644 @@ -1127,17 +1130,20 @@ void test53(void) { id test53_helper(void); id x = ({ id y = test53_helper(); y; }); (void) x; -// CHECK: define void @test53() +// CHECK-LABEL: define void @test53() // CHECK: [[X:%.*]] = alloca i8*, // CHECK-NEXT: [[Y:%.*]] = alloca i8*, +// CHECK-NEXT: [[TMPALLOCA:%.*]] = alloca i8*, // CHECK-NEXT: [[T0:%.*]] = call i8* @test53_helper() // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]]) // CHECK-NEXT: store i8* [[T1]], i8** [[Y]], // CHECK-NEXT: [[T0:%.*]] = load i8** [[Y]], // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retain(i8* [[T0]]) +// CHECK-NEXT: store i8* [[T1]], i8** [[TMPALLOCA]] // CHECK-NEXT: [[T2:%.*]] = load i8** [[Y]] // CHECK-NEXT: call void @objc_release(i8* [[T2]]) -// CHECK-NEXT: store i8* [[T1]], i8** [[X]], +// CHECK-NEXT: [[T3:%.*]] = load i8** [[TMPALLOCA]] +// CHECK-NEXT: store i8* [[T3]], i8** [[X]], // CHECK-NEXT: load i8** [[X]], // CHECK-NEXT: [[T0:%.*]] = load i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[T0]]) @@ -1145,7 +1151,7 @@ void test53(void) { } // <rdar://problem/9758798> -// CHECK: define void @test54(i32 %first, ...) +// CHECK-LABEL: define void @test54(i32 %first, ...) void test54(int first, ...) { __builtin_va_list arglist; // CHECK: call void @llvm.va_start @@ -1185,7 +1191,7 @@ void test54(int first, ...) { @end void test56_test(void) { id x = [Test56 make]; - // CHECK: define void @test56_test() + // CHECK-LABEL: define void @test56_test() // CHECK: [[X:%.*]] = alloca i8*, align 8 // CHECK: [[T0:%.*]] = call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)( // CHECK-NEXT: store i8* [[T0]], i8** [[X]] @@ -1239,7 +1245,7 @@ void test59(void) { test59_body(); } - // CHECK: define void @test59() + // CHECK-LABEL: define void @test59() // CHECK: [[T0:%.*]] = call i8* @test59_getlock() // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]]) // CHECK-NEXT: call i32 @objc_sync_enter(i8* [[T1]]) @@ -1257,7 +1263,7 @@ void test59(void) { - (id) test61_id; @end void test61(void) { - // CHECK: define void @test61() + // CHECK-LABEL: define void @test61() // CHECK: [[Y:%.*]] = alloca i8*, align 8 extern id test61_make(void); @@ -1287,7 +1293,7 @@ void test61(void) { // rdar://problem/9891815 void test62(void) { - // CHECK: define void @test62() + // CHECK-LABEL: define void @test62() // CHECK: [[I:%.*]] = alloca i32, align 4 // CHECK-NEXT: [[CLEANUP_VALUE:%.*]] = alloca i8* // CHECK-NEXT: [[CLEANUP_REQUIRED:%.*]] = alloca i1 @@ -1359,7 +1365,7 @@ void test66(void) { extern id test66_arg(void); [test66_receiver() consume: test66_arg()]; } -// CHECK: define void @test66() +// CHECK-LABEL: define void @test66() // CHECK: [[T0:%.*]] = call [[TEST66:%.*]]* @test66_receiver() // CHECK-NEXT: [[T1:%.*]] = bitcast [[TEST66]]* [[T0]] to i8* // CHECK-NEXT: [[T2:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T1]]) @@ -1383,7 +1389,7 @@ Class test67_helper(void); void test67(void) { Class cl = test67_helper(); } -// CHECK: define void @test67() +// CHECK-LABEL: define void @test67() // CHECK: [[CL:%.*]] = alloca i8*, align 8 // CHECK-NEXT: [[T0:%.*]] = call i8* @test67_helper() // CHECK-NEXT: store i8* [[T0]], i8** [[CL]], align 8 @@ -1393,7 +1399,7 @@ Class test68_helper(void); void test68(void) { __strong Class cl = test67_helper(); } -// CHECK: define void @test68() +// CHECK-LABEL: define void @test68() // CHECK: [[CL:%.*]] = alloca i8*, align 8 // CHECK-NEXT: [[T0:%.*]] = call i8* @test67_helper() // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]]) @@ -1415,7 +1421,7 @@ void test68(void) { // rdar://problem/10907547 void test70(id i) { - // CHECK: define void @test70 + // CHECK-LABEL: define void @test70 // CHECK: store i8* null, i8** // CHECK: store i8* null, i8** // CHECK: [[ID:%.*]] = call i8* @objc_retain(i8* |