Skip to content

Commit e7200c7

Browse files
authored
[LV] Pre-commit test for #151664 (#151671)
Hoisted vector instructions are costed incorrectly.
1 parent a96d8ae commit e7200c7

File tree

3 files changed

+283
-0
lines changed

3 files changed

+283
-0
lines changed

llvm/test/Analysis/CostModel/AArch64/min-max.ll

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,144 @@ define void @maximum() {
377377
ret void
378378
}
379379

380+
define void @minimumnum() {
381+
; CHECK-LABEL: 'minimumnum'
382+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %1 = call float @llvm.minimumnum.f32(float poison, float poison)
383+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %2 = call double @llvm.minimumnum.f64(double poison, double poison)
384+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %3 = call <2 x float> @llvm.minimumnum.v2f32(<2 x float> poison, <2 x float> poison)
385+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %4 = call <4 x float> @llvm.minimumnum.v4f32(<4 x float> poison, <4 x float> poison)
386+
; CHECK-NEXT: Cost Model: Found costs of 10 for: %5 = call <8 x float> @llvm.minimumnum.v8f32(<8 x float> poison, <8 x float> poison)
387+
; CHECK-NEXT: Cost Model: Found costs of 20 for: %6 = call <16 x float> @llvm.minimumnum.v16f32(<16 x float> poison, <16 x float> poison)
388+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %7 = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> poison, <2 x double> poison)
389+
; CHECK-NEXT: Cost Model: Found costs of 10 for: %8 = call <4 x double> @llvm.minimumnum.v4f64(<4 x double> poison, <4 x double> poison)
390+
; CHECK-NEXT: Cost Model: Found costs of 20 for: %9 = call <8 x double> @llvm.minimumnum.v8f64(<8 x double> poison, <8 x double> poison)
391+
; CHECK-NEXT: Cost Model: Found costs of 40 for: %10 = call <16 x double> @llvm.minimumnum.v16f64(<16 x double> poison, <16 x double> poison)
392+
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void
393+
;
394+
call float @llvm.minimumnum.f32(float poison, float poison)
395+
call double @llvm.minimumnum.f64(double poison, double poison)
396+
call <2 x float> @llvm.minimumnum.v2f32(<2 x float> poison, <2 x float> poison)
397+
call <4 x float> @llvm.minimumnum.v4f32(<4 x float> poison, <4 x float> poison)
398+
call <8 x float> @llvm.minimumnum.v8f32(<8 x float> poison, <8 x float> poison)
399+
call <16 x float> @llvm.minimumnum.v16f32(<16 x float> poison, <16 x float> poison)
400+
call <2 x double> @llvm.minimumnum.v2f64(<2 x double> poison, <2 x double> poison)
401+
call <4 x double> @llvm.minimumnum.v4f64(<4 x double> poison, <4 x double> poison)
402+
call <8 x double> @llvm.minimumnum.v8f64(<8 x double> poison, <8 x double> poison)
403+
call <16 x double> @llvm.minimumnum.v16f64(<16 x double> poison, <16 x double> poison)
404+
ret void
405+
}
406+
407+
define void @minimumnum_fp16() {
408+
; CHECK-NOF16-LABEL: 'minimumnum_fp16'
409+
; CHECK-NOF16-NEXT: Cost Model: Found costs of 1 for: %1 = call half @llvm.minimumnum.f16(half poison, half poison)
410+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:4 CodeSize:3 Lat:4 SizeLat:4 for: %2 = call <2 x half> @llvm.minimumnum.v2f16(<2 x half> poison, <2 x half> poison)
411+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:10 CodeSize:7 Lat:10 SizeLat:10 for: %3 = call <4 x half> @llvm.minimumnum.v4f16(<4 x half> poison, <4 x half> poison)
412+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:22 CodeSize:15 Lat:22 SizeLat:22 for: %4 = call <8 x half> @llvm.minimumnum.v8f16(<8 x half> poison, <8 x half> poison)
413+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:44 CodeSize:30 Lat:44 SizeLat:44 for: %5 = call <16 x half> @llvm.minimumnum.v16f16(<16 x half> poison, <16 x half> poison)
414+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void
415+
;
416+
; CHECK-F16-LABEL: 'minimumnum_fp16'
417+
; CHECK-F16-NEXT: Cost Model: Found costs of 3 for: %1 = call half @llvm.minimumnum.f16(half poison, half poison)
418+
; CHECK-F16-NEXT: Cost Model: Found costs of 3 for: %2 = call <2 x half> @llvm.minimumnum.v2f16(<2 x half> poison, <2 x half> poison)
419+
; CHECK-F16-NEXT: Cost Model: Found costs of 3 for: %3 = call <4 x half> @llvm.minimumnum.v4f16(<4 x half> poison, <4 x half> poison)
420+
; CHECK-F16-NEXT: Cost Model: Found costs of 3 for: %4 = call <8 x half> @llvm.minimumnum.v8f16(<8 x half> poison, <8 x half> poison)
421+
; CHECK-F16-NEXT: Cost Model: Found costs of 10 for: %5 = call <16 x half> @llvm.minimumnum.v16f16(<16 x half> poison, <16 x half> poison)
422+
; CHECK-F16-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void
423+
;
424+
call half @llvm.minimumnum.f32(half poison, half poison)
425+
call <2 x half> @llvm.minimumnum.v2f16(<2 x half> poison, <2 x half> poison)
426+
call <4 x half> @llvm.minimumnum.v4f16(<4 x half> poison, <4 x half> poison)
427+
call <8 x half> @llvm.minimumnum.v8f16(<8 x half> poison, <8 x half> poison)
428+
call <16 x half> @llvm.minimumnum.v16f16(<16 x half> poison, <16 x half> poison)
429+
ret void
430+
}
431+
432+
define void @minimumnum_bf16() {
433+
; CHECK-LABEL: 'minimumnum_bf16'
434+
; CHECK-NEXT: Cost Model: Found costs of 1 for: %1 = call bfloat @llvm.minimumnum.bf16(bfloat poison, bfloat poison)
435+
; CHECK-NEXT: Cost Model: Found costs of RThru:4 CodeSize:3 Lat:4 SizeLat:4 for: %2 = call <2 x bfloat> @llvm.minimumnum.v2bf16(<2 x bfloat> poison, <2 x bfloat> poison)
436+
; CHECK-NEXT: Cost Model: Found costs of RThru:10 CodeSize:7 Lat:10 SizeLat:10 for: %3 = call <4 x bfloat> @llvm.minimumnum.v4bf16(<4 x bfloat> poison, <4 x bfloat> poison)
437+
; CHECK-NEXT: Cost Model: Found costs of RThru:22 CodeSize:15 Lat:22 SizeLat:22 for: %4 = call <8 x bfloat> @llvm.minimumnum.v8bf16(<8 x bfloat> poison, <8 x bfloat> poison)
438+
; CHECK-NEXT: Cost Model: Found costs of RThru:44 CodeSize:30 Lat:44 SizeLat:44 for: %5 = call <16 x bfloat> @llvm.minimumnum.v16bf16(<16 x bfloat> poison, <16 x bfloat> poison)
439+
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void
440+
;
441+
call bfloat @llvm.minimumnum.f32(bfloat poison, bfloat poison)
442+
call <2 x bfloat> @llvm.minimumnum.v2fb16(<2 x bfloat> poison, <2 x bfloat> poison)
443+
call <4 x bfloat> @llvm.minimumnum.v4bf16(<4 x bfloat> poison, <4 x bfloat> poison)
444+
call <8 x bfloat> @llvm.minimumnum.v8bf16(<8 x bfloat> poison, <8 x bfloat> poison)
445+
call <16 x bfloat> @llvm.minimumnum.v6bf16(<16 x bfloat> poison, <16 x bfloat> poison)
446+
ret void
447+
}
448+
449+
define void @maximumnum() {
450+
; CHECK-LABEL: 'maximumnum'
451+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %1 = call float @llvm.maximumnum.f32(float poison, float poison)
452+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %2 = call double @llvm.maximumnum.f64(double poison, double poison)
453+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %3 = call <2 x float> @llvm.maximumnum.v2f32(<2 x float> poison, <2 x float> poison)
454+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %4 = call <4 x float> @llvm.maximumnum.v4f32(<4 x float> poison, <4 x float> poison)
455+
; CHECK-NEXT: Cost Model: Found costs of 10 for: %5 = call <8 x float> @llvm.maximumnum.v8f32(<8 x float> poison, <8 x float> poison)
456+
; CHECK-NEXT: Cost Model: Found costs of 20 for: %6 = call <16 x float> @llvm.maximumnum.v16f32(<16 x float> poison, <16 x float> poison)
457+
; CHECK-NEXT: Cost Model: Found costs of 3 for: %7 = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> poison, <2 x double> poison)
458+
; CHECK-NEXT: Cost Model: Found costs of 10 for: %8 = call <4 x double> @llvm.maximumnum.v4f64(<4 x double> poison, <4 x double> poison)
459+
; CHECK-NEXT: Cost Model: Found costs of 20 for: %9 = call <8 x double> @llvm.maximumnum.v8f64(<8 x double> poison, <8 x double> poison)
460+
; CHECK-NEXT: Cost Model: Found costs of 40 for: %10 = call <16 x double> @llvm.maximumnum.v16f64(<16 x double> poison, <16 x double> poison)
461+
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void
462+
;
463+
call float @llvm.maximumnum.f32(float poison, float poison)
464+
call double @llvm.maximumnum.f64(double poison, double poison)
465+
call <2 x float> @llvm.maximumnum.v2f32(<2 x float> poison, <2 x float> poison)
466+
call <4 x float> @llvm.maximumnum.v4f32(<4 x float> poison, <4 x float> poison)
467+
call <8 x float> @llvm.maximumnum.v8f32(<8 x float> poison, <8 x float> poison)
468+
call <16 x float> @llvm.maximumnum.v16f32(<16 x float> poison, <16 x float> poison)
469+
call <2 x double> @llvm.maximumnum.v2f64(<2 x double> poison, <2 x double> poison)
470+
call <4 x double> @llvm.maximumnum.v4f64(<4 x double> poison, <4 x double> poison)
471+
call <8 x double> @llvm.maximumnum.v8f64(<8 x double> poison, <8 x double> poison)
472+
call <16 x double> @llvm.maximumnum.v16f64(<16 x double> poison, <16 x double> poison)
473+
ret void
474+
}
475+
476+
define void @maximumnum_fp16() {
477+
; CHECK-NOF16-LABEL: 'maximumnum_fp16'
478+
; CHECK-NOF16-NEXT: Cost Model: Found costs of 1 for: %1 = call half @llvm.maximumnum.f16(half poison, half poison)
479+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:4 CodeSize:3 Lat:4 SizeLat:4 for: %2 = call <2 x half> @llvm.maximumnum.v2f16(<2 x half> poison, <2 x half> poison)
480+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:10 CodeSize:7 Lat:10 SizeLat:10 for: %3 = call <4 x half> @llvm.maximumnum.v4f16(<4 x half> poison, <4 x half> poison)
481+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:22 CodeSize:15 Lat:22 SizeLat:22 for: %4 = call <8 x half> @llvm.maximumnum.v8f16(<8 x half> poison, <8 x half> poison)
482+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:44 CodeSize:30 Lat:44 SizeLat:44 for: %5 = call <16 x half> @llvm.maximumnum.v16f16(<16 x half> poison, <16 x half> poison)
483+
; CHECK-NOF16-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void
484+
;
485+
; CHECK-F16-LABEL: 'maximumnum_fp16'
486+
; CHECK-F16-NEXT: Cost Model: Found costs of 3 for: %1 = call half @llvm.maximumnum.f16(half poison, half poison)
487+
; CHECK-F16-NEXT: Cost Model: Found costs of 3 for: %2 = call <2 x half> @llvm.maximumnum.v2f16(<2 x half> poison, <2 x half> poison)
488+
; CHECK-F16-NEXT: Cost Model: Found costs of 3 for: %3 = call <4 x half> @llvm.maximumnum.v4f16(<4 x half> poison, <4 x half> poison)
489+
; CHECK-F16-NEXT: Cost Model: Found costs of 3 for: %4 = call <8 x half> @llvm.maximumnum.v8f16(<8 x half> poison, <8 x half> poison)
490+
; CHECK-F16-NEXT: Cost Model: Found costs of 10 for: %5 = call <16 x half> @llvm.maximumnum.v16f16(<16 x half> poison, <16 x half> poison)
491+
; CHECK-F16-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void
492+
;
493+
call half @llvm.maximumnum.f32(half poison, half poison)
494+
call <2 x half> @llvm.maximumnum.v2f16(<2 x half> poison, <2 x half> poison)
495+
call <4 x half> @llvm.maximumnum.v4f16(<4 x half> poison, <4 x half> poison)
496+
call <8 x half> @llvm.maximumnum.v8f16(<8 x half> poison, <8 x half> poison)
497+
call <16 x half> @llvm.maximumnum.v16f16(<16 x half> poison, <16 x half> poison)
498+
ret void
499+
}
500+
501+
define void @maximumnum_bf16() {
502+
; CHECK-LABEL: 'maximumnum_bf16'
503+
; CHECK-NEXT: Cost Model: Found costs of 1 for: %1 = call bfloat @llvm.maximumnum.bf16(bfloat poison, bfloat poison)
504+
; CHECK-NEXT: Cost Model: Found costs of RThru:4 CodeSize:3 Lat:4 SizeLat:4 for: %2 = call <2 x bfloat> @llvm.maximumnum.v2bf16(<2 x bfloat> poison, <2 x bfloat> poison)
505+
; CHECK-NEXT: Cost Model: Found costs of RThru:10 CodeSize:7 Lat:10 SizeLat:10 for: %3 = call <4 x bfloat> @llvm.maximumnum.v4bf16(<4 x bfloat> poison, <4 x bfloat> poison)
506+
; CHECK-NEXT: Cost Model: Found costs of RThru:22 CodeSize:15 Lat:22 SizeLat:22 for: %4 = call <8 x bfloat> @llvm.maximumnum.v8bf16(<8 x bfloat> poison, <8 x bfloat> poison)
507+
; CHECK-NEXT: Cost Model: Found costs of RThru:44 CodeSize:30 Lat:44 SizeLat:44 for: %5 = call <16 x bfloat> @llvm.maximumnum.v16bf16(<16 x bfloat> poison, <16 x bfloat> poison)
508+
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret void
509+
;
510+
call bfloat @llvm.maximumnum.f32(bfloat poison, bfloat poison)
511+
call <2 x bfloat> @llvm.maximumnum.v2fb16(<2 x bfloat> poison, <2 x bfloat> poison)
512+
call <4 x bfloat> @llvm.maximumnum.v4bf16(<4 x bfloat> poison, <4 x bfloat> poison)
513+
call <8 x bfloat> @llvm.maximumnum.v8bf16(<8 x bfloat> poison, <8 x bfloat> poison)
514+
call <16 x bfloat> @llvm.maximumnum.v6bf16(<16 x bfloat> poison, <16 x bfloat> poison)
515+
ret void
516+
}
517+
380518
declare i8 @llvm.umin.i8(i8, i8)
381519
declare i16 @llvm.umin.i16(i16, i16)
382520
declare i32 @llvm.umin.i32(i32, i32)

0 commit comments

Comments
 (0)