diff clang/test/CodeGenObjC/arc-rv-attr.m @ 252:1f2b6ac9f198 llvm-original

LLVM16-1
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 18 Aug 2023 09:04:13 +0900
parents c4bab56944e8
children
line wrap: on
line diff
--- a/clang/test/CodeGenObjC/arc-rv-attr.m	Wed Nov 09 17:47:54 2022 +0900
+++ b/clang/test/CodeGenObjC/arc-rv-attr.m	Fri Aug 18 09:04:13 2023 +0900
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -no-opaque-pointers -triple arm64-apple-ios9 -fobjc-runtime=ios-9.0 -fobjc-arc -O -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK
-// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-macosx10 -fobjc-runtime=ios-9.0 -fobjc-arc -O -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK
+// RUN: %clang_cc1 -triple arm64-apple-ios9 -fobjc-runtime=ios-9.0 -fobjc-arc -O -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK
+// RUN: %clang_cc1 -triple x86_64-apple-macosx10 -fobjc-runtime=ios-9.0 -fobjc-arc -O -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK
 
 @class A;
 
@@ -10,12 +10,10 @@
   x = makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_assign()
-// CHECK:         [[X:%.*]] = alloca i8*
-// CHECK:         [[T0:%.*]] = call [[A:.*]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
+// CHECK:         [[X:%.*]] = alloca ptr
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
-// CHECK-NEXT:    [[T1:%.*]] = bitcast [[A]]* [[T0]] to i8*
-// CHECK-NEXT:    store i8* [[T1]], i8** [[X]]
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    store ptr [[T0]], ptr [[X]]
 // CHECK-NEXT:    lifetime.end
 // CHECK-NEXT:    ret void
 
@@ -24,16 +22,13 @@
   x = y = makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_assign_assign()
-// CHECK:         [[X:%.*]] = alloca i8*
-// CHECK:         [[Y:%.*]] = alloca i8*
-// CHECK:         [[T0:%.*]] = call [[A]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
+// CHECK:         [[X:%.*]] = alloca ptr
+// CHECK:         [[Y:%.*]] = alloca ptr
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
-// CHECK-NEXT:    [[T1:%.*]] = bitcast [[A]]* [[T0]] to i8*
-// CHECK-NEXT:    store i8* [[T1]], i8** [[Y]]
-// CHECK-NEXT:    store i8* [[T1]], i8** [[X]]
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    store ptr [[T0]], ptr [[Y]]
+// CHECK-NEXT:    store ptr [[T0]], ptr [[X]]
 // CHECK-NEXT:    lifetime.end
-// CHECK-NEXT:    bitcast
 // CHECK-NEXT:    lifetime.end
 // CHECK-NEXT:    ret void
 
@@ -43,20 +38,17 @@
   x = y = makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_strong_assign_assign()
-// CHECK:         [[X:%.*]] = alloca i8*
-// CHECK:         [[Y:%.*]] = alloca i8*
-// CHECK:         [[T0:%.*]] = call [[A]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
+// CHECK:         [[X:%.*]] = alloca ptr
+// CHECK:         [[Y:%.*]] = alloca ptr
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
-// CHECK-NEXT:    [[T1:%.*]] = bitcast [[A]]* [[T0]] to i8*
-// CHECK-NEXT:    store i8* [[T1]], i8** [[Y]]
-// CHECK-NEXT:    [[OLD:%.*]] = load i8*, i8** [[X]]
-// CHECK-NEXT:    store i8* [[T1]], i8** [[X]]
-// CHECK-NEXT:    call void @llvm.objc.release(i8* [[OLD]]
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    store ptr [[T0]], ptr [[Y]]
+// CHECK-NEXT:    [[OLD:%.*]] = load ptr, ptr [[X]]
+// CHECK-NEXT:    store ptr [[T0]], ptr [[X]]
+// CHECK-NEXT:    call void @llvm.objc.release(ptr [[OLD]]
 // CHECK-NEXT:    lifetime.end
