@@ -86,13 +86,20 @@ int hoo(void) {
86
86
87
87
//.
88
88
// CHECK: @__aarch64_cpu_features = external dso_local global { i64 }
89
- // CHECK: @fmv.ifunc = weak_odr ifunc i32 (), ptr @fmv.resolver
90
- // CHECK: @fmv_one.ifunc = weak_odr ifunc i32 (), ptr @fmv_one.resolver
91
- // CHECK: @fmv_two.ifunc = weak_odr ifunc i32 (), ptr @fmv_two.resolver
92
- // CHECK: @fmv_e.ifunc = weak_odr ifunc i32 (), ptr @fmv_e.resolver
93
- // CHECK: @fmv_c.ifunc = weak_odr ifunc void (), ptr @fmv_c.resolver
94
- // CHECK: @fmv_inline.ifunc = weak_odr ifunc i32 (), ptr @fmv_inline.resolver
95
- // CHECK: @fmv_d.ifunc = internal ifunc i32 (), ptr @fmv_d.resolver
89
+ // CHECK: @fmv.ifunc = weak_odr alias i32 (), ptr @fmv
90
+ // CHECK: @fmv_one.ifunc = weak_odr alias i32 (), ptr @fmv_one
91
+ // CHECK: @fmv_two.ifunc = weak_odr alias i32 (), ptr @fmv_two
92
+ // CHECK: @fmv_e.ifunc = weak_odr alias i32 (), ptr @fmv_e
93
+ // CHECK: @fmv_inline.ifunc = weak_odr alias i32 (), ptr @fmv_inline
94
+ // CHECK: @fmv_d.ifunc = internal alias i32 (), ptr @fmv_d
95
+ // CHECK: @fmv_c.ifunc = weak_odr alias void (), ptr @fmv_c
96
+ // CHECK: @fmv = weak_odr ifunc i32 (), ptr @fmv.resolver
97
+ // CHECK: @fmv_one = weak_odr ifunc i32 (), ptr @fmv_one.resolver
98
+ // CHECK: @fmv_two = weak_odr ifunc i32 (), ptr @fmv_two.resolver
99
+ // CHECK: @fmv_e = weak_odr ifunc i32 (), ptr @fmv_e.resolver
100
+ // CHECK: @fmv_inline = weak_odr ifunc i32 (), ptr @fmv_inline.resolver
101
+ // CHECK: @fmv_d = internal ifunc i32 (), ptr @fmv_d.resolver
102
+ // CHECK: @fmv_c = weak_odr ifunc void (), ptr @fmv_c.resolver
96
103
//.
97
104
// CHECK: Function Attrs: noinline nounwind optnone
98
105
// CHECK-LABEL: define {{[^@]+}}@fmv._MrngMflagmMfp16fml
@@ -101,6 +108,32 @@ int hoo(void) {
101
108
// CHECK-NEXT: ret i32 1
102
109
//
103
110
//
111
+ // CHECK: Function Attrs: noinline nounwind optnone
112
+ // CHECK-LABEL: define {{[^@]+}}@fmv_one._MsimdMls64
113
+ // CHECK-SAME: () #[[ATTR1:[0-9]+]] {
114
+ // CHECK-NEXT: entry:
115
+ // CHECK-NEXT: ret i32 1
116
+ //
117
+ //
118
+ // CHECK: Function Attrs: noinline nounwind optnone
119
+ // CHECK-LABEL: define {{[^@]+}}@fmv_two._Mfp
120
+ // CHECK-SAME: () #[[ATTR1]] {
121
+ // CHECK-NEXT: entry:
122
+ // CHECK-NEXT: ret i32 1
123
+ //
124
+ //
125
+ // CHECK: Function Attrs: noinline nounwind optnone
126
+ // CHECK-LABEL: define {{[^@]+}}@foo
127
+ // CHECK-SAME: () #[[ATTR2:[0-9]+]] {
128
+ // CHECK-NEXT: entry:
129
+ // CHECK-NEXT: [[CALL:%.*]] = call i32 @fmv()
130
+ // CHECK-NEXT: [[CALL1:%.*]] = call i32 @fmv_one()
131
+ // CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[CALL]], [[CALL1]]
132
+ // CHECK-NEXT: [[CALL2:%.*]] = call i32 @fmv_two()
133
+ // CHECK-NEXT: [[ADD3:%.*]] = add nsw i32 [[ADD]], [[CALL2]]
134
+ // CHECK-NEXT: ret i32 [[ADD3]]
135
+ //
136
+ //
104
137
// CHECK-LABEL: define {{[^@]+}}@fmv.resolver() comdat {
105
138
// CHECK-NEXT: resolver_entry:
106
139
// CHECK-NEXT: call void @__init_cpu_features_resolver()
@@ -179,42 +212,16 @@ int hoo(void) {
179
212
// CHECK-NEXT: ret ptr @fmv.default
180
213
//
181
214
//
182
- // CHECK: Function Attrs: noinline nounwind optnone
183
- // CHECK-LABEL: define {{[^@]+}}@fmv_one._MsimdMls64
184
- // CHECK-SAME: () #[[ATTR1:[0-9]+]] {
185
- // CHECK-NEXT: entry:
186
- // CHECK-NEXT: ret i32 1
187
- //
188
- //
189
215
// CHECK-LABEL: define {{[^@]+}}@fmv_one.resolver() comdat {
190
216
// CHECK-NEXT: resolver_entry:
191
217
// CHECK-NEXT: ret ptr @fmv_one._MsimdMls64
192
218
//
193
219
//
194
- // CHECK: Function Attrs: noinline nounwind optnone
195
- // CHECK-LABEL: define {{[^@]+}}@fmv_two._Mfp
196
- // CHECK-SAME: () #[[ATTR1]] {
197
- // CHECK-NEXT: entry:
198
- // CHECK-NEXT: ret i32 1
199
- //
200
- //
201
220
// CHECK-LABEL: define {{[^@]+}}@fmv_two.resolver() comdat {
202
221
// CHECK-NEXT: resolver_entry:
203
222
// CHECK-NEXT: ret ptr @fmv_two._MsimdMfp16
204
223
//
205
224
//
206
- // CHECK: Function Attrs: noinline nounwind optnone
207
- // CHECK-LABEL: define {{[^@]+}}@foo
208
- // CHECK-SAME: () #[[ATTR2:[0-9]+]] {
209
- // CHECK-NEXT: entry:
210
- // CHECK-NEXT: [[CALL:%.*]] = call i32 @fmv.ifunc()
211
- // CHECK-NEXT: [[CALL1:%.*]] = call i32 @fmv_one.ifunc()
212
- // CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[CALL]], [[CALL1]]
213
- // CHECK-NEXT: [[CALL2:%.*]] = call i32 @fmv_two.ifunc()
214
- // CHECK-NEXT: [[ADD3:%.*]] = add nsw i32 [[ADD]], [[CALL2]]
215
- // CHECK-NEXT: ret i32 [[ADD3]]
216
- //
217
- //
218
225
// CHECK-LABEL: define {{[^@]+}}@fmv_e.resolver() comdat {
219
226
// CHECK-NEXT: resolver_entry:
220
227
// CHECK-NEXT: ret ptr @fmv_e._Mls64
@@ -234,28 +241,14 @@ int hoo(void) {
234
241
// CHECK-NEXT: ret void
235
242
//
236
243
//
237
- // CHECK-LABEL: define {{[^@]+}}@fmv_c.resolver() comdat {
238
- // CHECK-NEXT: resolver_entry:
239
- // CHECK-NEXT: call void @__init_cpu_features_resolver()
240
- // CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
241
- // CHECK-NEXT: [[TMP1:%.*]] = and i64 [[TMP0]], 281474976710656
242
- // CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 281474976710656
243
- // CHECK-NEXT: [[TMP3:%.*]] = and i1 true, [[TMP2]]
244
- // CHECK-NEXT: br i1 [[TMP3]], label [[RESOLVER_RETURN:%.*]], label [[RESOLVER_ELSE:%.*]]
245
- // CHECK: resolver_return:
246
- // CHECK-NEXT: ret ptr @fmv_c._Mssbs
247
- // CHECK: resolver_else:
248
- // CHECK-NEXT: ret ptr @fmv_c.default
249
- //
250
- //
251
244
// CHECK: Function Attrs: noinline nounwind optnone
252
245
// CHECK-LABEL: define {{[^@]+}}@goo
253
246
// CHECK-SAME: () #[[ATTR2]] {
254
247
// CHECK-NEXT: entry:
255
- // CHECK-NEXT: [[CALL:%.*]] = call i32 @fmv_inline.ifunc ()
256
- // CHECK-NEXT: [[CALL1:%.*]] = call i32 @fmv_e.ifunc ()
257
- // CHECK-NEXT: [[CALL2:%.*]] = call i32 @fmv_d.ifunc ()
258
- // CHECK-NEXT: call void @fmv_c.ifunc ()
248
+ // CHECK-NEXT: [[CALL:%.*]] = call i32 @fmv_inline()
249
+ // CHECK-NEXT: [[CALL1:%.*]] = call i32 @fmv_e()
250
+ // CHECK-NEXT: [[CALL2:%.*]] = call i32 @fmv_d()
251
+ // CHECK-NEXT: call void @fmv_c()
259
252
// CHECK-NEXT: [[CALL3:%.*]] = call i32 @fmv_default()
260
253
// CHECK-NEXT: ret i32 [[CALL3]]
261
254
//
@@ -376,6 +369,20 @@ int hoo(void) {
376
369
// CHECK-NEXT: ret ptr @fmv_d.default
377
370
//
378
371
//
372
+ // CHECK-LABEL: define {{[^@]+}}@fmv_c.resolver() comdat {
373
+ // CHECK-NEXT: resolver_entry:
374
+ // CHECK-NEXT: call void @__init_cpu_features_resolver()
375
+ // CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
376
+ // CHECK-NEXT: [[TMP1:%.*]] = and i64 [[TMP0]], 281474976710656
377
+ // CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 281474976710656
378
+ // CHECK-NEXT: [[TMP3:%.*]] = and i1 true, [[TMP2]]
379
+ // CHECK-NEXT: br i1 [[TMP3]], label [[RESOLVER_RETURN:%.*]], label [[RESOLVER_ELSE:%.*]]
380
+ // CHECK: resolver_return:
381
+ // CHECK-NEXT: ret ptr @fmv_c._Mssbs
382
+ // CHECK: resolver_else:
383
+ // CHECK-NEXT: ret ptr @fmv_c.default
384
+ //
385
+ //
379
386
// CHECK: Function Attrs: noinline nounwind optnone
380
387
// CHECK-LABEL: define {{[^@]+}}@recur
381
388
// CHECK-SAME: () #[[ATTR2]] {
@@ -401,9 +408,9 @@ int hoo(void) {
401
408
// CHECK-NEXT: entry:
402
409
// CHECK-NEXT: [[FP1:%.*]] = alloca ptr, align 8
403
410
// CHECK-NEXT: [[FP2:%.*]] = alloca ptr, align 8
404
- // CHECK-NEXT: call void @f(ptr noundef @fmv.ifunc )
405
- // CHECK-NEXT: store ptr @fmv.ifunc , ptr [[FP1]], align 8
406
- // CHECK-NEXT: store ptr @fmv.ifunc , ptr [[FP2]], align 8
411
+ // CHECK-NEXT: call void @f(ptr noundef @fmv)
412
+ // CHECK-NEXT: store ptr @fmv, ptr [[FP1]], align 8
413
+ // CHECK-NEXT: store ptr @fmv, ptr [[FP2]], align 8
407
414
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[FP1]], align 8
408
415
// CHECK-NEXT: [[CALL:%.*]] = call i32 [[TMP0]]()
409
416
// CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[FP2]], align 8
@@ -525,13 +532,6 @@ int hoo(void) {
525
532
//
526
533
//
527
534
// CHECK: Function Attrs: noinline nounwind optnone
528
- // CHECK-LABEL: define {{[^@]+}}@fmv_c.default
529
- // CHECK-SAME: () #[[ATTR2]] {
530
- // CHECK-NEXT: entry:
531
- // CHECK-NEXT: ret void
532
- //
533
- //
534
- // CHECK: Function Attrs: noinline nounwind optnone
535
535
// CHECK-LABEL: define {{[^@]+}}@fmv_inline._Msha1MpmullMf64mm
536
536
// CHECK-SAME: () #[[ATTR12:[0-9]+]] {
537
537
// CHECK-NEXT: entry:
@@ -636,6 +636,13 @@ int hoo(void) {
636
636
// CHECK-NEXT: ret i32 1
637
637
//
638
638
//
639
+ // CHECK: Function Attrs: noinline nounwind optnone
640
+ // CHECK-LABEL: define {{[^@]+}}@fmv_c.default
641
+ // CHECK-SAME: () #[[ATTR2]] {
642
+ // CHECK-NEXT: entry:
643
+ // CHECK-NEXT: ret void
644
+ //
645
+ //
639
646
// CHECK-NOFMV: Function Attrs: noinline nounwind optnone
640
647
// CHECK-NOFMV-LABEL: define {{[^@]+}}@fmv
641
648
// CHECK-NOFMV-SAME: () #[[ATTR0:[0-9]+]] {
0 commit comments