; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+sve2,+lut -enable-subreg-liveness=true | FileCheck %s ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+sve,+sme2,+lut -enable-subreg-liveness=true | FileCheck %s ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+sme2,+lut --force-streaming -enable-subreg-liveness=true | FileCheck %s define @test_luti2_lane_i8( %table, %indices){ ; CHECK-LABEL: test_luti2_lane_i8: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 z0.b, { z0.b }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti2.lane.nxv16i8( %table, %indices, i32 0) ret %res } define @test_luti2_lane_i16( %table, %indices){ ; CHECK-LABEL: test_luti2_lane_i16: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 z0.h, { z0.h }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti2.lane.nxv8i16( %table, %indices, i32 0) ret %res } define @test_luti2_lane_f16( %table, %indices){ ; CHECK-LABEL: test_luti2_lane_f16: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 z0.h, { z0.h }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti2.lane.nxv8f16( %table, %indices, i32 0) ret %res } define @test_luti2_lane_bf16( %table, %indices){ ; CHECK-LABEL: test_luti2_lane_bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 z0.h, { z0.h }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti2.lane.nxv8bf16( %table, %indices, i32 0) ret %res } define @test_luti4_lane_i8( %table, %indices){ ; CHECK-LABEL: test_luti4_lane_i8: ; CHECK: // %bb.0: ; CHECK-NEXT: luti4 z0.b, { z0.b }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti4.lane.nxv16i8( %table, %indices, i32 0) ret %res } define @test_luti4_lane_i16( %table, %indices){ ; CHECK-LABEL: test_luti4_lane_i16: ; CHECK: // %bb.0: ; CHECK-NEXT: luti4 z0.h, { z0.h }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti4.lane.nxv8i16( %table, %indices, i32 0) ret %res } define @test_luti4_lane_f16( %table, %indices){ ; CHECK-LABEL: test_luti4_lane_f16: ; CHECK: // %bb.0: ; CHECK-NEXT: luti4 z0.h, { z0.h }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti4.lane.nxv8f16( %table, %indices, i32 0) ret %res } define @test_luti4_lane_bf16( %table, %indices){ ; CHECK-LABEL: test_luti4_lane_bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: luti4 z0.h, { z0.h }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti4.lane.nxv8bf16( %table, %indices, i32 0) ret %res } define @test_luti4_lane_i16_x2( %table, %indices){ ; CHECK-LABEL: test_luti4_lane_i16_x2: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z2.d, z0.d ; CHECK-NEXT: mov z3.d, z0.d ; CHECK-NEXT: luti4 z0.h, { z2.h, z3.h }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti4.lane.x2.nxv8i16( %table, %table, %indices, i32 0) ret %res } define @test_luti4_lane_f16_x2( %table, %indices){ ; CHECK-LABEL: test_luti4_lane_f16_x2: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z2.d, z0.d ; CHECK-NEXT: mov z3.d, z0.d ; CHECK-NEXT: luti4 z0.h, { z2.h, z3.h }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti4.lane.x2.nxv8f16( %table, %table, %indices, i32 0) ret %res } define @test_luti4_lane_bf16_x2( %table, %indices){ ; CHECK-LABEL: test_luti4_lane_bf16_x2: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z2.d, z0.d ; CHECK-NEXT: mov z3.d, z0.d ; CHECK-NEXT: luti4 z0.h, { z2.h, z3.h }, z1[0] ; CHECK-NEXT: ret %res= tail call @llvm.aarch64.sve.luti4.lane.x2.nxv8bf16( %table, %table, %indices, i32 0) ret %res }