; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s 2>%t | FileCheck %s ; RUN: FileCheck --check-prefix=WARN --allow-empty %s <%t ; If this check fails please read test/CodeGen/AArch64/README for instructions on how to resolve it. ; WARN-NOT: warning ; ; SABALB ; define @sabalb_b( %a, %b, %c) { ; CHECK-LABEL: sabalb_b: ; CHECK: sabalb z0.h, z1.b, z2.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabalb.nxv8i16( %a, %b, %c) ret %out } define @sabalb_h( %a, %b, %c) { ; CHECK-LABEL: sabalb_h: ; CHECK: sabalb z0.s, z1.h, z2.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabalb.nxv4i32( %a, %b, %c) ret %out } define @sabalb_s( %a, %b, %c) { ; CHECK-LABEL: sabalb_s: ; CHECK: sabalb z0.d, z1.s, z2.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabalb.nxv2i64( %a, %b, %c) ret %out } ; ; SABALT ; define @sabalt_b( %a, %b, %c) { ; CHECK-LABEL: sabalt_b: ; CHECK: sabalt z0.h, z1.b, z2.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabalt.nxv8i16( %a, %b, %c) ret %out } define @sabalt_h( %a, %b, %c) { ; CHECK-LABEL: sabalt_h: ; CHECK: sabalt z0.s, z1.h, z2.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabalt.nxv4i32( %a, %b, %c) ret %out } define @sabalt_s( %a, %b, %c) { ; CHECK-LABEL: sabalt_s: ; CHECK: sabalt z0.d, z1.s, z2.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabalt.nxv2i64( %a, %b, %c) ret %out } ; ; SABDLB ; define @sabdlb_b( %a, %b) { ; CHECK-LABEL: sabdlb_b: ; CHECK: sabdlb z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabdlb.nxv8i16( %a, %b) ret %out } define @sabdlb_h( %a, %b) { ; CHECK-LABEL: sabdlb_h: ; CHECK: sabdlb z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabdlb.nxv4i32( %a, %b) ret %out } define @sabdlb_s( %a, %b) { ; CHECK-LABEL: sabdlb_s: ; CHECK: sabdlb z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabdlb.nxv2i64( %a, %b) ret %out } ; ; SABDLT ; define @sabdlt_b( %a, %b) { ; CHECK-LABEL: sabdlt_b: ; CHECK: sabdlt z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabdlt.nxv8i16( %a, %b) ret %out } define @sabdlt_h( %a, %b) { ; CHECK-LABEL: sabdlt_h: ; CHECK: sabdlt z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabdlt.nxv4i32( %a, %b) ret %out } define @sabdlt_s( %a, %b) { ; CHECK-LABEL: sabdlt_s: ; CHECK: sabdlt z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sabdlt.nxv2i64( %a, %b) ret %out } ; ; SADDLB ; define @saddlb_b( %a, %b) { ; CHECK-LABEL: saddlb_b: ; CHECK: saddlb z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddlb.nxv8i16( %a, %b) ret %out } define @saddlb_h( %a, %b) { ; CHECK-LABEL: saddlb_h: ; CHECK: saddlb z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddlb.nxv4i32( %a, %b) ret %out } define @saddlb_s( %a, %b) { ; CHECK-LABEL: saddlb_s: ; CHECK: saddlb z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddlb.nxv2i64( %a, %b) ret %out } ; ; SADDLT ; define @saddlt_b( %a, %b) { ; CHECK-LABEL: saddlt_b: ; CHECK: saddlt z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddlt.nxv8i16( %a, %b) ret %out } define @saddlt_h( %a, %b) { ; CHECK-LABEL: saddlt_h: ; CHECK: saddlt z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddlt.nxv4i32( %a, %b) ret %out } define @saddlt_s( %a, %b) { ; CHECK-LABEL: saddlt_s: ; CHECK: saddlt z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddlt.nxv2i64( %a, %b) ret %out } ; ; SADDWB ; define @saddwb_b( %a, %b) { ; CHECK-LABEL: saddwb_b: ; CHECK: saddwb z0.h, z0.h, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddwb.nxv8i16( %a, %b) ret %out } define @saddwb_h( %a, %b) { ; CHECK-LABEL: saddwb_h: ; CHECK: saddwb z0.s, z0.s, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddwb.nxv4i32( %a, %b) ret %out } define @saddwb_s( %a, %b) { ; CHECK-LABEL: saddwb_s: ; CHECK: saddwb z0.d, z0.d, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddwb.nxv2i64( %a, %b) ret %out } ; ; SADDWT ; define @saddwt_b( %a, %b) { ; CHECK-LABEL: saddwt_b: ; CHECK: saddwt z0.h, z0.h, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddwt.nxv8i16( %a, %b) ret %out } define @saddwt_h( %a, %b) { ; CHECK-LABEL: saddwt_h: ; CHECK: saddwt z0.s, z0.s, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddwt.nxv4i32( %a, %b) ret %out } define @saddwt_s( %a, %b) { ; CHECK-LABEL: saddwt_s: ; CHECK: saddwt z0.d, z0.d, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.saddwt.nxv2i64( %a, %b) ret %out } ; ; SMULLB (Vectors) ; define @smullb_b( %a, %b) { ; CHECK-LABEL: smullb_b: ; CHECK: smullb z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullb.nxv8i16( %a, %b) ret %out } define @smullb_h( %a, %b) { ; CHECK-LABEL: smullb_h: ; CHECK: smullb z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullb.nxv4i32( %a, %b) ret %out } define @smullb_s( %a, %b) { ; CHECK-LABEL: smullb_s: ; CHECK: smullb z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullb.nxv2i64( %a, %b) ret %out } ; ; SMULLB (Indexed) ; define @smullb_lane_h( %a, %b) { ; CHECK-LABEL: smullb_lane_h: ; CHECK: smullb z0.s, z0.h, z1.h[4] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullb.lane.nxv4i32( %a, %b, i32 4) ret %out } define @smullb_lane_s( %a, %b) { ; CHECK-LABEL: smullb_lane_s: ; CHECK: smullb z0.d, z0.s, z1.s[3] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullb.lane.nxv2i64( %a, %b, i32 3) ret %out } ; ; SMULLT (Vectors) ; define @smullt_b( %a, %b) { ; CHECK-LABEL: smullt_b: ; CHECK: smullt z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullt.nxv8i16( %a, %b) ret %out } define @smullt_h( %a, %b) { ; CHECK-LABEL: smullt_h: ; CHECK: smullt z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullt.nxv4i32( %a, %b) ret %out } define @smullt_s( %a, %b) { ; CHECK-LABEL: smullt_s: ; CHECK: smullt z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullt.nxv2i64( %a, %b) ret %out } ; ; SMULLT (Indexed) ; define @smullt_lane_h( %a, %b) { ; CHECK-LABEL: smullt_lane_h: ; CHECK: smullt z0.s, z0.h, z1.h[5] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullt.lane.nxv4i32( %a, %b, i32 5) ret %out } define @smullt_lane_s( %a, %b) { ; CHECK-LABEL: smullt_lane_s: ; CHECK: smullt z0.d, z0.s, z1.s[2] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.smullt.lane.nxv2i64( %a, %b, i32 2) ret %out } ; ; SQDMULLB (Vectors) ; define @sqdmullb_b( %a, %b) { ; CHECK-LABEL: sqdmullb_b: ; CHECK: sqdmullb z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullb.nxv8i16( %a, %b) ret %out } define @sqdmullb_h( %a, %b) { ; CHECK-LABEL: sqdmullb_h: ; CHECK: sqdmullb z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullb.nxv4i32( %a, %b) ret %out } define @sqdmullb_s( %a, %b) { ; CHECK-LABEL: sqdmullb_s: ; CHECK: sqdmullb z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullb.nxv2i64( %a, %b) ret %out } ; ; SQDMULLB (Indexed) ; define @sqdmullb_lane_h( %a, %b) { ; CHECK-LABEL: sqdmullb_lane_h: ; CHECK: sqdmullb z0.s, z0.h, z1.h[2] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullb.lane.nxv4i32( %a, %b, i32 2) ret %out } define @sqdmullb_lane_s( %a, %b) { ; CHECK-LABEL: sqdmullb_lane_s: ; CHECK: sqdmullb z0.d, z0.s, z1.s[1] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullb.lane.nxv2i64( %a, %b, i32 1) ret %out } ; ; SQDMULLT (Vectors) ; define @sqdmullt_b( %a, %b) { ; CHECK-LABEL: sqdmullt_b: ; CHECK: sqdmullt z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullt.nxv8i16( %a, %b) ret %out } define @sqdmullt_h( %a, %b) { ; CHECK-LABEL: sqdmullt_h: ; CHECK: sqdmullt z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullt.nxv4i32( %a, %b) ret %out } define @sqdmullt_s( %a, %b) { ; CHECK-LABEL: sqdmullt_s: ; CHECK: sqdmullt z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullt.nxv2i64( %a, %b) ret %out } ; ; SQDMULLT (Indexed) ; define @sqdmullt_lane_h( %a, %b) { ; CHECK-LABEL: sqdmullt_lane_h: ; CHECK: sqdmullt z0.s, z0.h, z1.h[3] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullt.lane.nxv4i32( %a, %b, i32 3) ret %out } define @sqdmullt_lane_s( %a, %b) { ; CHECK-LABEL: sqdmullt_lane_s: ; CHECK: sqdmullt z0.d, z0.s, z1.s[0] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqdmullt.lane.nxv2i64( %a, %b, i32 0) ret %out } ; ; SSUBLB ; define @ssublb_b( %a, %b) { ; CHECK-LABEL: ssublb_b: ; CHECK: ssublb z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssublb.nxv8i16( %a, %b) ret %out } define @ssublb_h( %a, %b) { ; CHECK-LABEL: ssublb_h: ; CHECK: ssublb z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssublb.nxv4i32( %a, %b) ret %out } define @ssublb_s( %a, %b) { ; CHECK-LABEL: ssublb_s: ; CHECK: ssublb z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssublb.nxv2i64( %a, %b) ret %out } ; ; SSHLLB ; define @sshllb_b( %a) { ; CHECK-LABEL: sshllb_b: ; CHECK: sshllb z0.h, z0.b, #0 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sshllb.nxv8i16( %a, i32 0) ret %out } define @sshllb_h( %a) { ; CHECK-LABEL: sshllb_h: ; CHECK: sshllb z0.s, z0.h, #1 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sshllb.nxv4i32( %a, i32 1) ret %out } define @sshllb_s( %a) { ; CHECK-LABEL: sshllb_s: ; CHECK: sshllb z0.d, z0.s, #2 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sshllb.nxv2i64( %a, i32 2) ret %out } ; ; SSHLLT ; define @sshllt_b( %a) { ; CHECK-LABEL: sshllt_b: ; CHECK: sshllt z0.h, z0.b, #3 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sshllt.nxv8i16( %a, i32 3) ret %out } define @sshllt_h( %a) { ; CHECK-LABEL: sshllt_h: ; CHECK: sshllt z0.s, z0.h, #4 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sshllt.nxv4i32( %a, i32 4) ret %out } define @sshllt_s( %a) { ; CHECK-LABEL: sshllt_s: ; CHECK: sshllt z0.d, z0.s, #5 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sshllt.nxv2i64( %a, i32 5) ret %out } ; ; SSUBLT ; define @ssublt_b( %a, %b) { ; CHECK-LABEL: ssublt_b: ; CHECK: ssublt z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssublt.nxv8i16( %a, %b) ret %out } define @ssublt_h( %a, %b) { ; CHECK-LABEL: ssublt_h: ; CHECK: ssublt z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssublt.nxv4i32( %a, %b) ret %out } define @ssublt_s( %a, %b) { ; CHECK-LABEL: ssublt_s: ; CHECK: ssublt z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssublt.nxv2i64( %a, %b) ret %out } ; ; SSUBWB ; define @ssubwb_b( %a, %b) { ; CHECK-LABEL: ssubwb_b: ; CHECK: ssubwb z0.h, z0.h, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssubwb.nxv8i16( %a, %b) ret %out } define @ssubwb_h( %a, %b) { ; CHECK-LABEL: ssubwb_h: ; CHECK: ssubwb z0.s, z0.s, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssubwb.nxv4i32( %a, %b) ret %out } define @ssubwb_s( %a, %b) { ; CHECK-LABEL: ssubwb_s: ; CHECK: ssubwb z0.d, z0.d, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssubwb.nxv2i64( %a, %b) ret %out } ; ; SSUBWT ; define @ssubwt_b( %a, %b) { ; CHECK-LABEL: ssubwt_b: ; CHECK: ssubwt z0.h, z0.h, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssubwt.nxv8i16( %a, %b) ret %out } define @ssubwt_h( %a, %b) { ; CHECK-LABEL: ssubwt_h: ; CHECK: ssubwt z0.s, z0.s, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssubwt.nxv4i32( %a, %b) ret %out } define @ssubwt_s( %a, %b) { ; CHECK-LABEL: ssubwt_s: ; CHECK: ssubwt z0.d, z0.d, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ssubwt.nxv2i64( %a, %b) ret %out } ; ; UABALB ; define @uabalb_b( %a, %b, %c) { ; CHECK-LABEL: uabalb_b: ; CHECK: uabalb z0.h, z1.b, z2.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabalb.nxv8i16( %a, %b, %c) ret %out } define @uabalb_h( %a, %b, %c) { ; CHECK-LABEL: uabalb_h: ; CHECK: uabalb z0.s, z1.h, z2.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabalb.nxv4i32( %a, %b, %c) ret %out } define @uabalb_s( %a, %b, %c) { ; CHECK-LABEL: uabalb_s: ; CHECK: uabalb z0.d, z1.s, z2.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabalb.nxv2i64( %a, %b, %c) ret %out } ; ; UABALT ; define @uabalt_b( %a, %b, %c) { ; CHECK-LABEL: uabalt_b: ; CHECK: uabalt z0.h, z1.b, z2.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabalt.nxv8i16( %a, %b, %c) ret %out } define @uabalt_h( %a, %b, %c) { ; CHECK-LABEL: uabalt_h: ; CHECK: uabalt z0.s, z1.h, z2.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabalt.nxv4i32( %a, %b, %c) ret %out } define @uabalt_s( %a, %b, %c) { ; CHECK-LABEL: uabalt_s: ; CHECK: uabalt z0.d, z1.s, z2.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabalt.nxv2i64( %a, %b, %c) ret %out } ; ; UABDLB ; define @uabdlb_b( %a, %b) { ; CHECK-LABEL: uabdlb_b: ; CHECK: uabdlb z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabdlb.nxv8i16( %a, %b) ret %out } define @uabdlb_h( %a, %b) { ; CHECK-LABEL: uabdlb_h: ; CHECK: uabdlb z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabdlb.nxv4i32( %a, %b) ret %out } define @uabdlb_s( %a, %b) { ; CHECK-LABEL: uabdlb_s: ; CHECK: uabdlb z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabdlb.nxv2i64( %a, %b) ret %out } ; ; UABDLT ; define @uabdlt_b( %a, %b) { ; CHECK-LABEL: uabdlt_b: ; CHECK: uabdlt z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabdlt.nxv8i16( %a, %b) ret %out } define @uabdlt_h( %a, %b) { ; CHECK-LABEL: uabdlt_h: ; CHECK: uabdlt z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabdlt.nxv4i32( %a, %b) ret %out } define @uabdlt_s( %a, %b) { ; CHECK-LABEL: uabdlt_s: ; CHECK: uabdlt z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uabdlt.nxv2i64( %a, %b) ret %out } ; ; UADDLB ; define @uaddlb_b( %a, %b) { ; CHECK-LABEL: uaddlb_b: ; CHECK: uaddlb z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddlb.nxv8i16( %a, %b) ret %out } define @uaddlb_h( %a, %b) { ; CHECK-LABEL: uaddlb_h: ; CHECK: uaddlb z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddlb.nxv4i32( %a, %b) ret %out } define @uaddlb_s( %a, %b) { ; CHECK-LABEL: uaddlb_s: ; CHECK: uaddlb z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddlb.nxv2i64( %a, %b) ret %out } ; ; UADDLT ; define @uaddlt_b( %a, %b) { ; CHECK-LABEL: uaddlt_b: ; CHECK: uaddlt z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddlt.nxv8i16( %a, %b) ret %out } define @uaddlt_h( %a, %b) { ; CHECK-LABEL: uaddlt_h: ; CHECK: uaddlt z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddlt.nxv4i32( %a, %b) ret %out } define @uaddlt_s( %a, %b) { ; CHECK-LABEL: uaddlt_s: ; CHECK: uaddlt z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddlt.nxv2i64( %a, %b) ret %out } ; ; UADDWB ; define @uaddwb_b( %a, %b) { ; CHECK-LABEL: uaddwb_b: ; CHECK: uaddwb z0.h, z0.h, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddwb.nxv8i16( %a, %b) ret %out } define @uaddwb_h( %a, %b) { ; CHECK-LABEL: uaddwb_h: ; CHECK: uaddwb z0.s, z0.s, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddwb.nxv4i32( %a, %b) ret %out } define @uaddwb_s( %a, %b) { ; CHECK-LABEL: uaddwb_s: ; CHECK: uaddwb z0.d, z0.d, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddwb.nxv2i64( %a, %b) ret %out } ; ; UADDWT ; define @uaddwt_b( %a, %b) { ; CHECK-LABEL: uaddwt_b: ; CHECK: uaddwt z0.h, z0.h, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddwt.nxv8i16( %a, %b) ret %out } define @uaddwt_h( %a, %b) { ; CHECK-LABEL: uaddwt_h: ; CHECK: uaddwt z0.s, z0.s, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddwt.nxv4i32( %a, %b) ret %out } define @uaddwt_s( %a, %b) { ; CHECK-LABEL: uaddwt_s: ; CHECK: uaddwt z0.d, z0.d, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uaddwt.nxv2i64( %a, %b) ret %out } ; ; UMULLB (Vectors) ; define @umullb_b( %a, %b) { ; CHECK-LABEL: umullb_b: ; CHECK: umullb z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullb.nxv8i16( %a, %b) ret %out } define @umullb_h( %a, %b) { ; CHECK-LABEL: umullb_h: ; CHECK: umullb z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullb.nxv4i32( %a, %b) ret %out } define @umullb_s( %a, %b) { ; CHECK-LABEL: umullb_s: ; CHECK: umullb z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullb.nxv2i64( %a, %b) ret %out } ; ; UMULLB (Indexed) ; define @umullb_lane_h( %a, %b) { ; CHECK-LABEL: umullb_lane_h: ; CHECK: umullb z0.s, z0.h, z1.h[0] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullb.lane.nxv4i32( %a, %b, i32 0) ret %out } define @umullb_lane_s( %a, %b) { ; CHECK-LABEL: umullb_lane_s: ; CHECK: umullb z0.d, z0.s, z1.s[3] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullb.lane.nxv2i64( %a, %b, i32 3) ret %out } ; ; UMULLT (Vectors) ; define @umullt_b( %a, %b) { ; CHECK-LABEL: umullt_b: ; CHECK: umullt z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullt.nxv8i16( %a, %b) ret %out } define @umullt_h( %a, %b) { ; CHECK-LABEL: umullt_h: ; CHECK: umullt z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullt.nxv4i32( %a, %b) ret %out } define @umullt_s( %a, %b) { ; CHECK-LABEL: umullt_s: ; CHECK: umullt z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullt.nxv2i64( %a, %b) ret %out } ; ; UMULLT (Indexed) ; define @umullt_lane_h( %a, %b) { ; CHECK-LABEL: umullt_lane_h: ; CHECK: umullt z0.s, z0.h, z1.h[1] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullt.lane.nxv4i32( %a, %b, i32 1) ret %out } define @umullt_lane_s( %a, %b) { ; CHECK-LABEL: umullt_lane_s: ; CHECK: umullt z0.d, z0.s, z1.s[2] ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.umullt.lane.nxv2i64( %a, %b, i32 2) ret %out } ; ; USHLLB ; define @ushllb_b( %a) { ; CHECK-LABEL: ushllb_b: ; CHECK: ushllb z0.h, z0.b, #6 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ushllb.nxv8i16( %a, i32 6) ret %out } define @ushllb_h( %a) { ; CHECK-LABEL: ushllb_h: ; CHECK: ushllb z0.s, z0.h, #7 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ushllb.nxv4i32( %a, i32 7) ret %out } define @ushllb_s( %a) { ; CHECK-LABEL: ushllb_s: ; CHECK: ushllb z0.d, z0.s, #8 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ushllb.nxv2i64( %a, i32 8) ret %out } ; ; USHLLT ; define @ushllt_b( %a) { ; CHECK-LABEL: ushllt_b: ; CHECK: ushllt z0.h, z0.b, #7 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ushllt.nxv8i16( %a, i32 7) ret %out } define @ushllt_h( %a) { ; CHECK-LABEL: ushllt_h: ; CHECK: ushllt z0.s, z0.h, #15 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ushllt.nxv4i32( %a, i32 15) ret %out } define @ushllt_s( %a) { ; CHECK-LABEL: ushllt_s: ; CHECK: ushllt z0.d, z0.s, #31 ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.ushllt.nxv2i64( %a, i32 31) ret %out } ; ; USUBLB ; define @usublb_b( %a, %b) { ; CHECK-LABEL: usublb_b: ; CHECK: usublb z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usublb.nxv8i16( %a, %b) ret %out } define @usublb_h( %a, %b) { ; CHECK-LABEL: usublb_h: ; CHECK: usublb z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usublb.nxv4i32( %a, %b) ret %out } define @usublb_s( %a, %b) { ; CHECK-LABEL: usublb_s: ; CHECK: usublb z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usublb.nxv2i64( %a, %b) ret %out } ; ; USUBLT ; define @usublt_b( %a, %b) { ; CHECK-LABEL: usublt_b: ; CHECK: usublt z0.h, z0.b, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usublt.nxv8i16( %a, %b) ret %out } define @usublt_h( %a, %b) { ; CHECK-LABEL: usublt_h: ; CHECK: usublt z0.s, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usublt.nxv4i32( %a, %b) ret %out } define @usublt_s( %a, %b) { ; CHECK-LABEL: usublt_s: ; CHECK: usublt z0.d, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usublt.nxv2i64( %a, %b) ret %out } ; ; USUBWB ; define @usubwb_b( %a, %b) { ; CHECK-LABEL: usubwb_b: ; CHECK: usubwb z0.h, z0.h, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usubwb.nxv8i16( %a, %b) ret %out } define @usubwb_h( %a, %b) { ; CHECK-LABEL: usubwb_h: ; CHECK: usubwb z0.s, z0.s, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usubwb.nxv4i32( %a, %b) ret %out } define @usubwb_s( %a, %b) { ; CHECK-LABEL: usubwb_s: ; CHECK: usubwb z0.d, z0.d, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usubwb.nxv2i64( %a, %b) ret %out } ; ; USUBWT ; define @usubwt_b( %a, %b) { ; CHECK-LABEL: usubwt_b: ; CHECK: usubwt z0.h, z0.h, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usubwt.nxv8i16( %a, %b) ret %out } define @usubwt_h( %a, %b) { ; CHECK-LABEL: usubwt_h: ; CHECK: usubwt z0.s, z0.s, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usubwt.nxv4i32( %a, %b) ret %out } define @usubwt_s( %a, %b) { ; CHECK-LABEL: usubwt_s: ; CHECK: usubwt z0.d, z0.d, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.usubwt.nxv2i64( %a, %b) ret %out } declare @llvm.aarch64.sve.sabalb.nxv8i16(, , ) declare @llvm.aarch64.sve.sabalb.nxv4i32(, , ) declare @llvm.aarch64.sve.sabalb.nxv2i64(, , ) declare @llvm.aarch64.sve.sabalt.nxv8i16(, , ) declare @llvm.aarch64.sve.sabalt.nxv4i32(, , ) declare @llvm.aarch64.sve.sabalt.nxv2i64(, , ) declare @llvm.aarch64.sve.sabdlb.nxv8i16(, ) declare @llvm.aarch64.sve.sabdlb.nxv4i32(, ) declare @llvm.aarch64.sve.sabdlb.nxv2i64(, ) declare @llvm.aarch64.sve.sabdlt.nxv8i16(, ) declare @llvm.aarch64.sve.sabdlt.nxv4i32(, ) declare @llvm.aarch64.sve.sabdlt.nxv2i64(, ) declare @llvm.aarch64.sve.saddlb.nxv8i16(, ) declare @llvm.aarch64.sve.saddlb.nxv4i32(, ) declare @llvm.aarch64.sve.saddlb.nxv2i64(, ) declare @llvm.aarch64.sve.saddlt.nxv8i16(, ) declare @llvm.aarch64.sve.saddlt.nxv4i32(, ) declare @llvm.aarch64.sve.saddlt.nxv2i64(, ) declare @llvm.aarch64.sve.saddwb.nxv8i16(, ) declare @llvm.aarch64.sve.saddwb.nxv4i32(, ) declare @llvm.aarch64.sve.saddwb.nxv2i64(, ) declare @llvm.aarch64.sve.saddwt.nxv8i16(, ) declare @llvm.aarch64.sve.saddwt.nxv4i32(, ) declare @llvm.aarch64.sve.saddwt.nxv2i64(, ) declare @llvm.aarch64.sve.smullb.nxv8i16(, ) declare @llvm.aarch64.sve.smullb.nxv4i32(, ) declare @llvm.aarch64.sve.smullb.nxv2i64(, ) declare @llvm.aarch64.sve.smullb.lane.nxv4i32(, , i32) declare @llvm.aarch64.sve.smullb.lane.nxv2i64(, , i32) declare @llvm.aarch64.sve.smullt.nxv8i16(, ) declare @llvm.aarch64.sve.smullt.nxv4i32(, ) declare @llvm.aarch64.sve.smullt.nxv2i64(, ) declare @llvm.aarch64.sve.smullt.lane.nxv4i32(, , i32) declare @llvm.aarch64.sve.smullt.lane.nxv2i64(, , i32) declare @llvm.aarch64.sve.sqdmullb.nxv8i16(, ) declare @llvm.aarch64.sve.sqdmullb.nxv4i32(, ) declare @llvm.aarch64.sve.sqdmullb.nxv2i64(, ) declare @llvm.aarch64.sve.sqdmullb.lane.nxv4i32(, , i32) declare @llvm.aarch64.sve.sqdmullb.lane.nxv2i64(, , i32) declare @llvm.aarch64.sve.sqdmullt.nxv8i16(, ) declare @llvm.aarch64.sve.sqdmullt.nxv4i32(, ) declare @llvm.aarch64.sve.sqdmullt.nxv2i64(, ) declare @llvm.aarch64.sve.sqdmullt.lane.nxv4i32(, , i32) declare @llvm.aarch64.sve.sqdmullt.lane.nxv2i64(, , i32) declare @llvm.aarch64.sve.sshllb.nxv8i16(, i32) declare @llvm.aarch64.sve.sshllb.nxv4i32(, i32) declare @llvm.aarch64.sve.sshllb.nxv2i64(, i32) declare @llvm.aarch64.sve.sshllt.nxv8i16(, i32) declare @llvm.aarch64.sve.sshllt.nxv4i32(, i32) declare @llvm.aarch64.sve.sshllt.nxv2i64(, i32) declare @llvm.aarch64.sve.ssublb.nxv8i16(, ) declare @llvm.aarch64.sve.ssublb.nxv4i32(, ) declare @llvm.aarch64.sve.ssublb.nxv2i64(, ) declare @llvm.aarch64.sve.ssublt.nxv8i16(, ) declare @llvm.aarch64.sve.ssublt.nxv4i32(, ) declare @llvm.aarch64.sve.ssublt.nxv2i64(, ) declare @llvm.aarch64.sve.ssubwb.nxv8i16(, ) declare @llvm.aarch64.sve.ssubwb.nxv4i32(, ) declare @llvm.aarch64.sve.ssubwb.nxv2i64(, ) declare @llvm.aarch64.sve.ssubwt.nxv8i16(, ) declare @llvm.aarch64.sve.ssubwt.nxv4i32(, ) declare @llvm.aarch64.sve.ssubwt.nxv2i64(, ) declare @llvm.aarch64.sve.uabalb.nxv8i16(, , ) declare @llvm.aarch64.sve.uabalb.nxv4i32(, , ) declare @llvm.aarch64.sve.uabalb.nxv2i64(, , ) declare @llvm.aarch64.sve.uabalt.nxv8i16(, , ) declare @llvm.aarch64.sve.uabalt.nxv4i32(, , ) declare @llvm.aarch64.sve.uabalt.nxv2i64(, , ) declare @llvm.aarch64.sve.uabdlb.nxv8i16(, ) declare @llvm.aarch64.sve.uabdlb.nxv4i32(, ) declare @llvm.aarch64.sve.uabdlb.nxv2i64(, ) declare @llvm.aarch64.sve.uabdlt.nxv8i16(, ) declare @llvm.aarch64.sve.uabdlt.nxv4i32(, ) declare @llvm.aarch64.sve.uabdlt.nxv2i64(, ) declare @llvm.aarch64.sve.uaddlb.nxv8i16(, ) declare @llvm.aarch64.sve.uaddlb.nxv4i32(, ) declare @llvm.aarch64.sve.uaddlb.nxv2i64(, ) declare @llvm.aarch64.sve.uaddlt.nxv8i16(, ) declare @llvm.aarch64.sve.uaddlt.nxv4i32(, ) declare @llvm.aarch64.sve.uaddlt.nxv2i64(, ) declare @llvm.aarch64.sve.uaddwb.nxv8i16(, ) declare @llvm.aarch64.sve.uaddwb.nxv4i32(, ) declare @llvm.aarch64.sve.uaddwb.nxv2i64(, ) declare @llvm.aarch64.sve.uaddwt.nxv8i16(, ) declare @llvm.aarch64.sve.uaddwt.nxv4i32(, ) declare @llvm.aarch64.sve.uaddwt.nxv2i64(, ) declare @llvm.aarch64.sve.umullb.nxv8i16(, ) declare @llvm.aarch64.sve.umullb.nxv4i32(, ) declare @llvm.aarch64.sve.umullb.nxv2i64(, ) declare @llvm.aarch64.sve.umullb.lane.nxv4i32(, , i32) declare @llvm.aarch64.sve.umullb.lane.nxv2i64(, , i32) declare @llvm.aarch64.sve.umullt.nxv8i16(, ) declare @llvm.aarch64.sve.umullt.nxv4i32(, ) declare @llvm.aarch64.sve.umullt.nxv2i64(, ) declare @llvm.aarch64.sve.umullt.lane.nxv4i32(, , i32) declare @llvm.aarch64.sve.umullt.lane.nxv2i64(, , i32) declare @llvm.aarch64.sve.ushllb.nxv8i16(, i32) declare @llvm.aarch64.sve.ushllb.nxv4i32(, i32) declare @llvm.aarch64.sve.ushllb.nxv2i64(, i32) declare @llvm.aarch64.sve.ushllt.nxv8i16(, i32) declare @llvm.aarch64.sve.ushllt.nxv4i32(, i32) declare @llvm.aarch64.sve.ushllt.nxv2i64(, i32) declare @llvm.aarch64.sve.usublb.nxv8i16(, ) declare @llvm.aarch64.sve.usublb.nxv4i32(, ) declare @llvm.aarch64.sve.usublb.nxv2i64(, ) declare @llvm.aarch64.sve.usublt.nxv8i16(, ) declare @llvm.aarch64.sve.usublt.nxv4i32(, ) declare @llvm.aarch64.sve.usublt.nxv2i64(, ) declare @llvm.aarch64.sve.usubwb.nxv8i16(, ) declare @llvm.aarch64.sve.usubwb.nxv4i32(, ) declare @llvm.aarch64.sve.usubwb.nxv2i64(, ) declare @llvm.aarch64.sve.usubwt.nxv8i16(, ) declare @llvm.aarch64.sve.usubwt.nxv4i32(, ) declare @llvm.aarch64.sve.usubwt.nxv2i64(, )