; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2 < %s | FileCheck %s ; lookup table expand one register define {, } @luti2_i8( %x) { ; CHECK-LABEL: luti2_i8: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 { z0.b, z1.b }, zt0, z0[7] ; CHECK-NEXT: ret %res = call {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv16i8(i32 0, %x, i32 7) ret {, } %res } define {, } @luti2_i16( %x) { ; CHECK-LABEL: luti2_i16: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 { z0.h, z1.h }, zt0, z0[7] ; CHECK-NEXT: ret %res = call {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv8i16(i32 0, %x, i32 7) ret {, } %res } define {, } @luti2_i32( %x) { ; CHECK-LABEL: luti2_i32: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 { z0.s, z1.s }, zt0, z0[7] ; CHECK-NEXT: ret %res = call {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv4i32(i32 0, %x, i32 7) ret {, } %res } define {, } @luti2_f16( %x) { ; CHECK-LABEL: luti2_f16: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 { z0.h, z1.h }, zt0, z0[7] ; CHECK-NEXT: ret %res = call {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv8f16(i32 0, %x, i32 7) ret {, } %res } define {, } @luti2_bf16( %x) { ; CHECK-LABEL: luti2_bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 { z0.h, z1.h }, zt0, z0[7] ; CHECK-NEXT: ret %res = call {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv8bf16(i32 0, %x, i32 7) ret {, } %res } define {, } @luti2_f32( %x) { ; CHECK-LABEL: luti2_f32: ; CHECK: // %bb.0: ; CHECK-NEXT: luti2 { z0.s, z1.s }, zt0, z0[7] ; CHECK-NEXT: ret %res = call {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv4f32(i32 0, %x, i32 7) ret {, } %res } declare {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv16i8(i32, , i32) declare {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv8i16(i32, , i32) declare {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv4i32(i32, , i32) declare {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv8f16(i32, , i32) declare {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv8bf16(i32, , i32) declare {, } @llvm.aarch64.sme.luti2.lane.zt.x2.nxv4f32(i32, , i32)