-// CHECK-NEXT:    [[T0:%.*]] = load i8*, i8** [[X]]
-// CHECK-NEXT:    call void @llvm.objc.release(i8* [[T0]])
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    [[T0:%.*]] = load ptr, ptr [[X]]
+// CHECK-NEXT:    call void @llvm.objc.release(ptr [[T0]])
 // CHECK-NEXT:    lifetime.end
 // CHECK-NEXT:    ret void
 
@@ -66,20 +58,17 @@
   x = y = makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_assign_strong_assign()
-// CHECK:         [[X:%.*]] = alloca i8*
-// CHECK:         [[Y:%.*]] = alloca i8*
-// CHECK:         [[T0:%.*]] = call [[A]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
+// CHECK:         [[X:%.*]] = alloca ptr
+// CHECK:         [[Y:%.*]] = alloca ptr
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
-// CHECK-NEXT:    [[T1:%.*]] = bitcast [[A]]* [[T0]] to i8*
-// CHECK-NEXT:    [[OLD:%.*]] = load i8*, i8** [[Y]]
-// CHECK-NEXT:    store i8* [[T1]], i8** [[Y]]
-// CHECK-NEXT:    call void @llvm.objc.release(i8* [[OLD]]
-// CHECK-NEXT:    store i8* [[T1]], i8** [[X]]
-// CHECK-NEXT:    [[T0:%.*]] = load i8*, i8** [[Y]]
-// CHECK-NEXT:    call void @llvm.objc.release(i8* [[T0]])
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    [[OLD:%.*]] = load ptr, ptr [[Y]]
+// CHECK-NEXT:    store ptr [[T0]], ptr [[Y]]
+// CHECK-NEXT:    call void @llvm.objc.release(ptr [[OLD]]
+// CHECK-NEXT:    store ptr [[T0]], ptr [[X]]
+// CHECK-NEXT:    [[T0:%.*]] = load ptr, ptr [[Y]]
+// CHECK-NEXT:    call void @llvm.objc.release(ptr [[T0]])
 // CHECK-NEXT:    lifetime.end
-// CHECK-NEXT:    bitcast
 // CHECK-NEXT:    lifetime.end
 // CHECK-NEXT:    ret void
 
@@ -87,12 +76,10 @@
   __unsafe_unretained id x = makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_init()
-// CHECK:         [[X:%.*]] = alloca i8*
-// CHECK:         [[T0:%.*]] = call [[A]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
+// CHECK:         [[X:%.*]] = alloca ptr
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
-// CHECK-NEXT:    [[T1:%.*]] = bitcast [[A]]* [[T0]] to i8*
-// CHECK-NEXT:    store i8* [[T1]], i8** [[X]]
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    store ptr [[T0]], ptr [[X]]
 // CHECK-NEXT:    lifetime.end
 // CHECK-NEXT:    ret void
 
@@ -101,16 +88,13 @@
   __unsafe_unretained id y = x = makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_init_assignment()
-// CHECK:         [[X:%.*]] = alloca i8*
-// CHECK:         [[Y:%.*]] = alloca i8*
-// CHECK:         [[T0:%.*]] = call [[A]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
+// CHECK:         [[X:%.*]] = alloca ptr
+// CHECK:         [[Y:%.*]] = alloca ptr
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
-// CHECK-NEXT:    [[T1:%.*]] = bitcast [[A]]* [[T0]] to i8*
-// CHECK-NEXT:    store i8* [[T1]], i8** [[X]]
-// CHECK-NEXT:    store i8* [[T1]], i8** [[Y]]
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    store ptr [[T0]], ptr [[X]]
+// CHECK-NEXT:    store ptr [[T0]], ptr [[Y]]
 // CHECK-NEXT:    lifetime.end
-// CHECK-NEXT:    bitcast
 // CHECK-NEXT:    lifetime.end
 // CHECK-NEXT:    ret void
 
