comparison clang/test/CodeGenObjC/arc-ternary-op.m @ 236:c4bab56944e8 llvm-original

LLVM 16
author kono
date Wed, 09 Nov 2022 17:45:10 +0900
parents 79ff65ed7e25
children 1f2b6ac9f198
comparison
equal deleted inserted replaced
232:70dce7da266c 236:c4bab56944e8
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fblocks -fobjc-arc -fobjc-runtime-has-weak -O2 -disable-llvm-passes -o - %s | FileCheck %s 1 // RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin10 -emit-llvm -fblocks -fobjc-arc -fobjc-runtime-has-weak -O2 -disable-llvm-passes -o - %s | FileCheck %s
2 2
3 id g0, g1; 3 id g0, g1;
4 4
5 void test0(_Bool cond) { 5 void test0(_Bool cond) {
6 id test0_helper(void) __attribute__((ns_returns_retained)); 6 id test0_helper(void) __attribute__((ns_returns_retained));
70 // CHECK-NEXT: br i1 [[T0]], 70 // CHECK-NEXT: br i1 [[T0]],
71 // CHECK: [[T0:%.*]] = load i8*, i8** [[ARG]] 71 // CHECK: [[T0:%.*]] = load i8*, i8** [[ARG]]
72 // CHECK-NEXT: store i8* [[T0]], i8** [[TEMP1]] 72 // CHECK-NEXT: store i8* [[T0]], i8** [[TEMP1]]
73 // CHECK-NEXT: br label 73 // CHECK-NEXT: br label
74 // CHECK: [[W:%.*]] = phi i8* [ [[T0]], {{%.*}} ], [ undef, {{%.*}} ] 74 // CHECK: [[W:%.*]] = phi i8* [ [[T0]], {{%.*}} ], [ undef, {{%.*}} ]
75 // CHECK-NEXT: call void @test1_sink(i8** [[T1]]) 75 // CHECK-NEXT: call void @test1_sink(i8** noundef [[T1]])
76 // CHECK-NEXT: [[T0:%.*]] = icmp eq i8** [[ARG]], null 76 // CHECK-NEXT: [[T0:%.*]] = icmp eq i8** [[ARG]], null
77 // CHECK-NEXT: br i1 [[T0]], 77 // CHECK-NEXT: br i1 [[T0]],
78 // CHECK: [[T0:%.*]] = load i8*, i8** [[TEMP1]] 78 // CHECK: [[T0:%.*]] = load i8*, i8** [[TEMP1]]
79 // CHECK-NEXT: [[T1:%.*]] = call i8* @llvm.objc.retain(i8* [[T0]]) 79 // CHECK-NEXT: [[T1:%.*]] = call i8* @llvm.objc.retain(i8* [[T0]])
80 // CHECK-NEXT: call void (...) @llvm.objc.clang.arc.use(i8* [[W]]) [[NUW]] 80 // CHECK-NEXT: call void (...) @llvm.objc.clang.arc.use(i8* [[W]]) [[NUW]]
93 // CHECK: [[T0:%.*]] = call i8* @llvm.objc.loadWeakRetained(i8** [[ARG]]) 93 // CHECK: [[T0:%.*]] = call i8* @llvm.objc.loadWeakRetained(i8** [[ARG]])
94 // CHECK-NEXT: store i8* [[T0]], i8** [[CONDCLEANUPSAVE]] 94 // CHECK-NEXT: store i8* [[T0]], i8** [[CONDCLEANUPSAVE]]
95 // CHECK-NEXT: store i1 true, i1* [[CONDCLEANUP]] 95 // CHECK-NEXT: store i1 true, i1* [[CONDCLEANUP]]
96 // CHECK-NEXT: store i8* [[T0]], i8** [[TEMP2]] 96 // CHECK-NEXT: store i8* [[T0]], i8** [[TEMP2]]
97 // CHECK-NEXT: br label 97 // CHECK-NEXT: br label
98 // CHECK: call void @test1_sink(i8** [[T1]]) 98 // CHECK: call void @test1_sink(i8** noundef [[T1]])
99 // CHECK-NEXT: [[T0:%.*]] = icmp eq i8** [[ARG]], null 99 // CHECK-NEXT: [[T0:%.*]] = icmp eq i8** [[ARG]], null
100 // CHECK-NEXT: br i1 [[T0]], 100 // CHECK-NEXT: br i1 [[T0]],
101 // CHECK: [[T0:%.*]] = load i8*, i8** [[TEMP2]] 101 // CHECK: [[T0:%.*]] = load i8*, i8** [[TEMP2]]
102 // CHECK-NEXT: call i8* @llvm.objc.storeWeak(i8** [[ARG]], i8* [[T0]]) 102 // CHECK-NEXT: call i8* @llvm.objc.storeWeak(i8** [[ARG]], i8* [[T0]])
103 // CHECK-NEXT: br label 103 // CHECK-NEXT: br label
129 // CHECK: [[T0:%.*]] = load i32, i32* [[COND]], 129 // CHECK: [[T0:%.*]] = load i32, i32* [[COND]],
130 // CHECK-NEXT: icmp ne i32 [[T0]], 0 130 // CHECK-NEXT: icmp ne i32 [[T0]], 0
131 // CHECK-NEXT: store i1 false, i1* [[RUN_CLEANUP]] 131 // CHECK-NEXT: store i1 false, i1* [[RUN_CLEANUP]]
132 // CHECK-NEXT: br i1 132 // CHECK-NEXT: br i1
133 // Within true branch, cleanup enabled. 133 // Within true branch, cleanup enabled.
134 // CHECK: [[T0:%.*]] = call i8* @test2_producer() 134 // CHECK: [[T1:%.*]] = call i8* @test2_producer() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
135 // CHECK-NEXT: [[T1:%.*]] = notail call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T0]]) 135 // CHECK-NEXT: call void (...) @llvm.objc.clang.arc.noop.use(i8* [[T1]])
136 // CHECK-NEXT: store i8* [[T1]], i8** [[CLEANUP_SAVE]] 136 // CHECK-NEXT: store i8* [[T1]], i8** [[CLEANUP_SAVE]]
137 // CHECK-NEXT: store i1 true, i1* [[RUN_CLEANUP]] 137 // CHECK-NEXT: store i1 true, i1* [[RUN_CLEANUP]]
138 // CHECK-NEXT: br label 138 // CHECK-NEXT: br label
139 // Join point for conditional operator; retain immediately. 139 // Join point for conditional operator; retain immediately.
140 // CHECK: [[T0:%.*]] = phi i8* [ [[T1]], {{%.*}} ], [ null, {{%.*}} ] 140 // CHECK: [[T0:%.*]] = phi i8* [ [[T1]], {{%.*}} ], [ null, {{%.*}} ]