44
44
static int __attribute__((target_clones ("sse4.2, default" ))) internal (void ) { return 0 ; }
45
45
int use (void ) { return internal (); }
46
46
/// Internal linkage resolvers do not use comdat.
47
- // LINUX: define internal ptr @internal.resolver() {
48
- // DARWIN: define internal ptr @internal.resolver() {
49
- // WINDOWS: define internal i32 @internal() {
47
+ // LINUX: define internal ptr @internal.resolver()
48
+ // DARWIN: define internal ptr @internal.resolver()
49
+ // WINDOWS: define internal i32 @internal()
50
50
51
51
int __attribute__((target_clones ("sse4.2, default" ))) foo (void ) { return 0 ; }
52
52
// LINUX: define {{.*}}i32 @foo.sse4.2.0()
53
53
// LINUX: define {{.*}}i32 @foo.default.1()
54
- // LINUX: define weak_odr ptr @foo.resolver() comdat
54
+ // LINUX: define weak_odr ptr @foo.resolver() {{.*}} comdat
55
55
// LINUX: ret ptr @foo.sse4.2.0
56
56
// LINUX: ret ptr @foo.default.1
57
57
58
58
// DARWIN: define {{.*}}i32 @foo.sse4.2.0()
59
59
// DARWIN: define {{.*}}i32 @foo.default.1()
60
- // DARWIN: define weak_odr ptr @foo.resolver() {
60
+ // DARWIN: define weak_odr ptr @foo.resolver()
61
61
// DARWIN: ret ptr @foo.sse4.2.0
62
62
// DARWIN: ret ptr @foo.default.1
63
63
64
64
// WINDOWS: define dso_local i32 @foo.sse4.2.0()
65
65
// WINDOWS: define dso_local i32 @foo.default.1()
66
- // WINDOWS: define weak_odr dso_local i32 @foo() comdat
66
+ // WINDOWS: define weak_odr dso_local i32 @foo() {{.*}} comdat
67
67
// WINDOWS: musttail call i32 @foo.sse4.2.0
68
68
// WINDOWS: musttail call i32 @foo.default.1
69
69
70
70
__attribute__((target_clones ("default,default ,sse4.2" ))) void foo_dupes (void ) {}
71
71
// LINUX: define {{.*}}void @foo_dupes.default.1()
72
72
// LINUX: define {{.*}}void @foo_dupes.sse4.2.0()
73
- // LINUX: define weak_odr ptr @foo_dupes.resolver() comdat
73
+ // LINUX: define weak_odr ptr @foo_dupes.resolver() {{.*}} comdat
74
74
// LINUX: ret ptr @foo_dupes.sse4.2.0
75
75
// LINUX: ret ptr @foo_dupes.default.1
76
76
77
77
// DARWIN: define {{.*}}void @foo_dupes.default.1()
78
78
// DARWIN: define {{.*}}void @foo_dupes.sse4.2.0()
79
- // DARWIN: define weak_odr ptr @foo_dupes.resolver() {
79
+ // DARWIN: define weak_odr ptr @foo_dupes.resolver()
80
80
// DARWIN: ret ptr @foo_dupes.sse4.2.0
81
81
// DARWIN: ret ptr @foo_dupes.default.1
82
82
83
83
// WINDOWS: define dso_local void @foo_dupes.default.1()
84
84
// WINDOWS: define dso_local void @foo_dupes.sse4.2.0()
85
- // WINDOWS: define weak_odr dso_local void @foo_dupes() comdat
85
+ // WINDOWS: define weak_odr dso_local void @foo_dupes() {{.*}} comdat
86
86
// WINDOWS: musttail call void @foo_dupes.sse4.2.0
87
87
// WINDOWS: musttail call void @foo_dupes.default.1
88
88
@@ -109,19 +109,19 @@ int bar(void) {
109
109
void __attribute__((target_clones ("default, arch=ivybridge" ))) unused (void ) {}
110
110
// LINUX: define {{.*}}void @unused.default.1()
111
111
// LINUX: define {{.*}}void @unused.arch_ivybridge.0()
112
- // LINUX: define weak_odr ptr @unused.resolver() comdat
112
+ // LINUX: define weak_odr ptr @unused.resolver() {{.*}} comdat
113
113
// LINUX: ret ptr @unused.arch_ivybridge.0
114
114
// LINUX: ret ptr @unused.default.1
115
115
116
116
// DARWIN: define {{.*}}void @unused.default.1()
117
117
// DARWIN: define {{.*}}void @unused.arch_ivybridge.0()
118
- // DARWIN: define weak_odr ptr @unused.resolver() {
118
+ // DARWIN: define weak_odr ptr @unused.resolver()
119
119
// DARWIN: ret ptr @unused.arch_ivybridge.0
120
120
// DARWIN: ret ptr @unused.default.1
121
121
122
122
// WINDOWS: define dso_local void @unused.default.1()
123
123
// WINDOWS: define dso_local void @unused.arch_ivybridge.0()
124
- // WINDOWS: define weak_odr dso_local void @unused() comdat
124
+ // WINDOWS: define weak_odr dso_local void @unused() {{.*}} comdat
125
125
// WINDOWS: musttail call void @unused.arch_ivybridge.0
126
126
// WINDOWS: musttail call void @unused.default.1
127
127
@@ -144,34 +144,34 @@ int bar3(void) {
144
144
// WINDOWS: call i32 @foo_inline2()
145
145
}
146
146
147
- // LINUX: define weak_odr ptr @foo_inline.resolver() comdat
147
+ // LINUX: define weak_odr ptr @foo_inline.resolver() {{.*}} comdat
148
148
// LINUX: ret ptr @foo_inline.arch_sandybridge.0
149
149
// LINUX: ret ptr @foo_inline.sse4.2.1
150
150
// LINUX: ret ptr @foo_inline.default.2
151
151
152
- // DARWIN: define weak_odr ptr @foo_inline.resolver() {
152
+ // DARWIN: define weak_odr ptr @foo_inline.resolver()
153
153
// DARWIN: ret ptr @foo_inline.arch_sandybridge.0
154
154
// DARWIN: ret ptr @foo_inline.sse4.2.1
155
155
// DARWIN: ret ptr @foo_inline.default.2
156
156
157
- // WINDOWS: define weak_odr dso_local i32 @foo_inline() comdat
157
+ // WINDOWS: define weak_odr dso_local i32 @foo_inline() {{.*}} comdat
158
158
// WINDOWS: musttail call i32 @foo_inline.arch_sandybridge.0
159
159
// WINDOWS: musttail call i32 @foo_inline.sse4.2.1
160
160
// WINDOWS: musttail call i32 @foo_inline.default.2
161
161
162
162
inline int __attribute__((target_clones ("arch=sandybridge,default,sse4.2" )))
163
163
foo_inline2 (void ){ return 0 ; }
164
- // LINUX: define weak_odr ptr @foo_inline2.resolver() comdat
164
+ // LINUX: define weak_odr ptr @foo_inline2.resolver() {{.*}} comdat
165
165
// LINUX: ret ptr @foo_inline2.arch_sandybridge.0
166
166
// LINUX: ret ptr @foo_inline2.sse4.2.1
167
167
// LINUX: ret ptr @foo_inline2.default.2
168
168
169
- // DARWIN: define weak_odr ptr @foo_inline2.resolver() {
169
+ // DARWIN: define weak_odr ptr @foo_inline2.resolver()
170
170
// DARWIN: ret ptr @foo_inline2.arch_sandybridge.0
171
171
// DARWIN: ret ptr @foo_inline2.sse4.2.1
172
172
// DARWIN: ret ptr @foo_inline2.default.2
173
173
174
- // WINDOWS: define weak_odr dso_local i32 @foo_inline2() comdat
174
+ // WINDOWS: define weak_odr dso_local i32 @foo_inline2() {{.*}} comdat
175
175
// WINDOWS: musttail call i32 @foo_inline2.arch_sandybridge.0
176
176
// WINDOWS: musttail call i32 @foo_inline2.sse4.2.1
177
177
// WINDOWS: musttail call i32 @foo_inline2.default.2
@@ -194,15 +194,15 @@ int test_foo_used_no_defn(void) {
194
194
}
195
195
196
196
197
- // LINUX: define weak_odr ptr @foo_used_no_defn.resolver() comdat
197
+ // LINUX: define weak_odr ptr @foo_used_no_defn.resolver() {{.*}} comdat
198
198
// LINUX: ret ptr @foo_used_no_defn.sse4.2.0
199
199
// LINUX: ret ptr @foo_used_no_defn.default.1
200
200
201
- // DARWIN: define weak_odr ptr @foo_used_no_defn.resolver() {
201
+ // DARWIN: define weak_odr ptr @foo_used_no_defn.resolver()
202
202
// DARWIN: ret ptr @foo_used_no_defn.sse4.2.0
203
203
// DARWIN: ret ptr @foo_used_no_defn.default.1
204
204
205
- // WINDOWS: define weak_odr dso_local i32 @foo_used_no_defn() comdat
205
+ // WINDOWS: define weak_odr dso_local i32 @foo_used_no_defn() {{.*}} comdat
206
206
// WINDOWS: musttail call i32 @foo_used_no_defn.sse4.2.0
207
207
// WINDOWS: musttail call i32 @foo_used_no_defn.default.1
208
208
@@ -213,7 +213,7 @@ int isa_level(int) { return 0; }
213
213
// LINUX: define{{.*}} i32 @isa_level.arch_x86-64-v2.1(
214
214
// LINUX: define{{.*}} i32 @isa_level.arch_x86-64-v3.2(
215
215
// LINUX: define{{.*}} i32 @isa_level.arch_x86-64-v4.3(
216
- // LINUX: define weak_odr ptr @isa_level.resolver() comdat
216
+ // LINUX: define weak_odr ptr @isa_level.resolver() {{.*}} comdat
217
217
// LINUX: call void @__cpu_indicator_init()
218
218
// LINUX-NEXT: load i32, ptr getelementptr inbounds ([3 x i32], ptr @__cpu_features2, i32 0, i32 2)
219
219
// LINUX-NEXT: and i32 %[[#]], 4
@@ -234,7 +234,7 @@ int isa_level(int) { return 0; }
234
234
// DARWIN: define{{.*}} i32 @isa_level.arch_x86-64-v2.1(
235
235
// DARWIN: define{{.*}} i32 @isa_level.arch_x86-64-v3.2(
236
236
// DARWIN: define{{.*}} i32 @isa_level.arch_x86-64-v4.3(
237
- // DARWIN: define weak_odr ptr @isa_level.resolver() {
237
+ // DARWIN: define weak_odr ptr @isa_level.resolver()
238
238
// DARWIN: call void @__cpu_indicator_init()
239
239
// DARWIN-NEXT: load i32, ptr getelementptr inbounds ([3 x i32], ptr @__cpu_features2, i32 0, i32 2)
240
240
// DARWIN-NEXT: and i32 %[[#]], 4
0 commit comments