xref: /llvm-project/llvm/test/Transforms/ObjCARC/weak.ll (revision b396817c61cd07cfa31b5f74998b8448bfdeb07f)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=objc-arc -S < %s | FileCheck %s
3
4declare ptr @llvm.objc.initWeak(ptr, ptr)
5declare ptr @llvm.objc.storeWeak(ptr, ptr)
6declare ptr @llvm.objc.loadWeak(ptr)
7declare void @llvm.objc.destroyWeak(ptr)
8declare ptr @llvm.objc.loadWeakRetained(ptr)
9declare void @llvm.objc.moveWeak(ptr, ptr)
10declare void @llvm.objc.copyWeak(ptr, ptr)
11
12; If the pointer-to-weak-pointer is null, it's undefined behavior.
13
14define void @test0(ptr %p, ptr %q) {
15; CHECK-LABEL: @test0(
16; CHECK-NEXT:  entry:
17; CHECK-NEXT:    store i1 true, ptr poison, align 1
18; CHECK-NEXT:    store i1 true, ptr poison, align 1
19; CHECK-NEXT:    store i1 true, ptr poison, align 1
20; CHECK-NEXT:    store i1 true, ptr poison, align 1
21; CHECK-NEXT:    store i1 true, ptr poison, align 1
22; CHECK-NEXT:    store i1 true, ptr poison, align 1
23; CHECK-NEXT:    store i1 true, ptr poison, align 1
24; CHECK-NEXT:    store i1 true, ptr poison, align 1
25; CHECK-NEXT:    store i1 true, ptr poison, align 1
26; CHECK-NEXT:    store i1 true, ptr poison, align 1
27; CHECK-NEXT:    store i1 true, ptr poison, align 1
28; CHECK-NEXT:    store i1 true, ptr poison, align 1
29; CHECK-NEXT:    store i1 true, ptr poison, align 1
30; CHECK-NEXT:    store i1 true, ptr poison, align 1
31; CHECK-NEXT:    store i1 true, ptr poison, align 1
32; CHECK-NEXT:    store i1 true, ptr poison, align 1
33; CHECK-NEXT:    store i1 true, ptr poison, align 1
34; CHECK-NEXT:    store i1 true, ptr poison, align 1
35; CHECK-NEXT:    ret void
36;
37entry:
38  call ptr @llvm.objc.storeWeak(ptr null, ptr %p)
39  call ptr @llvm.objc.storeWeak(ptr undef, ptr %p)
40  call ptr @llvm.objc.loadWeakRetained(ptr null)
41  call ptr @llvm.objc.loadWeakRetained(ptr undef)
42  call ptr @llvm.objc.loadWeak(ptr null)
43  call ptr @llvm.objc.loadWeak(ptr undef)
44  call ptr @llvm.objc.initWeak(ptr null, ptr %p)
45  call ptr @llvm.objc.initWeak(ptr undef, ptr %p)
46  call void @llvm.objc.destroyWeak(ptr null)
47  call void @llvm.objc.destroyWeak(ptr undef)
48
49  call void @llvm.objc.copyWeak(ptr null, ptr %q)
50  call void @llvm.objc.copyWeak(ptr undef, ptr %q)
51  call void @llvm.objc.copyWeak(ptr %q, ptr null)
52  call void @llvm.objc.copyWeak(ptr %q, ptr undef)
53
54  call void @llvm.objc.moveWeak(ptr null, ptr %q)
55  call void @llvm.objc.moveWeak(ptr undef, ptr %q)
56  call void @llvm.objc.moveWeak(ptr %q, ptr null)
57  call void @llvm.objc.moveWeak(ptr %q, ptr undef)
58
59  ret void
60}
61