Skip to content

Commit ce19103

Browse files
authored
[AArch64] Add freeze(avg(x,y)) test coverage for #147696 (#156918)
1 parent fa308a5 commit ce19103

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

llvm/test/CodeGen/AArch64/freeze.ll

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,82 @@ define <8 x i16> @freeze_abds(<8 x i16> %a, <8 x i16> %b) {
430430
ret <8 x i16> %r
431431
}
432432

433+
; TODO: Unnecessary final and
434+
define <8 x i16> @freeze_uhadd(<8 x i16> %a0, <8 x i16> %a1) {
435+
; CHECK-LABEL: freeze_uhadd:
436+
; CHECK: // %bb.0:
437+
; CHECK-NEXT: movi v2.8h, #15
438+
; CHECK-NEXT: and v0.16b, v0.16b, v2.16b
439+
; CHECK-NEXT: and v1.16b, v1.16b, v2.16b
440+
; CHECK-NEXT: movi v2.8h, #31
441+
; CHECK-NEXT: uhadd v0.8h, v0.8h, v1.8h
442+
; CHECK-NEXT: and v0.16b, v0.16b, v2.16b
443+
; CHECK-NEXT: ret
444+
%m0 = and <8 x i16> %a0, splat (i16 15)
445+
%m1 = and <8 x i16> %a1, splat (i16 15)
446+
%avg = call <8 x i16> @llvm.aarch64.neon.uhadd.v8i16(<8 x i16> %m0, <8 x i16> %m1)
447+
%frozen = freeze <8 x i16> %avg
448+
%masked = and <8 x i16> %frozen, splat (i16 31)
449+
ret <8 x i16> %masked
450+
}
451+
452+
; TODO: Unnecessary final and
453+
define <8 x i16> @freeze_urhadd(<8 x i16> %a0, <8 x i16> %a1) {
454+
; CHECK-LABEL: freeze_urhadd:
455+
; CHECK: // %bb.0:
456+
; CHECK-NEXT: movi v2.8h, #15
457+
; CHECK-NEXT: and v0.16b, v0.16b, v2.16b
458+
; CHECK-NEXT: and v1.16b, v1.16b, v2.16b
459+
; CHECK-NEXT: movi v2.8h, #31
460+
; CHECK-NEXT: urhadd v0.8h, v0.8h, v1.8h
461+
; CHECK-NEXT: and v0.16b, v0.16b, v2.16b
462+
; CHECK-NEXT: ret
463+
%m0 = and <8 x i16> %a0, splat (i16 15)
464+
%m1 = and <8 x i16> %a1, splat (i16 15)
465+
%avg = call <8 x i16> @llvm.aarch64.neon.urhadd.v8i16(<8 x i16> %m0, <8 x i16> %m1)
466+
%frozen = freeze <8 x i16> %avg
467+
%masked = and <8 x i16> %frozen, splat (i16 31)
468+
ret <8 x i16> %masked
469+
}
470+
471+
; TODO: Unnecessary sext_inreg
472+
define <8 x i16> @freeze_shadd(<8 x i8> %a0, <8 x i16> %a1) {
473+
; CHECK-LABEL: freeze_shadd:
474+
; CHECK: // %bb.0:
475+
; CHECK-NEXT: sshll v0.8h, v0.8b, #0
476+
; CHECK-NEXT: sshr v1.8h, v1.8h, #8
477+
; CHECK-NEXT: shadd v0.8h, v0.8h, v1.8h
478+
; CHECK-NEXT: shl v0.8h, v0.8h, #8
479+
; CHECK-NEXT: sshr v0.8h, v0.8h, #8
480+
; CHECK-NEXT: ret
481+
%x0 = sext <8 x i8> %a0 to <8 x i16>
482+
%x1 = ashr <8 x i16> %a1, splat (i16 8)
483+
%avg = call <8 x i16> @llvm.aarch64.neon.shadd.v8i16(<8 x i16> %x0, <8 x i16> %x1)
484+
%frozen = freeze <8 x i16> %avg
485+
%trunc = trunc <8 x i16> %frozen to <8 x i8>
486+
%sext = sext <8 x i8> %trunc to <8 x i16>
487+
ret <8 x i16> %sext
488+
}
489+
490+
; TODO: Unnecessary sext_inreg
491+
define <8 x i16> @freeze_srhadd(<8 x i8> %a0, <8 x i16> %a1) {
492+
; CHECK-LABEL: freeze_srhadd:
493+
; CHECK: // %bb.0:
494+
; CHECK-NEXT: sshll v0.8h, v0.8b, #0
495+
; CHECK-NEXT: sshr v1.8h, v1.8h, #8
496+
; CHECK-NEXT: srhadd v0.8h, v0.8h, v1.8h
497+
; CHECK-NEXT: shl v0.8h, v0.8h, #8
498+
; CHECK-NEXT: sshr v0.8h, v0.8h, #8
499+
; CHECK-NEXT: ret
500+
%x0 = sext <8 x i8> %a0 to <8 x i16>
501+
%x1 = ashr <8 x i16> %a1, splat (i16 8)
502+
%avg = call <8 x i16> @llvm.aarch64.neon.srhadd.v8i16(<8 x i16> %x0, <8 x i16> %x1)
503+
%frozen = freeze <8 x i16> %avg
504+
%trunc = trunc <8 x i16> %frozen to <8 x i8>
505+
%sext = sext <8 x i8> %trunc to <8 x i16>
506+
ret <8 x i16> %sext
507+
}
508+
433509
define i32 @freeze_scmp(i32 %a0) nounwind {
434510
; CHECK-LABEL: freeze_scmp:
435511
; CHECK: // %bb.0:

0 commit comments

Comments
 (0)