Mercurial > hg > CbC > CbC_llvm
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, {{%.*}} ] |