472 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// REQUIRES: aarch64-registered-target3// RUN: %clang_cc1 -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s4// RUN: %clang_cc1 -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK5// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s6// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK7// RUN: %clang_cc1 -triple aarch64 -target-feature +sve -S -disable-O0-optnone -Werror -Wall -o /dev/null %s8#include <arm_sve.h>9 10#ifdef SVE_OVERLOADED_FORMS11// A simple used,unused... macro, long enough to represent any SVE builtin.12#define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A313#else14#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A415#endif16 17// CHECK-LABEL: @test_svldnf1_mf8(18// CHECK-NEXT: entry:19// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[BASE:%.*]])20// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]21//22// CPP-CHECK-LABEL: @_Z16test_svldnf1_mf8u10__SVBool_tPKu6__mfp8(23// CPP-CHECK-NEXT: entry:24// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[BASE:%.*]])25// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]26//27svmfloat8_t test_svldnf1_mf8(svbool_t pg, mfloat8_t const *base)28{29 return SVE_ACLE_FUNC(svldnf1,_mf8,,)(pg, base);30}31 32// CHECK-LABEL: @test_svldnf1_s8(33// CHECK-NEXT: entry:34// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[BASE:%.*]])35// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]36//37// CPP-CHECK-LABEL: @_Z15test_svldnf1_s8u10__SVBool_tPKa(38// CPP-CHECK-NEXT: entry:39// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[BASE:%.*]])40// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]41//42svint8_t test_svldnf1_s8(svbool_t pg, const int8_t *base)43{44 return SVE_ACLE_FUNC(svldnf1,_s8,,)(pg, base);45}46 47// CHECK-LABEL: @test_svldnf1_s16(48// CHECK-NEXT: entry:49// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])50// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.ldnf1.nxv8i16(<vscale x 8 x i1> [[TMP0]], ptr [[BASE:%.*]])51// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP1]]52//53// CPP-CHECK-LABEL: @_Z16test_svldnf1_s16u10__SVBool_tPKs(54// CPP-CHECK-NEXT: entry:55// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])56// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.ldnf1.nxv8i16(<vscale x 8 x i1> [[TMP0]], ptr [[BASE:%.*]])57// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP1]]58//59svint16_t test_svldnf1_s16(svbool_t pg, const int16_t *base)60{61 return SVE_ACLE_FUNC(svldnf1,_s16,,)(pg, base);62}63 64// CHECK-LABEL: @test_svldnf1_s32(65// CHECK-NEXT: entry:66// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])67// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ldnf1.nxv4i32(<vscale x 4 x i1> [[TMP0]], ptr [[BASE:%.*]])68// CHECK-NEXT: ret <vscale x 4 x i32> [[TMP1]]69//70// CPP-CHECK-LABEL: @_Z16test_svldnf1_s32u10__SVBool_tPKi(71// CPP-CHECK-NEXT: entry:72// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])73// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ldnf1.nxv4i32(<vscale x 4 x i1> [[TMP0]], ptr [[BASE:%.*]])74// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP1]]75//76svint32_t test_svldnf1_s32(svbool_t pg, const int32_t *base)77{78 return SVE_ACLE_FUNC(svldnf1,_s32,,)(pg, base);79}80 81// CHECK-LABEL: @test_svldnf1_s64(82// CHECK-NEXT: entry:83// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])84// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.ldnf1.nxv2i64(<vscale x 2 x i1> [[TMP0]], ptr [[BASE:%.*]])85// CHECK-NEXT: ret <vscale x 2 x i64> [[TMP1]]86//87// CPP-CHECK-LABEL: @_Z16test_svldnf1_s64u10__SVBool_tPKl(88// CPP-CHECK-NEXT: entry:89// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])90// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.ldnf1.nxv2i64(<vscale x 2 x i1> [[TMP0]], ptr [[BASE:%.*]])91// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP1]]92//93svint64_t test_svldnf1_s64(svbool_t pg, const int64_t *base)94{95 return SVE_ACLE_FUNC(svldnf1,_s64,,)(pg, base);96}97 98// CHECK-LABEL: @test_svldnf1_u8(99// CHECK-NEXT: entry:100// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[BASE:%.*]])101// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]102//103// CPP-CHECK-LABEL: @_Z15test_svldnf1_u8u10__SVBool_tPKh(104// CPP-CHECK-NEXT: entry:105// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[BASE:%.*]])106// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]107//108svuint8_t test_svldnf1_u8(svbool_t pg, const uint8_t *base)109{110 return SVE_ACLE_FUNC(svldnf1,_u8,,)(pg, base);111}112 113// CHECK-LABEL: @test_svldnf1_u16(114// CHECK-NEXT: entry:115// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])116// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.ldnf1.nxv8i16(<vscale x 8 x i1> [[TMP0]], ptr [[BASE:%.*]])117// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP1]]118//119// CPP-CHECK-LABEL: @_Z16test_svldnf1_u16u10__SVBool_tPKt(120// CPP-CHECK-NEXT: entry:121// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])122// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.ldnf1.nxv8i16(<vscale x 8 x i1> [[TMP0]], ptr [[BASE:%.*]])123// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP1]]124//125svuint16_t test_svldnf1_u16(svbool_t pg, const uint16_t *base)126{127 return SVE_ACLE_FUNC(svldnf1,_u16,,)(pg, base);128}129 130// CHECK-LABEL: @test_svldnf1_u32(131// CHECK-NEXT: entry:132// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])133// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ldnf1.nxv4i32(<vscale x 4 x i1> [[TMP0]], ptr [[BASE:%.*]])134// CHECK-NEXT: ret <vscale x 4 x i32> [[TMP1]]135//136// CPP-CHECK-LABEL: @_Z16test_svldnf1_u32u10__SVBool_tPKj(137// CPP-CHECK-NEXT: entry:138// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])139// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ldnf1.nxv4i32(<vscale x 4 x i1> [[TMP0]], ptr [[BASE:%.*]])140// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP1]]141//142svuint32_t test_svldnf1_u32(svbool_t pg, const uint32_t *base)143{144 return SVE_ACLE_FUNC(svldnf1,_u32,,)(pg, base);145}146 147// CHECK-LABEL: @test_svldnf1_u64(148// CHECK-NEXT: entry:149// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])150// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.ldnf1.nxv2i64(<vscale x 2 x i1> [[TMP0]], ptr [[BASE:%.*]])151// CHECK-NEXT: ret <vscale x 2 x i64> [[TMP1]]152//153// CPP-CHECK-LABEL: @_Z16test_svldnf1_u64u10__SVBool_tPKm(154// CPP-CHECK-NEXT: entry:155// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])156// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.ldnf1.nxv2i64(<vscale x 2 x i1> [[TMP0]], ptr [[BASE:%.*]])157// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP1]]158//159svuint64_t test_svldnf1_u64(svbool_t pg, const uint64_t *base)160{161 return SVE_ACLE_FUNC(svldnf1,_u64,,)(pg, base);162}163 164// CHECK-LABEL: @test_svldnf1_f16(165// CHECK-NEXT: entry:166// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])167// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.ldnf1.nxv8f16(<vscale x 8 x i1> [[TMP0]], ptr [[BASE:%.*]])168// CHECK-NEXT: ret <vscale x 8 x half> [[TMP1]]169//170// CPP-CHECK-LABEL: @_Z16test_svldnf1_f16u10__SVBool_tPKDh(171// CPP-CHECK-NEXT: entry:172// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])173// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.ldnf1.nxv8f16(<vscale x 8 x i1> [[TMP0]], ptr [[BASE:%.*]])174// CPP-CHECK-NEXT: ret <vscale x 8 x half> [[TMP1]]175//176svfloat16_t test_svldnf1_f16(svbool_t pg, const float16_t *base)177{178 return SVE_ACLE_FUNC(svldnf1,_f16,,)(pg, base);179}180 181// CHECK-LABEL: @test_svldnf1_f32(182// CHECK-NEXT: entry:183// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])184// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.ldnf1.nxv4f32(<vscale x 4 x i1> [[TMP0]], ptr [[BASE:%.*]])185// CHECK-NEXT: ret <vscale x 4 x float> [[TMP1]]186//187// CPP-CHECK-LABEL: @_Z16test_svldnf1_f32u10__SVBool_tPKf(188// CPP-CHECK-NEXT: entry:189// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])190// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.ldnf1.nxv4f32(<vscale x 4 x i1> [[TMP0]], ptr [[BASE:%.*]])191// CPP-CHECK-NEXT: ret <vscale x 4 x float> [[TMP1]]192//193svfloat32_t test_svldnf1_f32(svbool_t pg, const float32_t *base)194{195 return SVE_ACLE_FUNC(svldnf1,_f32,,)(pg, base);196}197 198// CHECK-LABEL: @test_svldnf1_f64(199// CHECK-NEXT: entry:200// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])201// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.ldnf1.nxv2f64(<vscale x 2 x i1> [[TMP0]], ptr [[BASE:%.*]])202// CHECK-NEXT: ret <vscale x 2 x double> [[TMP1]]203//204// CPP-CHECK-LABEL: @_Z16test_svldnf1_f64u10__SVBool_tPKd(205// CPP-CHECK-NEXT: entry:206// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])207// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.ldnf1.nxv2f64(<vscale x 2 x i1> [[TMP0]], ptr [[BASE:%.*]])208// CPP-CHECK-NEXT: ret <vscale x 2 x double> [[TMP1]]209//210svfloat64_t test_svldnf1_f64(svbool_t pg, const float64_t *base)211{212 return SVE_ACLE_FUNC(svldnf1,_f64,,)(pg, base);213}214 215// CHECK-LABEL: @test_svldnf1_vnum_mf8(216// CHECK-NEXT: entry:217// CHECK-NEXT: [[TMP0:%.*]] = getelementptr <vscale x 16 x i8>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]218// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[TMP0]])219// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP1]]220//221// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_mf8u10__SVBool_tPKu6__mfp8l(222// CPP-CHECK-NEXT: entry:223// CPP-CHECK-NEXT: [[TMP0:%.*]] = getelementptr <vscale x 16 x i8>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]224// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[TMP0]])225// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP1]]226//227svmfloat8_t test_svldnf1_vnum_mf8(svbool_t pg, mfloat8_t const *base, int64_t vnum)228{229 return SVE_ACLE_FUNC(svldnf1_vnum,_mf8,,)(pg, base, vnum);230}231 232// CHECK-LABEL: @test_svldnf1_vnum_s8(233// CHECK-NEXT: entry:234// CHECK-NEXT: [[TMP0:%.*]] = getelementptr <vscale x 16 x i8>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]235// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[TMP0]])236// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP1]]237//238// CPP-CHECK-LABEL: @_Z20test_svldnf1_vnum_s8u10__SVBool_tPKal(239// CPP-CHECK-NEXT: entry:240// CPP-CHECK-NEXT: [[TMP0:%.*]] = getelementptr <vscale x 16 x i8>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]241// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[TMP0]])242// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP1]]243//244svint8_t test_svldnf1_vnum_s8(svbool_t pg, const int8_t *base, int64_t vnum)245{246 return SVE_ACLE_FUNC(svldnf1_vnum,_s8,,)(pg, base, vnum);247}248 249// CHECK-LABEL: @test_svldnf1_vnum_s16(250// CHECK-NEXT: entry:251// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])252// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 8 x i16>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]253// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.ldnf1.nxv8i16(<vscale x 8 x i1> [[TMP0]], ptr [[TMP1]])254// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP2]]255//256// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_s16u10__SVBool_tPKsl(257// CPP-CHECK-NEXT: entry:258// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])259// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 8 x i16>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]260// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.ldnf1.nxv8i16(<vscale x 8 x i1> [[TMP0]], ptr [[TMP1]])261// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP2]]262//263svint16_t test_svldnf1_vnum_s16(svbool_t pg, const int16_t *base, int64_t vnum)264{265 return SVE_ACLE_FUNC(svldnf1_vnum,_s16,,)(pg, base, vnum);266}267 268// CHECK-LABEL: @test_svldnf1_vnum_s32(269// CHECK-NEXT: entry:270// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])271// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 4 x i32>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]272// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ldnf1.nxv4i32(<vscale x 4 x i1> [[TMP0]], ptr [[TMP1]])273// CHECK-NEXT: ret <vscale x 4 x i32> [[TMP2]]274//275// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_s32u10__SVBool_tPKil(276// CPP-CHECK-NEXT: entry:277// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])278// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 4 x i32>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]279// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ldnf1.nxv4i32(<vscale x 4 x i1> [[TMP0]], ptr [[TMP1]])280// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP2]]281//282svint32_t test_svldnf1_vnum_s32(svbool_t pg, const int32_t *base, int64_t vnum)283{284 return SVE_ACLE_FUNC(svldnf1_vnum,_s32,,)(pg, base, vnum);285}286 287// CHECK-LABEL: @test_svldnf1_vnum_s64(288// CHECK-NEXT: entry:289// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])290// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 2 x i64>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]291// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.ldnf1.nxv2i64(<vscale x 2 x i1> [[TMP0]], ptr [[TMP1]])292// CHECK-NEXT: ret <vscale x 2 x i64> [[TMP2]]293//294// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_s64u10__SVBool_tPKll(295// CPP-CHECK-NEXT: entry:296// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])297// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 2 x i64>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]298// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.ldnf1.nxv2i64(<vscale x 2 x i1> [[TMP0]], ptr [[TMP1]])299// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP2]]300//301svint64_t test_svldnf1_vnum_s64(svbool_t pg, const int64_t *base, int64_t vnum)302{303 return SVE_ACLE_FUNC(svldnf1_vnum,_s64,,)(pg, base, vnum);304}305 306// CHECK-LABEL: @test_svldnf1_vnum_u8(307// CHECK-NEXT: entry:308// CHECK-NEXT: [[TMP0:%.*]] = getelementptr <vscale x 16 x i8>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]309// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[TMP0]])310// CHECK-NEXT: ret <vscale x 16 x i8> [[TMP1]]311//312// CPP-CHECK-LABEL: @_Z20test_svldnf1_vnum_u8u10__SVBool_tPKhl(313// CPP-CHECK-NEXT: entry:314// CPP-CHECK-NEXT: [[TMP0:%.*]] = getelementptr <vscale x 16 x i8>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]315// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.ldnf1.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], ptr [[TMP0]])316// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP1]]317//318svuint8_t test_svldnf1_vnum_u8(svbool_t pg, const uint8_t *base, int64_t vnum)319{320 return SVE_ACLE_FUNC(svldnf1_vnum,_u8,,)(pg, base, vnum);321}322 323// CHECK-LABEL: @test_svldnf1_vnum_u16(324// CHECK-NEXT: entry:325// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])326// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 8 x i16>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]327// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.ldnf1.nxv8i16(<vscale x 8 x i1> [[TMP0]], ptr [[TMP1]])328// CHECK-NEXT: ret <vscale x 8 x i16> [[TMP2]]329//330// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_u16u10__SVBool_tPKtl(331// CPP-CHECK-NEXT: entry:332// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])333// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 8 x i16>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]334// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.ldnf1.nxv8i16(<vscale x 8 x i1> [[TMP0]], ptr [[TMP1]])335// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP2]]336//337svuint16_t test_svldnf1_vnum_u16(svbool_t pg, const uint16_t *base, int64_t vnum)338{339 return SVE_ACLE_FUNC(svldnf1_vnum,_u16,,)(pg, base, vnum);340}341 342// CHECK-LABEL: @test_svldnf1_vnum_u32(343// CHECK-NEXT: entry:344// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])345// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 4 x i32>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]346// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ldnf1.nxv4i32(<vscale x 4 x i1> [[TMP0]], ptr [[TMP1]])347// CHECK-NEXT: ret <vscale x 4 x i32> [[TMP2]]348//349// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_u32u10__SVBool_tPKjl(350// CPP-CHECK-NEXT: entry:351// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])352// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 4 x i32>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]353// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ldnf1.nxv4i32(<vscale x 4 x i1> [[TMP0]], ptr [[TMP1]])354// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP2]]355//356svuint32_t test_svldnf1_vnum_u32(svbool_t pg, const uint32_t *base, int64_t vnum)357{358 return SVE_ACLE_FUNC(svldnf1_vnum,_u32,,)(pg, base, vnum);359}360 361// CHECK-LABEL: @test_svldnf1_vnum_u64(362// CHECK-NEXT: entry:363// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])364// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 2 x i64>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]365// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.ldnf1.nxv2i64(<vscale x 2 x i1> [[TMP0]], ptr [[TMP1]])366// CHECK-NEXT: ret <vscale x 2 x i64> [[TMP2]]367//368// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_u64u10__SVBool_tPKml(369// CPP-CHECK-NEXT: entry:370// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])371// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 2 x i64>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]372// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.ldnf1.nxv2i64(<vscale x 2 x i1> [[TMP0]], ptr [[TMP1]])373// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP2]]374//375svuint64_t test_svldnf1_vnum_u64(svbool_t pg, const uint64_t *base, int64_t vnum)376{377 return SVE_ACLE_FUNC(svldnf1_vnum,_u64,,)(pg, base, vnum);378}379 380// CHECK-LABEL: @test_svldnf1_vnum_f16(381// CHECK-NEXT: entry:382// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])383// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 8 x half>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]384// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.ldnf1.nxv8f16(<vscale x 8 x i1> [[TMP0]], ptr [[TMP1]])385// CHECK-NEXT: ret <vscale x 8 x half> [[TMP2]]386//387// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_f16u10__SVBool_tPKDhl(388// CPP-CHECK-NEXT: entry:389// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])390// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 8 x half>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]391// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.ldnf1.nxv8f16(<vscale x 8 x i1> [[TMP0]], ptr [[TMP1]])392// CPP-CHECK-NEXT: ret <vscale x 8 x half> [[TMP2]]393//394svfloat16_t test_svldnf1_vnum_f16(svbool_t pg, const float16_t *base, int64_t vnum)395{396 return SVE_ACLE_FUNC(svldnf1_vnum,_f16,,)(pg, base, vnum);397}398 399// CHECK-LABEL: @test_svldnf1_vnum_f32(400// CHECK-NEXT: entry:401// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])402// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 4 x float>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]403// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.ldnf1.nxv4f32(<vscale x 4 x i1> [[TMP0]], ptr [[TMP1]])404// CHECK-NEXT: ret <vscale x 4 x float> [[TMP2]]405//406// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_f32u10__SVBool_tPKfl(407// CPP-CHECK-NEXT: entry:408// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])409// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 4 x float>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]410// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.ldnf1.nxv4f32(<vscale x 4 x i1> [[TMP0]], ptr [[TMP1]])411// CPP-CHECK-NEXT: ret <vscale x 4 x float> [[TMP2]]412//413svfloat32_t test_svldnf1_vnum_f32(svbool_t pg, const float32_t *base, int64_t vnum)414{415 return SVE_ACLE_FUNC(svldnf1_vnum,_f32,,)(pg, base, vnum);416}417 418// CHECK-LABEL: @test_svldnf1_vnum_f64(419// CHECK-NEXT: entry:420// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])421// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 2 x double>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]422// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.ldnf1.nxv2f64(<vscale x 2 x i1> [[TMP0]], ptr [[TMP1]])423// CHECK-NEXT: ret <vscale x 2 x double> [[TMP2]]424//425// CPP-CHECK-LABEL: @_Z21test_svldnf1_vnum_f64u10__SVBool_tPKdl(426// CPP-CHECK-NEXT: entry:427// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])428// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 2 x double>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]429// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.ldnf1.nxv2f64(<vscale x 2 x i1> [[TMP0]], ptr [[TMP1]])430// CPP-CHECK-NEXT: ret <vscale x 2 x double> [[TMP2]]431//432svfloat64_t test_svldnf1_vnum_f64(svbool_t pg, const float64_t *base, int64_t vnum)433{434 return SVE_ACLE_FUNC(svldnf1_vnum,_f64,,)(pg, base, vnum);435}436 437// CHECK-LABEL: @test_svldnf1_bf16(438// CHECK-NEXT: entry:439// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])440// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.ldnf1.nxv8bf16(<vscale x 8 x i1> [[TMP0]], ptr [[BASE:%.*]])441// CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP1]]442//443// CPP-CHECK-LABEL: @_Z17test_svldnf1_bf16u10__SVBool_tPKu6__bf16(444// CPP-CHECK-NEXT: entry:445// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])446// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.ldnf1.nxv8bf16(<vscale x 8 x i1> [[TMP0]], ptr [[BASE:%.*]])447// CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP1]]448//449svbfloat16_t test_svldnf1_bf16(svbool_t pg, const bfloat16_t *base)450{451 return SVE_ACLE_FUNC(svldnf1,_bf16,,)(pg, base);452}453 454// CHECK-LABEL: @test_svldnf1_vnum_bf16(455// CHECK-NEXT: entry:456// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])457// CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 8 x bfloat>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]458// CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.ldnf1.nxv8bf16(<vscale x 8 x i1> [[TMP0]], ptr [[TMP1]])459// CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP2]]460//461// CPP-CHECK-LABEL: @_Z22test_svldnf1_vnum_bf16u10__SVBool_tPKu6__bf16l(462// CPP-CHECK-NEXT: entry:463// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])464// CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr <vscale x 8 x bfloat>, ptr [[BASE:%.*]], i64 [[VNUM:%.*]]465// CPP-CHECK-NEXT: [[TMP2:%.*]] = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.ldnf1.nxv8bf16(<vscale x 8 x i1> [[TMP0]], ptr [[TMP1]])466// CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP2]]467//468svbfloat16_t test_svldnf1_vnum_bf16(svbool_t pg, const bfloat16_t *base, int64_t vnum)469{470 return SVE_ACLE_FUNC(svldnf1_vnum,_bf16,,)(pg, base, vnum);471}472