@@ -119,18 +103,15 @@
   __strong id y = x = makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_strong_init_assignment()
-// CHECK:         [[X:%.*]] = alloca i8*
-// CHECK:         [[Y:%.*]] = alloca i8*
-// CHECK:         [[T0:%.*]] = call [[A]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
+// CHECK:         [[X:%.*]] = alloca ptr
+// CHECK:         [[Y:%.*]] = alloca ptr
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
-// CHECK-NEXT:    [[T1:%.*]] = bitcast [[A]]* [[T0]] to i8*
-// CHECK-NEXT:    store i8* [[T1]], i8** [[X]]
-// CHECK-NEXT:    store i8* [[T1]], i8** [[Y]]
-// CHECK-NEXT:    [[T0:%.*]] = load i8*, i8** [[Y]]
-// CHECK-NEXT:    call void @llvm.objc.release(i8* [[T0]])
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    store ptr [[T0]], ptr [[X]]
+// CHECK-NEXT:    store ptr [[T0]], ptr [[Y]]
+// CHECK-NEXT:    [[T0:%.*]] = load ptr, ptr [[Y]]
+// CHECK-NEXT:    call void @llvm.objc.release(ptr [[T0]])
 // CHECK-NEXT:    lifetime.end
-// CHECK-NEXT:    bitcast
 // CHECK-NEXT:    lifetime.end
 // CHECK-NEXT:    ret void
 
@@ -139,20 +120,17 @@
   __unsafe_unretained id y = x = makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_init_strong_assignment()
-// CHECK:         [[X:%.*]] = alloca i8*
-// CHECK:         [[Y:%.*]] = alloca i8*
-// CHECK:         [[T0:%.*]] = call [[A]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
+// CHECK:         [[X:%.*]] = alloca ptr
+// CHECK:         [[Y:%.*]] = alloca ptr
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
-// CHECK-NEXT:    [[T1:%.*]] = bitcast [[A]]* [[T0]] to i8*
-// CHECK-NEXT:    [[OLD:%.*]] = load i8*, i8** [[X]]
-// CHECK-NEXT:    store i8* [[T1]], i8** [[X]]
-// CHECK-NEXT:    call void @llvm.objc.release(i8* [[OLD]])
-// CHECK-NEXT:    store i8* [[T1]], i8** [[Y]]
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    [[OLD:%.*]] = load ptr, ptr [[X]]
+// CHECK-NEXT:    store ptr [[T0]], ptr [[X]]
+// CHECK-NEXT:    call void @llvm.objc.release(ptr [[OLD]])
+// CHECK-NEXT:    store ptr [[T0]], ptr [[Y]]
 // CHECK-NEXT:    lifetime.end
-// CHECK-NEXT:    [[T0:%.*]] = load i8*, i8** [[X]]
-// CHECK-NEXT:    call void @llvm.objc.release(i8* [[T0]])
-// CHECK-NEXT:    bitcast
+// CHECK-NEXT:    [[T0:%.*]] = load ptr, ptr [[X]]
+// CHECK-NEXT:    call void @llvm.objc.release(ptr [[T0]])
 // CHECK-NEXT:    lifetime.end
 // CHECK-NEXT:    ret void
 
@@ -160,7 +138,7 @@
   makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_ignored()
-// CHECK:         [[T0:%.*]] = call [[A]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
 // CHECK-NEXT:    ret void
 
@@ -168,7 +146,7 @@
   (void) makeA();
 }
 // CHECK-LABEL: define{{.*}} void @test_cast_to_void()
-// CHECK:         [[T0:%.*]] = call [[A]]* @makeA() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
+// CHECK:         [[T0:%.*]] = call ptr @makeA() [ "clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
 // CHECK-NEXT:    call void (...) @llvm.objc.clang.arc.noop.use({{.*}} [[T0]])
 // CHECK-NEXT:    ret void