322 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// REQUIRES: aarch64-registered-target3// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64-none-linux-gnu \4// RUN: -target-feature +sme -target-feature +sme2 -target-feature +lut -O1 -Werror -emit-llvm -o - %s | FileCheck %s5// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu \6// RUN: -target-feature +sve -target-feature +sve2 -target-feature +lut -O1 -Werror -emit-llvm -o - %s | FileCheck %s7// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64-none-linux-gnu \8// RUN: -target-feature +sve -target-feature +sve2 -target-feature +lut -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK9// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu \10// RUN: -target-feature +sve -target-feature +sve2 -target-feature +lut -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK11// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +lut -O1 -Werror -Wall -o /dev/null %s12#include <arm_sve.h>13 14#if defined __ARM_FEATURE_SME15#define MODE_ATTR __arm_streaming16#else17#define MODE_ATTR18#endif19 20#ifdef SVE_OVERLOADED_FORMS21// A simple used,unused... macro, long enough to represent any SVE builtin.22#define SVE_ACLE_FUNC(A1,A2_UNUSED) A123#else24#define SVE_ACLE_FUNC(A1,A2) A1##A225#endif26 27// SME-CHECK-LABEL: @test_svluti2_lane_s8(28// SME-CHECK-NEXT: entry:29// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti2.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)30// SME-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]31// CHECK-LABEL: @test_svluti2_lane_s8(32// CHECK-NEXT: entry:33// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti2.lane.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)34// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]35//36// CPP-CHECK-LABEL: @_Z20test_svluti2_lane_s8u10__SVInt8_tu11__SVUint8_t(37// CPP-CHECK-NEXT: entry:38// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti2.lane.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)39// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]40//41svint8_t test_svluti2_lane_s8(svint8_t table, svuint8_t indices) MODE_ATTR{42 return SVE_ACLE_FUNC(svluti2_lane,_s8)(table, indices, 0);43}44 45// SME-CHECK-LABEL: @test_svluti2_lane_u8(46// SME-CHECK-NEXT: entry:47// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti2.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 3)48// SME-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]49// CHECK-LABEL: @test_svluti2_lane_u8(50// CHECK-NEXT: entry:51// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti2.lane.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 3)52// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]53//54// CPP-CHECK-LABEL: @_Z20test_svluti2_lane_u8u11__SVUint8_tS_(55// CPP-CHECK-NEXT: entry:56// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti2.lane.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 3)57// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]58//59svuint8_t test_svluti2_lane_u8(svuint8_t table, svuint8_t indices) MODE_ATTR{60 return SVE_ACLE_FUNC(svluti2_lane,_u8)(table, indices, 3);61}62 63// SME-CHECK-LABEL: @test_svluti2_lane_s16(64// SME-CHECK-NEXT: entry:65// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti2.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)66// SME-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]67// CHECK-LABEL: @test_svluti2_lane_s16(68// CHECK-NEXT: entry:69// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti2.lane.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)70// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]71//72// CPP-CHECK-LABEL: @_Z21test_svluti2_lane_s16u11__SVInt16_tu11__SVUint8_t(73// CPP-CHECK-NEXT: entry:74// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti2.lane.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)75// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]76//77svint16_t test_svluti2_lane_s16(svint16_t table, svuint8_t indices) MODE_ATTR{78 return SVE_ACLE_FUNC(svluti2_lane,_s16)(table, indices, 0);79}80 81// SME-CHECK-LABEL: @test_svluti2_lane_u16(82// SME-CHECK-NEXT: entry:83// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti2.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 7)84// SME-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]85// CHECK-LABEL: @test_svluti2_lane_u16(86// CHECK-NEXT: entry:87// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti2.lane.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 7)88// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]89//90// CPP-CHECK-LABEL: @_Z21test_svluti2_lane_u16u12__SVUint16_tu11__SVUint8_t(91// CPP-CHECK-NEXT: entry:92// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti2.lane.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 7)93// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]94//95svuint16_t test_svluti2_lane_u16(svuint16_t table, svuint8_t indices) MODE_ATTR{96 return SVE_ACLE_FUNC(svluti2_lane,_u16)(table, indices, 7);97}98 99// SME-CHECK-LABEL: @test_svluti2_lane_f16(100// SME-CHECK-NEXT: entry:101// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.luti2.nxv8f16(<vscale x 8 x half> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 5)102// SME-CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]103// CHECK-LABEL: @test_svluti2_lane_f16(104// CHECK-NEXT: entry:105// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.luti2.lane.nxv8f16(<vscale x 8 x half> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 5)106// CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]107//108// CPP-CHECK-LABEL: @_Z21test_svluti2_lane_f16u13__SVFloat16_tu11__SVUint8_t(109// CPP-CHECK-NEXT: entry:110// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.luti2.lane.nxv8f16(<vscale x 8 x half> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 5)111// CPP-CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]112//113svfloat16_t test_svluti2_lane_f16(svfloat16_t table, svuint8_t indices) MODE_ATTR{114 return SVE_ACLE_FUNC(svluti2_lane,_f16)(table, indices, 5);115}116 117// SME-CHECK-LABEL: @test_svluti2_lane_bf16(118// SME-CHECK-NEXT: entry:119// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.luti2.nxv8bf16(<vscale x 8 x bfloat> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 2)120// SME-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]121// CHECK-LABEL: @test_svluti2_lane_bf16(122// CHECK-NEXT: entry:123// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.luti2.lane.nxv8bf16(<vscale x 8 x bfloat> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 2)124// CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]125//126// CPP-CHECK-LABEL: @_Z22test_svluti2_lane_bf16u14__SVBfloat16_tu11__SVUint8_t(127// CPP-CHECK-NEXT: entry:128// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.luti2.lane.nxv8bf16(<vscale x 8 x bfloat> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 2)129// CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]130//131svbfloat16_t test_svluti2_lane_bf16(svbfloat16_t table, svuint8_t indices) MODE_ATTR{132 return SVE_ACLE_FUNC(svluti2_lane,_bf16)(table, indices, 2);133}134 135// SME-CHECK-LABEL: @test_svluti4_lane_s8(136// SME-CHECK-NEXT: entry:137// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti4.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)138// SME-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]139// CHECK-LABEL: @test_svluti4_lane_s8(140// CHECK-NEXT: entry:141// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti4.lane.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)142// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]143//144// CPP-CHECK-LABEL: @_Z20test_svluti4_lane_s8u10__SVInt8_tu11__SVUint8_t(145// CPP-CHECK-NEXT: entry:146// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti4.lane.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)147// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]148//149svint8_t test_svluti4_lane_s8(svint8_t table, svuint8_t indices) MODE_ATTR{150 return SVE_ACLE_FUNC(svluti4_lane,_s8)(table, indices, 0);151}152 153// SME-CHECK-LABEL: @test_svluti4_lane_u8(154// SME-CHECK-NEXT: entry:155// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti4.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 1)156// SME-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]157// CHECK-LABEL: @test_svluti4_lane_u8(158// CHECK-NEXT: entry:159// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti4.lane.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 1)160// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]161//162// CPP-CHECK-LABEL: @_Z20test_svluti4_lane_u8u11__SVUint8_tS_(163// CPP-CHECK-NEXT: entry:164// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.luti4.lane.nxv16i8(<vscale x 16 x i8> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 1)165// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]166//167svuint8_t test_svluti4_lane_u8(svuint8_t table, svuint8_t indices) MODE_ATTR{168 return SVE_ACLE_FUNC(svluti4_lane,_u8)(table, indices, 1);169}170 171// SME-CHECK-LABEL: @test_svluti4_lane_s16(172// SME-CHECK-NEXT: entry:173// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)174// SME-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]175// CHECK-LABEL: @test_svluti4_lane_s16(176// CHECK-NEXT: entry:177// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.lane.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)178// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]179//180// CPP-CHECK-LABEL: @_Z21test_svluti4_lane_s16u11__SVInt16_tu11__SVUint8_t(181// CPP-CHECK-NEXT: entry:182// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.lane.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)183// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]184//185svint16_t test_svluti4_lane_s16(svint16_t table, svuint8_t indices) MODE_ATTR{186 return SVE_ACLE_FUNC(svluti4_lane,_s16)(table, indices, 0);187}188 189// SME-CHECK-LABEL: @test_svluti4_lane_u16(190// SME-CHECK-NEXT: entry:191// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 7)192// SME-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]193// CHECK-LABEL: @test_svluti4_lane_u16(194// CHECK-NEXT: entry:195// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.lane.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 3)196// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]197//198// CPP-CHECK-LABEL: @_Z21test_svluti4_lane_u16u12__SVUint16_tu11__SVUint8_t(199// CPP-CHECK-NEXT: entry:200// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.lane.nxv8i16(<vscale x 8 x i16> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 3)201// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]202//203svuint16_t test_svluti4_lane_u16(svuint16_t table, svuint8_t indices) MODE_ATTR{204 return SVE_ACLE_FUNC(svluti4_lane,_u16)(table, indices, 3);205}206 207// SME-CHECK-LABEL: @test_svluti4_lane_f16(208// SME-CHECK-NEXT: entry:209// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.luti4.nxv8f16(<vscale x 8 x half> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 5)210// SME-CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]211// CHECK-LABEL: @test_svluti4_lane_f16(212// CHECK-NEXT: entry:213// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.luti4.lane.nxv8f16(<vscale x 8 x half> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 2)214// CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]215//216// CPP-CHECK-LABEL: @_Z21test_svluti4_lane_f16u13__SVFloat16_tu11__SVUint8_t(217// CPP-CHECK-NEXT: entry:218// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.luti4.lane.nxv8f16(<vscale x 8 x half> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 2)219// CPP-CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]220//221svfloat16_t test_svluti4_lane_f16(svfloat16_t table, svuint8_t indices) MODE_ATTR{222 return SVE_ACLE_FUNC(svluti4_lane,_f16)(table, indices, 2);223}224 225// SME-CHECK-LABEL: @test_svluti4_lane_bf16(226// SME-CHECK-NEXT: entry:227// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.luti4.nxv8bf16(<vscale x 8 x bfloat> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 2)228// SME-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]229// CHECK-LABEL: @test_svluti4_lane_bf16(230// CHECK-NEXT: entry:231// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.luti4.lane.nxv8bf16(<vscale x 8 x bfloat> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 1)232// CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]233//234// CPP-CHECK-LABEL: @_Z22test_svluti4_lane_bf16u14__SVBfloat16_tu11__SVUint8_t(235// CPP-CHECK-NEXT: entry:236// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.luti4.lane.nxv8bf16(<vscale x 8 x bfloat> [[TABLE:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 1)237// CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]238//239svbfloat16_t test_svluti4_lane_bf16(svbfloat16_t table, svuint8_t indices) MODE_ATTR{240 return SVE_ACLE_FUNC(svluti4_lane,_bf16)(table, indices, 1);241}242 243// SME-CHECK-LABEL: @test_svluti4_lane_s16_x2(244// SME-CHECK-NEXT: entry:245// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.vector.extract.nxv8i16.nxv16i16(<vscale x 16 x i16> [[TABLE:%.*]], i64 0)246// SME-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.vector.extract.nxv8i16.nxv16i16(<vscale x 16 x i16> [[TABLE]], i64 8)247// SME-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.x2.nxv8i16(<vscale x 8 x i16> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)248// SME-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP2]]249// CHECK-LABEL: @test_svluti4_lane_s16_x2(250// CHECK-NEXT: entry:251// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.lane.x2.nxv8i16(<vscale x 8 x i16> [[TABLE_COERCE0:%.*]], <vscale x 8 x i16> [[TABLE_COERCE1:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)252// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]253//254// CPP-CHECK-LABEL: @_Z24test_svluti4_lane_s16_x211svint16x2_tu11__SVUint8_t(255// CPP-CHECK-NEXT: entry:256// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.lane.x2.nxv8i16(<vscale x 8 x i16> [[TABLE_COERCE0:%.*]], <vscale x 8 x i16> [[TABLE_COERCE1:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 0)257// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]258//259svint16_t test_svluti4_lane_s16_x2(svint16x2_t table, svuint8_t indices) MODE_ATTR{260 return SVE_ACLE_FUNC(svluti4_lane,_s16_x2)(table, indices, 0);261}262 263// SME-CHECK-LABEL: @test_svluti4_lane_u16_x2(264// SME-CHECK-NEXT: entry:265// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.vector.extract.nxv8i16.nxv16i16(<vscale x 16 x i16> [[TABLE:%.*]], i64 0)266// SME-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.vector.extract.nxv8i16.nxv16i16(<vscale x 16 x i16> [[TABLE]], i64 8)267// SME-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.x2.nxv8i16(<vscale x 8 x i16> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 16 x i8> [[INDICES:%.*]], i32 7)268// SME-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP2]]269// CHECK-LABEL: @test_svluti4_lane_u16_x2(270// CHECK-NEXT: entry:271// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.lane.x2.nxv8i16(<vscale x 8 x i16> [[TABLE_COERCE0:%.*]], <vscale x 8 x i16> [[TABLE_COERCE1:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 3)272// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]273//274// CPP-CHECK-LABEL: @_Z24test_svluti4_lane_u16_x212svuint16x2_tu11__SVUint8_t(275// CPP-CHECK-NEXT: entry:276// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.luti4.lane.x2.nxv8i16(<vscale x 8 x i16> [[TABLE_COERCE0:%.*]], <vscale x 8 x i16> [[TABLE_COERCE1:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 3)277// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]278//279svuint16_t test_svluti4_lane_u16_x2(svuint16x2_t table, svuint8_t indices) MODE_ATTR{280 return SVE_ACLE_FUNC(svluti4_lane,_u16_x2)(table, indices, 3);281}282 283// SME-CHECK-LABEL: @test_svluti4_lane_f16_x2(284// SME-CHECK-NEXT: entry:285// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.vector.extract.nxv8f16.nxv16f16(<vscale x 16 x half> [[TABLE:%.*]], i64 0)286// SME-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.vector.extract.nxv8f16.nxv16f16(<vscale x 16 x half> [[TABLE]], i64 8)287// SME-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.luti4.x2.nxv8f16(<vscale x 8 x half> [[TMP0]], <vscale x 8 x half> [[TMP1]], <vscale x 16 x i8> [[INDICES:%.*]], i32 5)288// SME-CHECK-NEXT: ret <vscale x 8 x half> [[TMP2]]289// CHECK-LABEL: @test_svluti4_lane_f16_x2(290// CHECK-NEXT: entry:291// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.luti4.lane.x2.nxv8f16(<vscale x 8 x half> [[TABLE_COERCE0:%.*]], <vscale x 8 x half> [[TABLE_COERCE1:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 2)292// CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]293//294// CPP-CHECK-LABEL: @_Z24test_svluti4_lane_f16_x213svfloat16x2_tu11__SVUint8_t(295// CPP-CHECK-NEXT: entry:296// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.luti4.lane.x2.nxv8f16(<vscale x 8 x half> [[TABLE_COERCE0:%.*]], <vscale x 8 x half> [[TABLE_COERCE1:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 2)297// CPP-CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]298//299svfloat16_t test_svluti4_lane_f16_x2(svfloat16x2_t table, svuint8_t indices) MODE_ATTR{300 return SVE_ACLE_FUNC(svluti4_lane,_f16_x2)(table, indices, 2);301}302 303// SME-CHECK-LABEL: @test_svluti4_lane_bf16_x2(304// SME-CHECK-NEXT: entry:305// SME-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x bfloat> @llvm.vector.extract.nxv8bf16.nxv16bf16(<vscale x 16 x bfloat> [[TABLE:%.*]], i64 0)306// SME-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x bfloat> @llvm.vector.extract.nxv8bf16.nxv16bf16(<vscale x 16 x bfloat> [[TABLE]], i64 8)307// SME-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.luti4.x2.nxv8bf16(<vscale x 8 x bfloat> [[TMP0]], <vscale x 8 x bfloat> [[TMP1]], <vscale x 16 x i8> [[INDICES:%.*]], i32 2)308// SME-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP2]]309// CHECK-LABEL: @test_svluti4_lane_bf16_x2(310// CHECK-NEXT: entry:311// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.luti4.lane.x2.nxv8bf16(<vscale x 8 x bfloat> [[TABLE_COERCE0:%.*]], <vscale x 8 x bfloat> [[TABLE_COERCE1:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 1)312// CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]313//314// CPP-CHECK-LABEL: @_Z25test_svluti4_lane_bf16_x214svbfloat16x2_tu11__SVUint8_t(315// CPP-CHECK-NEXT: entry:316// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.luti4.lane.x2.nxv8bf16(<vscale x 8 x bfloat> [[TABLE_COERCE0:%.*]], <vscale x 8 x bfloat> [[TABLE_COERCE1:%.*]], <vscale x 16 x i8> [[INDICES:%.*]], i32 1)317// CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]318//319svbfloat16_t test_svluti4_lane_bf16_x2(svbfloat16x2_t table, svuint8_t indices) MODE_ATTR{320 return SVE_ACLE_FUNC(svluti4_lane,_bf16_x2)(table, indices, 1);321}322