Mercurial > hg > CbC > CbC_llvm
comparison clang/test/CodeGenCXX/stack-reuse.cpp @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | 0572611fdcc8 |
children | c4bab56944e8 |
comparison
equal
deleted
inserted
replaced
173:0572611fdcc8 | 207:2e18cbf3894f |
---|---|
31 | 31 |
32 // Prevent mangling of function names. | 32 // Prevent mangling of function names. |
33 extern "C" { | 33 extern "C" { |
34 | 34 |
35 void small_rvoed_unnamed_temporary_object() { | 35 void small_rvoed_unnamed_temporary_object() { |
36 // CHECK-LABEL: define void @small_rvoed_unnamed_temporary_object | 36 // CHECK-LABEL: define{{.*}} void @small_rvoed_unnamed_temporary_object |
37 // CHECK: call void @llvm.lifetime.start | 37 // CHECK: call void @llvm.lifetime.start |
38 // CHECK: call void @_Z9foo_smallv | 38 // CHECK: call void @_Z9foo_smallv |
39 // CHECK: call void @llvm.lifetime.end | 39 // CHECK: call void @llvm.lifetime.end |
40 // CHECK: call void @llvm.lifetime.start | 40 // CHECK: call void @llvm.lifetime.start |
41 // CHECK: call void @_Z9foo_smallv | 41 // CHECK: call void @_Z9foo_smallv |
44 foo_small(); | 44 foo_small(); |
45 foo_small(); | 45 foo_small(); |
46 } | 46 } |
47 | 47 |
48 void large_rvoed_unnamed_temporary_object() { | 48 void large_rvoed_unnamed_temporary_object() { |
49 // CHECK-LABEL: define void @large_rvoed_unnamed_temporary_object | 49 // CHECK-LABEL: define{{.*}} void @large_rvoed_unnamed_temporary_object |
50 // CHECK: call void @llvm.lifetime.start | 50 // CHECK: call void @llvm.lifetime.start |
51 // CHECK: call void @_Z9foo_largev | 51 // CHECK: call void @_Z9foo_largev |
52 // CHECK: call void @llvm.lifetime.end | 52 // CHECK: call void @llvm.lifetime.end |
53 // CHECK: call void @llvm.lifetime.start | 53 // CHECK: call void @llvm.lifetime.start |
54 // CHECK: call void @_Z9foo_largev | 54 // CHECK: call void @_Z9foo_largev |
57 foo_large(); | 57 foo_large(); |
58 foo_large(); | 58 foo_large(); |
59 } | 59 } |
60 | 60 |
61 void small_rvoed_named_temporary_object() { | 61 void small_rvoed_named_temporary_object() { |
62 // CHECK-LABEL: define void @small_rvoed_named_temporary_object | 62 // CHECK-LABEL: define{{.*}} void @small_rvoed_named_temporary_object |
63 // CHECK: call void @llvm.lifetime.start | 63 // CHECK: call void @llvm.lifetime.start |
64 // CHECK: call void @_Z9foo_smallv | 64 // CHECK: call void @_Z9foo_smallv |
65 // CHECK: call void @llvm.lifetime.end | 65 // CHECK: call void @llvm.lifetime.end |
66 // CHECK: call void @llvm.lifetime.start | 66 // CHECK: call void @llvm.lifetime.start |
67 // CHECK: call void @_Z9foo_smallv | 67 // CHECK: call void @_Z9foo_smallv |
74 S_small s = foo_small(); | 74 S_small s = foo_small(); |
75 } | 75 } |
76 } | 76 } |
77 | 77 |
78 void large_rvoed_named_temporary_object() { | 78 void large_rvoed_named_temporary_object() { |
79 // CHECK-LABEL: define void @large_rvoed_named_temporary_object | 79 // CHECK-LABEL: define{{.*}} void @large_rvoed_named_temporary_object |
80 // CHECK: call void @llvm.lifetime.start | 80 // CHECK: call void @llvm.lifetime.start |
81 // CHECK: call void @_Z9foo_largev | 81 // CHECK: call void @_Z9foo_largev |
82 // CHECK: call void @llvm.lifetime.end | 82 // CHECK: call void @llvm.lifetime.end |
83 // CHECK: call void @llvm.lifetime.start | 83 // CHECK: call void @llvm.lifetime.start |
84 // CHECK: call void @_Z9foo_largev | 84 // CHECK: call void @_Z9foo_largev |
91 S_large s = foo_large(); | 91 S_large s = foo_large(); |
92 } | 92 } |
93 } | 93 } |
94 | 94 |
95 void small_auto_object() { | 95 void small_auto_object() { |
96 // CHECK-LABEL: define void @small_auto_object | 96 // CHECK-LABEL: define{{.*}} void @small_auto_object |
97 // CHECK: call void @llvm.lifetime.start | 97 // CHECK: call void @llvm.lifetime.start |
98 // CHECK: call void @_Z9bar_smallP7S_small | 98 // CHECK: call void @_Z9bar_smallP7S_small |
99 // CHECK: call void @llvm.lifetime.end | 99 // CHECK: call void @llvm.lifetime.end |
100 // CHECK: call void @llvm.lifetime.start | 100 // CHECK: call void @llvm.lifetime.start |
101 // CHECK: call void @_Z9bar_smallP7S_small | 101 // CHECK: call void @_Z9bar_smallP7S_small |
110 bar_small(&s); | 110 bar_small(&s); |
111 } | 111 } |
112 } | 112 } |
113 | 113 |
114 void large_auto_object() { | 114 void large_auto_object() { |
115 // CHECK-LABEL: define void @large_auto_object | 115 // CHECK-LABEL: define{{.*}} void @large_auto_object |
116 // CHECK: call void @llvm.lifetime.start | 116 // CHECK: call void @llvm.lifetime.start |
117 // CHECK: call void @_Z9bar_largeP7S_large | 117 // CHECK: call void @_Z9bar_largeP7S_large |
118 // CHECK: call void @llvm.lifetime.end | 118 // CHECK: call void @llvm.lifetime.end |
119 // CHECK: call void @llvm.lifetime.start | 119 // CHECK: call void @llvm.lifetime.start |
120 // CHECK: call void @_Z9bar_largeP7S_large | 120 // CHECK: call void @_Z9bar_largeP7S_large |
129 bar_large(&s); | 129 bar_large(&s); |
130 } | 130 } |
131 } | 131 } |
132 | 132 |
133 int large_combiner_test(S_large s) { | 133 int large_combiner_test(S_large s) { |
134 // CHECK-LABEL: define i32 @large_combiner_test | 134 // CHECK-LABEL: define{{.*}} i32 @large_combiner_test |
135 // CHECK: [[T2:%.*]] = alloca %struct.Combiner | 135 // CHECK: [[T2:%.*]] = alloca %struct.Combiner |
136 // CHECK: [[T1:%.*]] = alloca %struct.Combiner | 136 // CHECK: [[T1:%.*]] = alloca %struct.Combiner |
137 // CHECK: [[T3:%.*]] = call %struct.Combiner* @_ZN8CombinerC1E7S_large(%struct.Combiner* nonnull [[T1]], [9 x i32] %s.coerce) | 137 // CHECK: [[T3:%.*]] = call %struct.Combiner* @_ZN8CombinerC1E7S_large(%struct.Combiner* {{[^,]*}} [[T1]], [9 x i32] %s.coerce) |
138 // CHECK: call void @_ZN8Combiner1fEv(%struct.Combiner* nonnull sret align 4 [[T2]], %struct.Combiner* nonnull [[T1]]) | 138 // CHECK: call void @_ZN8Combiner1fEv(%struct.Combiner* nonnull sret(%struct.Combiner) align 4 [[T2]], %struct.Combiner* {{[^,]*}} [[T1]]) |
139 // CHECK: [[T4:%.*]] = getelementptr inbounds %struct.Combiner, %struct.Combiner* [[T2]], i32 0, i32 0, i32 0, i32 0 | 139 // CHECK: [[T4:%.*]] = getelementptr inbounds %struct.Combiner, %struct.Combiner* [[T2]], i32 0, i32 0, i32 0, i32 0 |
140 // CHECK: [[T5:%.*]] = load i32, i32* [[T4]] | 140 // CHECK: [[T5:%.*]] = load i32, i32* [[T4]] |
141 // CHECK: ret i32 [[T5]] | 141 // CHECK: ret i32 [[T5]] |
142 | 142 |
143 return Combiner(s).f().a.a[0]; | 143 return Combiner(s).f().a.a[0]; |