; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 ; RUN: llc < %s -mtriple aarch64 -mattr=+sve -aarch64-enable-gisel-sve=1 | FileCheck %s ; RUN: llc < %s -mtriple aarch64 -mattr=+sve -global-isel -aarch64-enable-gisel-sve=1 | FileCheck %s ;; add define @addnxv2i64( %a, %b) { ; CHECK-LABEL: addnxv2i64: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: add z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = add %a, %b ret %c } define @addnxv4i32( %a, %b) { ; CHECK-LABEL: addnxv4i32: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: add z0.s, z0.s, z1.s ; CHECK-NEXT: ret entry: %c = add %a, %b ret %c } define @addnxv8i16( %a, %b, ptr %p) { ; CHECK-LABEL: addnxv8i16: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: add z0.h, z0.h, z1.h ; CHECK-NEXT: ret entry: %c = add %a, %b ret %c } define @addnxv16i8( %a, %b) { ; CHECK-LABEL: addnxv16i8: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: add z0.b, z0.b, z1.b ; CHECK-NEXT: ret entry: %c = add %a, %b ret %c } ;; sub define @subnxv2i64( %a, %b) { ; CHECK-LABEL: subnxv2i64: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: sub z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = sub %a, %b ret %c } define @subnxv4i32( %a, %b) { ; CHECK-LABEL: subnxv4i32: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: sub z0.s, z0.s, z1.s ; CHECK-NEXT: ret entry: %c = sub %a, %b ret %c } define @subnxv8i16( %a, %b, ptr %p) { ; CHECK-LABEL: subnxv8i16: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: sub z0.h, z0.h, z1.h ; CHECK-NEXT: ret entry: %c = sub %a, %b ret %c } define @subnxv16i8( %a, %b) { ; CHECK-LABEL: subnxv16i8: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: sub z0.b, z0.b, z1.b ; CHECK-NEXT: ret entry: %c = sub %a, %b ret %c } ;; and define @andnxv2i64( %a, %b) { ; CHECK-LABEL: andnxv2i64: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: and z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = and %a, %b ret %c } define @andnxv4i32( %a, %b) { ; CHECK-LABEL: andnxv4i32: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: and z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = and %a, %b ret %c } define @andnxv8i16( %a, %b, ptr %p) { ; CHECK-LABEL: andnxv8i16: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: and z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = and %a, %b ret %c } define @andnxv16i8( %a, %b) { ; CHECK-LABEL: andnxv16i8: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: and z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = and %a, %b ret %c } ;; or define @ornxv2i64( %a, %b) { ; CHECK-LABEL: ornxv2i64: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: orr z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = or %a, %b ret %c } define @ornxv4i32( %a, %b) { ; CHECK-LABEL: ornxv4i32: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: orr z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = or %a, %b ret %c } define @ornxv8i16( %a, %b, ptr %p) { ; CHECK-LABEL: ornxv8i16: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: orr z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = or %a, %b ret %c } define @ornxv16i8( %a, %b) { ; CHECK-LABEL: ornxv16i8: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: orr z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = or %a, %b ret %c } ;; xor define @xornxv2i64( %a, %b) { ; CHECK-LABEL: xornxv2i64: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: eor z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = xor %a, %b ret %c } define @xornxv4i32( %a, %b) { ; CHECK-LABEL: xornxv4i32: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: eor z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = xor %a, %b ret %c } define @xornxv8i16( %a, %b, ptr %p) { ; CHECK-LABEL: xornxv8i16: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: eor z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = xor %a, %b ret %c } define @xornxv16i8( %a, %b) { ; CHECK-LABEL: xornxv16i8: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: eor z0.d, z0.d, z1.d ; CHECK-NEXT: ret entry: %c = xor %a, %b ret %c }