@@ -234,7 +234,7 @@ define <8 x i16> @hadds_const_both() {
234234define <8 x i16 > @hadds_const_bothhigh () {
235235; CHECK-LABEL: hadds_const_bothhigh:
236236; CHECK: // %bb.0:
237- ; CHECK-NEXT: mov w8, #32766
237+ ; CHECK-NEXT: mov w8, #32766 // =0x7ffe
238238; CHECK-NEXT: dup v0.8h, w8
239239; CHECK-NEXT: ret
240240 %ext1 = sext <8 x i16 > <i16 32766 , i16 32766 , i16 32766 , i16 32766 , i16 32766 , i16 32766 , i16 32766 , i16 32766 > to <8 x i32 >
@@ -313,7 +313,7 @@ define <8 x i16> @hadds_i_const_both() {
313313define <8 x i16 > @hadds_i_const_bothhigh () {
314314; CHECK-LABEL: hadds_i_const_bothhigh:
315315; CHECK: // %bb.0:
316- ; CHECK-NEXT: mov w8, #32766
316+ ; CHECK-NEXT: mov w8, #32766 // =0x7ffe
317317; CHECK-NEXT: dup v0.8h, w8
318318; CHECK-NEXT: ret
319319 %result = call <8 x i16 > @llvm.aarch64.neon.shadd.v8i16 (<8 x i16 > <i16 32766 , i16 32766 , i16 32766 , i16 32766 , i16 32766 , i16 32766 , i16 32766 , i16 32766 >, <8 x i16 > <i16 32767 , i16 32767 , i16 32767 , i16 32767 , i16 32767 , i16 32767 , i16 32767 , i16 32767 >)
@@ -667,7 +667,244 @@ define <8 x i16> @rhadds_i_undef(<8 x i16> %t, <8 x i16> %src1) {
667667 ret <8 x i16 > %result
668668}
669669
670- declare <8 x i16 > @llvm.aarch64.neon.uhadd.v8i16 (<8 x i16 >, <8 x i16 >)
670+
671+ define <8 x i8 > @shadd_v8i8 (<8 x i8 > %x ) {
672+ ; CHECK-LABEL: shadd_v8i8:
673+ ; CHECK: // %bb.0:
674+ ; CHECK-NEXT: shadd v0.8b, v0.8b, v0.8b
675+ ; CHECK-NEXT: ret
676+ %r = tail call <8 x i8 > @llvm.aarch64.neon.shadd.v8i8 (<8 x i8 > %x , <8 x i8 > %x )
677+ ret <8 x i8 > %r
678+ }
679+
680+ define <4 x i16 > @shadd_v4i16 (<4 x i16 > %x ) {
681+ ; CHECK-LABEL: shadd_v4i16:
682+ ; CHECK: // %bb.0:
683+ ; CHECK-NEXT: shadd v0.4h, v0.4h, v0.4h
684+ ; CHECK-NEXT: ret
685+ %r = tail call <4 x i16 > @llvm.aarch64.neon.shadd.v4i16 (<4 x i16 > %x , <4 x i16 > %x )
686+ ret <4 x i16 > %r
687+ }
688+
689+ define <2 x i32 > @shadd_v2i32 (<2 x i32 > %x ) {
690+ ; CHECK-LABEL: shadd_v2i32:
691+ ; CHECK: // %bb.0:
692+ ; CHECK-NEXT: shadd v0.2s, v0.2s, v0.2s
693+ ; CHECK-NEXT: ret
694+ %r = tail call <2 x i32 > @llvm.aarch64.neon.shadd.v2i32 (<2 x i32 > %x , <2 x i32 > %x )
695+ ret <2 x i32 > %r
696+ }
697+
698+ define <16 x i8 > @shadd_v16i8 (<16 x i8 > %x ) {
699+ ; CHECK-LABEL: shadd_v16i8:
700+ ; CHECK: // %bb.0:
701+ ; CHECK-NEXT: shadd v0.16b, v0.16b, v0.16b
702+ ; CHECK-NEXT: ret
703+ %r = tail call <16 x i8 > @llvm.aarch64.neon.shadd.v16i8 (<16 x i8 > %x , <16 x i8 > %x )
704+ ret <16 x i8 > %r
705+ }
706+
707+ define <8 x i16 > @shadd_v8i16 (<8 x i16 > %x ) {
708+ ; CHECK-LABEL: shadd_v8i16:
709+ ; CHECK: // %bb.0:
710+ ; CHECK-NEXT: shadd v0.8h, v0.8h, v0.8h
711+ ; CHECK-NEXT: ret
712+ %r = tail call <8 x i16 > @llvm.aarch64.neon.shadd.v8i16 (<8 x i16 > %x , <8 x i16 > %x )
713+ ret <8 x i16 > %r
714+ }
715+
716+ define <4 x i32 > @shadd_v4i32 (<4 x i32 > %x ) {
717+ ; CHECK-LABEL: shadd_v4i32:
718+ ; CHECK: // %bb.0:
719+ ; CHECK-NEXT: shadd v0.4s, v0.4s, v0.4s
720+ ; CHECK-NEXT: ret
721+ %r = tail call <4 x i32 > @llvm.aarch64.neon.shadd.v4i32 (<4 x i32 > %x , <4 x i32 > %x )
722+ ret <4 x i32 > %r
723+ }
724+
725+ define <8 x i8 > @uhadd_v8i8 (<8 x i8 > %x ) {
726+ ; CHECK-LABEL: uhadd_v8i8:
727+ ; CHECK: // %bb.0:
728+ ; CHECK-NEXT: uhadd v0.8b, v0.8b, v0.8b
729+ ; CHECK-NEXT: ret
730+ %r = tail call <8 x i8 > @llvm.aarch64.neon.uhadd.v8i8 (<8 x i8 > %x , <8 x i8 > %x )
731+ ret <8 x i8 > %r
732+ }
733+
734+ define <4 x i16 > @uhadd_v4i16 (<4 x i16 > %x ) {
735+ ; CHECK-LABEL: uhadd_v4i16:
736+ ; CHECK: // %bb.0:
737+ ; CHECK-NEXT: uhadd v0.4h, v0.4h, v0.4h
738+ ; CHECK-NEXT: ret
739+ %r = tail call <4 x i16 > @llvm.aarch64.neon.uhadd.v4i16 (<4 x i16 > %x , <4 x i16 > %x )
740+ ret <4 x i16 > %r
741+ }
742+
743+ define <2 x i32 > @uhadd_v2i32 (<2 x i32 > %x ) {
744+ ; CHECK-LABEL: uhadd_v2i32:
745+ ; CHECK: // %bb.0:
746+ ; CHECK-NEXT: uhadd v0.2s, v0.2s, v0.2s
747+ ; CHECK-NEXT: ret
748+ %r = tail call <2 x i32 > @llvm.aarch64.neon.uhadd.v2i32 (<2 x i32 > %x , <2 x i32 > %x )
749+ ret <2 x i32 > %r
750+ }
751+
752+ define <16 x i8 > @uhadd_v16i8 (<16 x i8 > %x ) {
753+ ; CHECK-LABEL: uhadd_v16i8:
754+ ; CHECK: // %bb.0:
755+ ; CHECK-NEXT: uhadd v0.16b, v0.16b, v0.16b
756+ ; CHECK-NEXT: ret
757+ %r = tail call <16 x i8 > @llvm.aarch64.neon.uhadd.v16i8 (<16 x i8 > %x , <16 x i8 > %x )
758+ ret <16 x i8 > %r
759+ }
760+
761+ define <8 x i16 > @uhadd_v8i16 (<8 x i16 > %x ) {
762+ ; CHECK-LABEL: uhadd_v8i16:
763+ ; CHECK: // %bb.0:
764+ ; CHECK-NEXT: uhadd v0.8h, v0.8h, v0.8h
765+ ; CHECK-NEXT: ret
766+ %r = tail call <8 x i16 > @llvm.aarch64.neon.uhadd.v8i16 (<8 x i16 > %x , <8 x i16 > %x )
767+ ret <8 x i16 > %r
768+ }
769+
770+ define <4 x i32 > @uhadd_v4i32 (<4 x i32 > %x ) {
771+ ; CHECK-LABEL: uhadd_v4i32:
772+ ; CHECK: // %bb.0:
773+ ; CHECK-NEXT: uhadd v0.4s, v0.4s, v0.4s
774+ ; CHECK-NEXT: ret
775+ %r = tail call <4 x i32 > @llvm.aarch64.neon.uhadd.v4i32 (<4 x i32 > %x , <4 x i32 > %x )
776+ ret <4 x i32 > %r
777+ }
778+ define <8 x i8 > @srhadd_v8i8 (<8 x i8 > %x ) {
779+ ; CHECK-LABEL: srhadd_v8i8:
780+ ; CHECK: // %bb.0:
781+ ; CHECK-NEXT: srhadd v0.8b, v0.8b, v0.8b
782+ ; CHECK-NEXT: ret
783+ %r = tail call <8 x i8 > @llvm.aarch64.neon.srhadd.v8i8 (<8 x i8 > %x , <8 x i8 > %x )
784+ ret <8 x i8 > %r
785+ }
786+
787+ define <4 x i16 > @srhadd_v4i16 (<4 x i16 > %x ) {
788+ ; CHECK-LABEL: srhadd_v4i16:
789+ ; CHECK: // %bb.0:
790+ ; CHECK-NEXT: srhadd v0.4h, v0.4h, v0.4h
791+ ; CHECK-NEXT: ret
792+ %r = tail call <4 x i16 > @llvm.aarch64.neon.srhadd.v4i16 (<4 x i16 > %x , <4 x i16 > %x )
793+ ret <4 x i16 > %r
794+ }
795+
796+ define <2 x i32 > @srhadd_v2i32 (<2 x i32 > %x ) {
797+ ; CHECK-LABEL: srhadd_v2i32:
798+ ; CHECK: // %bb.0:
799+ ; CHECK-NEXT: srhadd v0.2s, v0.2s, v0.2s
800+ ; CHECK-NEXT: ret
801+ %r = tail call <2 x i32 > @llvm.aarch64.neon.srhadd.v2i32 (<2 x i32 > %x , <2 x i32 > %x )
802+ ret <2 x i32 > %r
803+ }
804+
805+ define <16 x i8 > @srhadd_v16i8 (<16 x i8 > %x ) {
806+ ; CHECK-LABEL: srhadd_v16i8:
807+ ; CHECK: // %bb.0:
808+ ; CHECK-NEXT: srhadd v0.16b, v0.16b, v0.16b
809+ ; CHECK-NEXT: ret
810+ %r = tail call <16 x i8 > @llvm.aarch64.neon.srhadd.v16i8 (<16 x i8 > %x , <16 x i8 > %x )
811+ ret <16 x i8 > %r
812+ }
813+
814+ define <8 x i16 > @srhadd_v8i16 (<8 x i16 > %x ) {
815+ ; CHECK-LABEL: srhadd_v8i16:
816+ ; CHECK: // %bb.0:
817+ ; CHECK-NEXT: srhadd v0.8h, v0.8h, v0.8h
818+ ; CHECK-NEXT: ret
819+ %r = tail call <8 x i16 > @llvm.aarch64.neon.srhadd.v8i16 (<8 x i16 > %x , <8 x i16 > %x )
820+ ret <8 x i16 > %r
821+ }
822+
823+ define <4 x i32 > @srhadd_v4i32 (<4 x i32 > %x ) {
824+ ; CHECK-LABEL: srhadd_v4i32:
825+ ; CHECK: // %bb.0:
826+ ; CHECK-NEXT: srhadd v0.4s, v0.4s, v0.4s
827+ ; CHECK-NEXT: ret
828+ %r = tail call <4 x i32 > @llvm.aarch64.neon.srhadd.v4i32 (<4 x i32 > %x , <4 x i32 > %x )
829+ ret <4 x i32 > %r
830+ }
831+
832+ define <8 x i8 > @urhadd_v8i8 (<8 x i8 > %x ) {
833+ ; CHECK-LABEL: urhadd_v8i8:
834+ ; CHECK: // %bb.0:
835+ ; CHECK-NEXT: urhadd v0.8b, v0.8b, v0.8b
836+ ; CHECK-NEXT: ret
837+ %r = tail call <8 x i8 > @llvm.aarch64.neon.urhadd.v8i8 (<8 x i8 > %x , <8 x i8 > %x )
838+ ret <8 x i8 > %r
839+ }
840+
841+ define <4 x i16 > @urhadd_v4i16 (<4 x i16 > %x ) {
842+ ; CHECK-LABEL: urhadd_v4i16:
843+ ; CHECK: // %bb.0:
844+ ; CHECK-NEXT: urhadd v0.4h, v0.4h, v0.4h
845+ ; CHECK-NEXT: ret
846+ %r = tail call <4 x i16 > @llvm.aarch64.neon.urhadd.v4i16 (<4 x i16 > %x , <4 x i16 > %x )
847+ ret <4 x i16 > %r
848+ }
849+
850+ define <2 x i32 > @urhadd_v2i32 (<2 x i32 > %x ) {
851+ ; CHECK-LABEL: urhadd_v2i32:
852+ ; CHECK: // %bb.0:
853+ ; CHECK-NEXT: urhadd v0.2s, v0.2s, v0.2s
854+ ; CHECK-NEXT: ret
855+ %r = tail call <2 x i32 > @llvm.aarch64.neon.urhadd.v2i32 (<2 x i32 > %x , <2 x i32 > %x )
856+ ret <2 x i32 > %r
857+ }
858+
859+ define <16 x i8 > @urhadd_v16i8 (<16 x i8 > %x ) {
860+ ; CHECK-LABEL: urhadd_v16i8:
861+ ; CHECK: // %bb.0:
862+ ; CHECK-NEXT: urhadd v0.16b, v0.16b, v0.16b
863+ ; CHECK-NEXT: ret
864+ %r = tail call <16 x i8 > @llvm.aarch64.neon.urhadd.v16i8 (<16 x i8 > %x , <16 x i8 > %x )
865+ ret <16 x i8 > %r
866+ }
867+
868+ define <8 x i16 > @urhadd_v8i16 (<8 x i16 > %x ) {
869+ ; CHECK-LABEL: urhadd_v8i16:
870+ ; CHECK: // %bb.0:
871+ ; CHECK-NEXT: urhadd v0.8h, v0.8h, v0.8h
872+ ; CHECK-NEXT: ret
873+ %r = tail call <8 x i16 > @llvm.aarch64.neon.urhadd.v8i16 (<8 x i16 > %x , <8 x i16 > %x )
874+ ret <8 x i16 > %r
875+ }
876+
877+ define <4 x i32 > @urhadd_v4i32 (<4 x i32 > %x ) {
878+ ; CHECK-LABEL: urhadd_v4i32:
879+ ; CHECK: // %bb.0:
880+ ; CHECK-NEXT: urhadd v0.4s, v0.4s, v0.4s
881+ ; CHECK-NEXT: ret
882+ %r = tail call <4 x i32 > @llvm.aarch64.neon.urhadd.v4i32 (<4 x i32 > %x , <4 x i32 > %x )
883+ ret <4 x i32 > %r
884+ }
885+
886+ declare <8 x i8 > @llvm.aarch64.neon.shadd.v8i8 (<8 x i8 >, <8 x i8 >)
887+ declare <4 x i16 > @llvm.aarch64.neon.shadd.v4i16 (<4 x i16 >, <4 x i16 >)
888+ declare <2 x i32 > @llvm.aarch64.neon.shadd.v2i32 (<2 x i32 >, <2 x i32 >)
889+ declare <8 x i8 > @llvm.aarch64.neon.uhadd.v8i8 (<8 x i8 >, <8 x i8 >)
890+ declare <4 x i16 > @llvm.aarch64.neon.uhadd.v4i16 (<4 x i16 >, <4 x i16 >)
891+ declare <2 x i32 > @llvm.aarch64.neon.uhadd.v2i32 (<2 x i32 >, <2 x i32 >)
892+ declare <16 x i8 > @llvm.aarch64.neon.shadd.v16i8 (<16 x i8 >, <16 x i8 >)
671893declare <8 x i16 > @llvm.aarch64.neon.shadd.v8i16 (<8 x i16 >, <8 x i16 >)
672- declare <8 x i16 > @llvm.aarch64.neon.urhadd.v8i16 (<8 x i16 >, <8 x i16 >)
894+ declare <4 x i32 > @llvm.aarch64.neon.shadd.v4i32 (<4 x i32 >, <4 x i32 >)
895+ declare <16 x i8 > @llvm.aarch64.neon.uhadd.v16i8 (<16 x i8 >, <16 x i8 >)
896+ declare <8 x i16 > @llvm.aarch64.neon.uhadd.v8i16 (<8 x i16 >, <8 x i16 >)
897+ declare <4 x i32 > @llvm.aarch64.neon.uhadd.v4i32 (<4 x i32 >, <4 x i32 >)
898+
899+ declare <8 x i8 > @llvm.aarch64.neon.srhadd.v8i8 (<8 x i8 >, <8 x i8 >)
900+ declare <4 x i16 > @llvm.aarch64.neon.srhadd.v4i16 (<4 x i16 >, <4 x i16 >)
901+ declare <2 x i32 > @llvm.aarch64.neon.srhadd.v2i32 (<2 x i32 >, <2 x i32 >)
902+ declare <8 x i8 > @llvm.aarch64.neon.urhadd.v8i8 (<8 x i8 >, <8 x i8 >)
903+ declare <4 x i16 > @llvm.aarch64.neon.urhadd.v4i16 (<4 x i16 >, <4 x i16 >)
904+ declare <2 x i32 > @llvm.aarch64.neon.urhadd.v2i32 (<2 x i32 >, <2 x i32 >)
905+ declare <16 x i8 > @llvm.aarch64.neon.srhadd.v16i8 (<16 x i8 >, <16 x i8 >)
673906declare <8 x i16 > @llvm.aarch64.neon.srhadd.v8i16 (<8 x i16 >, <8 x i16 >)
907+ declare <4 x i32 > @llvm.aarch64.neon.srhadd.v4i32 (<4 x i32 >, <4 x i32 >)
908+ declare <16 x i8 > @llvm.aarch64.neon.urhadd.v16i8 (<16 x i8 >, <16 x i8 >)
909+ declare <8 x i16 > @llvm.aarch64.neon.urhadd.v8i16 (<8 x i16 >, <8 x i16 >)
910+ declare <4 x i32 > @llvm.aarch64.neon.urhadd.v4i32 (<4 x i32 >, <4 x i32 >)
0 commit comments