@@ -903,6 +903,58 @@ define <8 x i16> @shadd_fixedwidth_v8i16(<8 x i16> %a0, <8 x i16> %a1) {
903
903
ret <8 x i16 > %res
904
904
}
905
905
906
+ define <8 x i16 > @shadd_demandedelts (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
907
+ ; CHECK-LABEL: shadd_demandedelts:
908
+ ; CHECK: // %bb.0:
909
+ ; CHECK-NEXT: dup v0.8h, v0.h[0]
910
+ ; CHECK-NEXT: shadd v0.8h, v0.8h, v1.8h
911
+ ; CHECK-NEXT: dup v0.8h, v0.h[0]
912
+ ; CHECK-NEXT: ret
913
+ %s0 = shufflevector <8 x i16 > %a0 , <8 x i16 > undef , <8 x i32 > zeroinitializer
914
+ %op = call <8 x i16 > @llvm.aarch64.neon.shadd.v8i16 (<8 x i16 > %s0 , <8 x i16 > %a1 )
915
+ %r0 = shufflevector <8 x i16 > %op , <8 x i16 > undef , <8 x i32 > zeroinitializer
916
+ ret <8 x i16 > %r0
917
+ }
918
+
919
+ define <8 x i16 > @srhadd_demandedelts (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
920
+ ; CHECK-LABEL: srhadd_demandedelts:
921
+ ; CHECK: // %bb.0:
922
+ ; CHECK-NEXT: dup v0.8h, v0.h[0]
923
+ ; CHECK-NEXT: srhadd v0.8h, v0.8h, v1.8h
924
+ ; CHECK-NEXT: dup v0.8h, v0.h[0]
925
+ ; CHECK-NEXT: ret
926
+ %s0 = shufflevector <8 x i16 > %a0 , <8 x i16 > undef , <8 x i32 > zeroinitializer
927
+ %op = call <8 x i16 > @llvm.aarch64.neon.srhadd.v8i16 (<8 x i16 > %s0 , <8 x i16 > %a1 )
928
+ %r0 = shufflevector <8 x i16 > %op , <8 x i16 > undef , <8 x i32 > zeroinitializer
929
+ ret <8 x i16 > %r0
930
+ }
931
+
932
+ define <8 x i16 > @uhadd_demandedelts (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
933
+ ; CHECK-LABEL: uhadd_demandedelts:
934
+ ; CHECK: // %bb.0:
935
+ ; CHECK-NEXT: dup v0.8h, v0.h[0]
936
+ ; CHECK-NEXT: uhadd v0.8h, v0.8h, v1.8h
937
+ ; CHECK-NEXT: dup v0.8h, v0.h[0]
938
+ ; CHECK-NEXT: ret
939
+ %s0 = shufflevector <8 x i16 > %a0 , <8 x i16 > undef , <8 x i32 > zeroinitializer
940
+ %op = call <8 x i16 > @llvm.aarch64.neon.uhadd.v8i16 (<8 x i16 > %s0 , <8 x i16 > %a1 )
941
+ %r0 = shufflevector <8 x i16 > %op , <8 x i16 > undef , <8 x i32 > zeroinitializer
942
+ ret <8 x i16 > %r0
943
+ }
944
+
945
+ define <8 x i16 > @urhadd_demandedelts (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
946
+ ; CHECK-LABEL: urhadd_demandedelts:
947
+ ; CHECK: // %bb.0:
948
+ ; CHECK-NEXT: dup v0.8h, v0.h[0]
949
+ ; CHECK-NEXT: urhadd v0.8h, v0.8h, v1.8h
950
+ ; CHECK-NEXT: dup v0.8h, v0.h[0]
951
+ ; CHECK-NEXT: ret
952
+ %s0 = shufflevector <8 x i16 > %a0 , <8 x i16 > undef , <8 x i32 > zeroinitializer
953
+ %op = call <8 x i16 > @llvm.aarch64.neon.urhadd.v8i16 (<8 x i16 > %s0 , <8 x i16 > %a1 )
954
+ %r0 = shufflevector <8 x i16 > %op , <8 x i16 > undef , <8 x i32 > zeroinitializer
955
+ ret <8 x i16 > %r0
956
+ }
957
+
906
958
declare <8 x i8 > @llvm.aarch64.neon.shadd.v8i8 (<8 x i8 >, <8 x i8 >)
907
959
declare <4 x i16 > @llvm.aarch64.neon.shadd.v4i16 (<4 x i16 >, <4 x i16 >)
908
960
declare <2 x i32 > @llvm.aarch64.neon.shadd.v2i32 (<2 x i32 >, <2 x i32 >)
@@ -927,4 +979,4 @@ declare <8 x i16> @llvm.aarch64.neon.srhadd.v8i16(<8 x i16>, <8 x i16>)
927
979
declare <4 x i32 > @llvm.aarch64.neon.srhadd.v4i32 (<4 x i32 >, <4 x i32 >)
928
980
declare <16 x i8 > @llvm.aarch64.neon.urhadd.v16i8 (<16 x i8 >, <16 x i8 >)
929
981
declare <8 x i16 > @llvm.aarch64.neon.urhadd.v8i16 (<8 x i16 >, <8 x i16 >)
930
- declare <4 x i32 > @llvm.aarch64.neon.urhadd.v4i32 (<4 x i32 >, <4 x i32 >)
982
+ declare <4 x i32 > @llvm.aarch64.neon.urhadd.v4i32 (<4 x i32 >, <4 x i32 >)
0 commit comments