diff options
Diffstat (limited to 'clang/test/CodeGenObjC/arc.m')
-rw-r--r-- | clang/test/CodeGenObjC/arc.m | 100 |
1 files changed, 1 insertions, 99 deletions
diff --git a/clang/test/CodeGenObjC/arc.m b/clang/test/CodeGenObjC/arc.m index 40634dc53c6..8fc68ca2ffa 100644 --- a/clang/test/CodeGenObjC/arc.m +++ b/clang/test/CodeGenObjC/arc.m @@ -49,16 +49,12 @@ id test1(id x) { // CHECK-NEXT: alloca i32 // CHECK-NEXT: [[PARM:%.*]] = call i8* @objc_retain(i8* {{%.*}}) // CHECK-NEXT: store i8* [[PARM]], i8** [[X]] - // CHECK-NEXT: [[YPTR1:%.*]] = bitcast i8** [[Y]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[YPTR1]]) // CHECK-NEXT: store i8* null, i8** [[Y]] // CHECK-NEXT: [[T0:%.*]] = load i8** [[Y]] // CHECK-NEXT: [[RET:%.*]] = call i8* @objc_retain(i8* [[T0]]) // CHECK-NEXT: store i32 // CHECK-NEXT: [[T0:%.*]] = load i8** [[Y]] // CHECK-NEXT: call void @objc_release(i8* [[T0]]) - // CHECK-NEXT: [[YPTR2:%.*]] = bitcast i8** [[Y]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[YPTR2]]) // CHECK-NEXT: [[T1:%.*]] = load i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[T1]]) // CHECK-NEXT: [[T1:%.*]] = tail call i8* @objc_autoreleaseReturnValue(i8* [[RET]]) @@ -103,8 +99,6 @@ void test3_unelided() { extern void test3_helper(void); // CHECK: [[X:%.*]] = alloca [[TEST3:%.*]]* - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast [[TEST3]]** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: store [[TEST3]]* null, [[TEST3]]** [[X]], align Test3 *x; @@ -128,16 +122,12 @@ void test3_unelided() { // CHECK-NEXT: [[T0:%.*]] = load [[TEST3]]** [[X]] // CHECK-NEXT: [[T1:%.*]] = bitcast [[TEST3]]* [[T0]] to i8* // CHECK-NEXT: call void @objc_release(i8* [[T1]]) [[NUW]] - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast [[TEST3]]** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void } // CHECK-LABEL: define void @test3() void test3() { // CHECK: [[X:%.*]] = alloca i8* - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) id x = [[Test3 alloc] initWith: 5]; @@ -172,8 +162,7 @@ void test3() { // Cleanup for x. // CHECK-NEXT: [[TMP:%.*]] = load i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[TMP]]) [[NUW]] - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) + // CHECK-NEXT: ret void } @@ -255,14 +244,10 @@ id test6_helper(void) __attribute__((ns_returns_retained)); // CHECK-LABEL: define void @test6() void test6() { // CHECK: [[X:%.*]] = alloca i8* - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: [[CALL:%.*]] = call i8* @test6_helper() // CHECK-NEXT: store i8* [[CALL]], i8** [[X]] // CHECK-NEXT: [[T1:%.*]] = load i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[T1]]) [[NUW]], !clang.imprecise_release - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void id x = test6_helper(); } @@ -271,16 +256,12 @@ void test7_helper(id __attribute__((ns_consumed))); // CHECK-LABEL: define void @test7() void test7() { // CHECK: [[X:%.*]] = alloca i8* - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: store i8* null, i8** [[X]] // CHECK-NEXT: [[T0:%.*]] = load i8** [[X]] // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retain(i8* [[T0]]) [[NUW]] // CHECK-NEXT: call void @test7_helper(i8* [[T1]]) // CHECK-NEXT: [[T1:%.*]] = load i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[T1]]) [[NUW]], !clang.imprecise_release - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void id x; test7_helper(x); @@ -290,13 +271,9 @@ id test8_helper(void) __attribute__((ns_returns_retained)); void test8() { __unsafe_unretained id x = test8_helper(); // CHECK: [[X:%.*]] = alloca i8* - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: [[T0:%.*]] = call i8* @test8_helper() // CHECK-NEXT: store i8* [[T0]], i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[T0]]) [[NUW]], !clang.imprecise_release - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void } @@ -310,11 +287,7 @@ void test10() { // CHECK-LABEL: define void @test10() // CHECK: [[X:%.*]] = alloca [[TEST10:%.*]]*, align // CHECK-NEXT: [[Y:%.*]] = alloca i8*, align - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast [[TEST10]]** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: store [[TEST10]]* null, [[TEST10]]** [[X]] - // CHECK-NEXT: [[YPTR1:%.*]] = bitcast i8** [[Y]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[YPTR1]]) // CHECK-NEXT: load [[TEST10]]** [[X]], align // CHECK-NEXT: load i8** @"\01L_OBJC_SELECTOR_REFERENCES_{{[0-9]*}}" // CHECK-NEXT: bitcast @@ -334,13 +307,9 @@ void test10() { // CHECK-NEXT: call void @objc_release(i8* [[T0]]) // CHECK-NEXT: [[T0:%.*]] = load i8** [[Y]] // CHECK-NEXT: call void @objc_release(i8* [[T0]]) - // CHECK-NEXT: [[YPTR2:%.*]] = bitcast i8** [[Y]] to i8* - // CHECK-NEXT: void @llvm.lifetime.end(i64 8, i8* [[YPTR2]]) // CHECK-NEXT: [[T0:%.*]] = load [[TEST10]]** [[X]] // CHECK-NEXT: [[T1:%.*]] = bitcast [[TEST10]]* [[T0]] to i8* // CHECK-NEXT: call void @objc_release(i8* [[T1]]) - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast [[TEST10]]** [[X]] to i8* - // CHECK-NEXT: void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void } @@ -349,15 +318,11 @@ void test11(id (*f)(void) __attribute__((ns_returns_retained))) { // CHECK: [[F:%.*]] = alloca i8* ()*, align // CHECK-NEXT: [[X:%.*]] = alloca i8*, align // CHECK-NEXT: store i8* ()* {{%.*}}, i8* ()** [[F]], align - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: [[T0:%.*]] = load i8* ()** [[F]], align // CHECK-NEXT: [[T1:%.*]] = call i8* [[T0]]() // CHECK-NEXT: store i8* [[T1]], i8** [[X]], align // CHECK-NEXT: [[T3:%.*]] = load i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[T3]]) [[NUW]], !clang.imprecise_release - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void id x = f(); } @@ -370,8 +335,6 @@ void test12(void) { // CHECK-NEXT: [[Y:%.*]] = alloca i8*, align __weak id x = test12_helper(); - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: [[T0:%.*]] = call i8* @test12_helper() // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]]) // CHECK-NEXT: call i8* @objc_initWeak(i8** [[X]], i8* [[T1]]) @@ -384,18 +347,12 @@ void test12(void) { // CHECK-NEXT: call void @objc_release(i8* [[T1]]) id y = x; - // CHECK-NEXT: [[YPTR1:%.*]] = bitcast i8** [[Y]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[YPTR1]]) // CHECK-NEXT: [[T2:%.*]] = call i8* @objc_loadWeakRetained(i8** [[X]]) // CHECK-NEXT: store i8* [[T2]], i8** [[Y]], align // CHECK-NEXT: [[T4:%.*]] = load i8** [[Y]] // CHECK-NEXT: call void @objc_release(i8* [[T4]]) [[NUW]], !clang.imprecise_release - // CHECK-NEXT: [[YPTR2:%.*]] = bitcast i8** [[Y]] to i8* - // CHECK-NEXT: void @llvm.lifetime.end(i64 8, i8* [[YPTR2]]) // CHECK-NEXT: call void @objc_destroyWeak(i8** [[X]]) - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK: ret void } @@ -403,8 +360,6 @@ void test12(void) { void test13(void) { // CHECK-LABEL: define void @test13() // CHECK: [[X:%.*]] = alloca i8*, align - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: store i8* null, i8** [[X]], align id x; @@ -430,8 +385,6 @@ void test13(void) { // CHECK-NEXT: [[T0:%.*]] = load i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[T0]]) [[NUW]] - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void } @@ -910,8 +863,6 @@ void test33(Test33 *ptr) { // CHECK-NEXT: objc_retain // CHECK-NEXT: bitcast // CHECK-NEXT: store - // CHECK-NEXT: bitcast - // CHECK-NEXT: call void @llvm.lifetime.start // CHECK-NEXT: store [[A_T]]* null, [[A_T]]** [[A]] // CHECK-NEXT: load [[TEST33]]** [[PTR]] @@ -974,8 +925,6 @@ void test33(Test33 *ptr) { // CHECK-NEXT: load // CHECK-NEXT: bitcast // CHECK-NEXT: objc_release - // CHECK-NEXT: bitcast - // CHECK-NEXT: call void @llvm.lifetime.end // CHECK-NEXT: load // CHECK-NEXT: bitcast // CHECK-NEXT: objc_release @@ -1014,8 +963,6 @@ void test37(void) { // CHECK-LABEL: define void @test37() // CHECK: [[VAR:%.*]] = alloca [[TEST37:%.*]]*, // CHECK-NEXT: [[TEMP:%.*]] = alloca i8* - // CHECK-NEXT: [[VARPTR1:%.*]] = bitcast [[TEST37]]** [[VAR]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[VARPTR1]]) // CHECK-NEXT: store [[TEST37]]* null, [[TEST37]]** [[VAR]] // CHECK-NEXT: [[W0:%.*]] = load [[TEST37]]** [[VAR]] @@ -1036,8 +983,6 @@ void test37(void) { // CHECK-NEXT: [[T0:%.*]] = load [[TEST37]]** [[VAR]] // CHECK-NEXT: [[T1:%.*]] = bitcast [[TEST37]]* [[T0]] to i8* // CHECK-NEXT: call void @objc_release(i8* [[T1]]) - // CHECK-NEXT: [[VARPTR2:%.*]] = bitcast [[TEST37]]** [[VAR]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[VARPTR2]]) // CHECK-NEXT: ret void } @@ -1094,8 +1039,6 @@ void test47(void) { // CHECK-LABEL: define void @test47() // CHECK: [[X:%.*]] = alloca i8* - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: store i8* null, i8** [[X]] // CHECK-NEXT: [[CALL:%.*]] = call i8* @test47_helper() // CHECK-NEXT: [[T0:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[CALL]]) @@ -1108,8 +1051,6 @@ void test47(void) { // CHECK-NEXT: call void @objc_release(i8* [[T3]]) // CHECK-NEXT: [[T4:%.*]] = load i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[T4]]) - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void } @@ -1118,8 +1059,6 @@ void test48(void) { __weak id x = x = test48_helper(); // CHECK-LABEL: define void @test48() // CHECK: [[X:%.*]] = alloca i8* - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: [[T0:%.*]] = call i8* @objc_initWeak(i8** [[X]], i8* null) // CHECK-NEXT: [[T1:%.*]] = call i8* @test48_helper() // CHECK-NEXT: [[T2:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T1]]) @@ -1127,8 +1066,6 @@ void test48(void) { // CHECK-NEXT: [[T4:%.*]] = call i8* @objc_storeWeak(i8** [[X]], i8* [[T3]]) // CHECK-NEXT: call void @objc_release(i8* [[T2]]) // CHECK-NEXT: call void @objc_destroyWeak(i8** [[X]]) - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void } @@ -1137,8 +1074,6 @@ void test49(void) { __autoreleasing id x = x = test49_helper(); // CHECK-LABEL: define void @test49() // CHECK: [[X:%.*]] = alloca i8* - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK-NEXT: store i8* null, i8** [[X]] // CHECK-NEXT: [[CALL:%.*]] = call i8* @test49_helper() // CHECK-NEXT: [[T0:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[CALL]]) @@ -1146,8 +1081,6 @@ void test49(void) { // CHECK-NEXT: store i8* [[T2]], i8** [[X]] // CHECK-NEXT: [[T3:%.*]] = call i8* @objc_retainAutorelease(i8* [[T1]]) // CHECK-NEXT: store i8* [[T3]], i8** [[X]] - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void } @@ -1183,14 +1116,10 @@ id test52(void) { // CHECK-LABEL: define i8* @test52() // CHECK: [[X:%.*]] = alloca i32 // CHECK-NEXT: [[TMPALLOCA:%.*]] = alloca i8* -// CHECK-NEXT: [[XPTR1:%.*]] = bitcast i32* [[X]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start(i64 4, i8* [[XPTR1]]) // CHECK-NEXT: store i32 5, i32* [[X]], // CHECK-NEXT: [[T0:%.*]] = load i32* [[X]], // CHECK-NEXT: [[T1:%.*]] = call i8* @test52_helper(i32 [[T0]]) // CHECK-NEXT: store i8* [[T1]], i8** [[TMPALLOCA]] -// CHECK-NEXT: [[XPTR2:%.*]] = bitcast i32* [[X]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.end(i64 4, i8* [[XPTR2]]) // CHECK-NEXT: [[T2:%.*]] = load i8** [[TMPALLOCA]] // CHECK-NEXT: [[T3:%.*]] = tail call i8* @objc_autoreleaseReturnValue(i8* [[T2]]) // CHECK-NEXT: ret i8* [[T3]] @@ -1205,10 +1134,6 @@ void test53(void) { // CHECK: [[X:%.*]] = alloca i8*, // CHECK-NEXT: [[Y:%.*]] = alloca i8*, // CHECK-NEXT: [[TMPALLOCA:%.*]] = alloca i8*, -// CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) -// CHECK-NEXT: [[YPTR1:%.*]] = bitcast i8** [[Y]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[YPTR1]]) // CHECK-NEXT: [[T0:%.*]] = call i8* @test53_helper() // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]]) // CHECK-NEXT: store i8* [[T1]], i8** [[Y]], @@ -1217,15 +1142,11 @@ void test53(void) { // CHECK-NEXT: store i8* [[T1]], i8** [[TMPALLOCA]] // CHECK-NEXT: [[T2:%.*]] = load i8** [[Y]] // CHECK-NEXT: call void @objc_release(i8* [[T2]]) -// CHECK-NEXT: [[YPTR2:%.*]] = bitcast i8** [[Y]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[YPTR2]]) // 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]]) -// CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void } @@ -1272,14 +1193,10 @@ void test56_test(void) { id x = [Test56 make]; // CHECK-LABEL: define void @test56_test() // CHECK: [[X:%.*]] = alloca i8*, align 8 - // CHECK-NEXT: [[XPTR1:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[XPTR1]]) // CHECK: [[T0:%.*]] = call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)( // CHECK-NEXT: store i8* [[T0]], i8** [[X]] // CHECK-NEXT: [[T0:%.*]] = load i8** [[X]] // CHECK-NEXT: call void @objc_release(i8* [[T0]]) - // CHECK-NEXT: [[XPTR2:%.*]] = bitcast i8** [[X]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[XPTR2]]) // CHECK-NEXT: ret void } @@ -1359,8 +1276,6 @@ void test61(void) { // CHECK-NEXT: call void @objc_release(i8* [[T1]]) [test61_make() performSelector: @selector(test61_void)]; - // CHECK-NEXT: [[YPTR1:%.*]] = bitcast i8** [[Y]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[YPTR1]]) // CHECK-NEXT: [[T0:%.*]] = call i8* @test61_make() // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]]) // CHECK-NEXT: [[T2:%.*]] = load i8** @"\01L_OBJC_SELECTOR_REFERENCES_ @@ -1373,8 +1288,6 @@ void test61(void) { // CHECK-NEXT: [[T0:%.*]] = load i8** [[Y]] // CHECK-NEXT: call void @objc_release(i8* [[T0]]) - // CHECK-NEXT: [[YPTR2:%.*]] = bitcast i8** [[Y]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[YPTR2]]) // CHECK-NEXT: ret void } @@ -1382,14 +1295,11 @@ void test61(void) { void test62(void) { // CHECK-LABEL: define void @test62() // CHECK: [[I:%.*]] = alloca i32, align 4 - // CHECK-NEXT: [[CLEANUP_DEST_SLOT:%.*]] = alloca i32 // CHECK-NEXT: [[CLEANUP_VALUE:%.*]] = alloca i8* // CHECK-NEXT: [[CLEANUP_REQUIRED:%.*]] = alloca i1 extern id test62_make(void); extern void test62_body(void); - // CHECK-NEXT: [[IPTR:%.*]] = bitcast i32* [[I]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start(i64 4, i8* [[IPTR]]) // CHECK-NEXT: store i32 0, i32* [[I]], align 4 // CHECK-NEXT: br label @@ -1481,12 +1391,8 @@ void test67(void) { } // CHECK-LABEL: define void @test67() // CHECK: [[CL:%.*]] = alloca i8*, align 8 -// CHECK-NEXT: [[CLPTR1:%.*]] = bitcast i8** [[CL]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[CLPTR1]]) // CHECK-NEXT: [[T0:%.*]] = call i8* @test67_helper() // CHECK-NEXT: store i8* [[T0]], i8** [[CL]], align 8 -// CHECK-NEXT: [[CLPTR2:%.*]] = bitcast i8** [[CL]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[CLPTR2]]) // CHECK-NEXT: ret void Class test68_helper(void); @@ -1495,15 +1401,11 @@ void test68(void) { } // CHECK-LABEL: define void @test68() // CHECK: [[CL:%.*]] = alloca i8*, align 8 -// CHECK-NEXT: [[CLPTR1:%.*]] = bitcast i8** [[CL]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start(i64 8, i8* [[CLPTR1]]) // CHECK-NEXT: [[T0:%.*]] = call i8* @test67_helper() // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]]) // CHECK-NEXT: store i8* [[T1]], i8** [[CL]], align 8 // CHECK-NEXT: [[T2:%.*]] = load i8** [[CL]] // CHECK-NEXT: call void @objc_release(i8* [[T2]]) -// CHECK-NEXT: [[CLPTR2:%.*]] = bitcast i8** [[CL]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[CLPTR2]]) // CHECK-NEXT: ret void // rdar://problem/10564852 |