brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.4 KiB · c290f9c Raw
386 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve -mfloat-abi hard -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck --check-prefix=LE %s3// RUN: %clang_cc1 -triple thumbebv8.1m.main-arm-none-eabi -target-feature +mve -mfloat-abi hard -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck --check-prefix=BE %s4// RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve -mfloat-abi hard -O0 -disable-O0-optnone -DPOLYMORPHIC -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck --check-prefix=LE %s5// RUN: %clang_cc1 -triple thumbebv8.1m.main-arm-none-eabi -target-feature +mve -mfloat-abi hard -O0 -disable-O0-optnone -DPOLYMORPHIC -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck --check-prefix=BE %s6 7// REQUIRES: aarch64-registered-target || arm-registered-target8 9#include <arm_mve.h>10 11// LE-LABEL: @test_vmovnbq_s16(12// LE-NEXT:  entry:13// LE-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>14// LE-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>15// LE-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i16> [[B:%.*]], <8 x i16> [[TMP1]], <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>16// LE-NEXT:    [[TMP3:%.*]] = trunc <16 x i16> [[TMP2]] to <16 x i8>17// LE-NEXT:    ret <16 x i8> [[TMP3]]18//19// BE-LABEL: @test_vmovnbq_s16(20// BE-NEXT:  entry:21// BE-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>22// BE-NEXT:    [[TMP1:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[TMP0]])23// BE-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i16> [[B:%.*]], <8 x i16> [[TMP1]], <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>24// BE-NEXT:    [[TMP3:%.*]] = trunc <16 x i16> [[TMP2]] to <16 x i8>25// BE-NEXT:    ret <16 x i8> [[TMP3]]26//27int8x16_t test_vmovnbq_s16(int8x16_t a, int16x8_t b)28{29#ifdef POLYMORPHIC30    return vmovnbq(a, b);31#else /* POLYMORPHIC */32    return vmovnbq_s16(a, b);33#endif /* POLYMORPHIC */34}35 36// LE-LABEL: @test_vmovnbq_s32(37// LE-NEXT:  entry:38// LE-NEXT:    [[TMP0:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>39// LE-NEXT:    [[TMP1:%.*]] = bitcast <8 x i16> [[TMP0]] to <4 x i32>40// LE-NEXT:    [[TMP2:%.*]] = shufflevector <4 x i32> [[B:%.*]], <4 x i32> [[TMP1]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>41// LE-NEXT:    [[TMP3:%.*]] = trunc <8 x i32> [[TMP2]] to <8 x i16>42// LE-NEXT:    ret <8 x i16> [[TMP3]]43//44// BE-LABEL: @test_vmovnbq_s32(45// BE-NEXT:  entry:46// BE-NEXT:    [[TMP0:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>47// BE-NEXT:    [[TMP1:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[TMP0]])48// BE-NEXT:    [[TMP2:%.*]] = shufflevector <4 x i32> [[B:%.*]], <4 x i32> [[TMP1]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>49// BE-NEXT:    [[TMP3:%.*]] = trunc <8 x i32> [[TMP2]] to <8 x i16>50// BE-NEXT:    ret <8 x i16> [[TMP3]]51//52int16x8_t test_vmovnbq_s32(int16x8_t a, int32x4_t b)53{54#ifdef POLYMORPHIC55    return vmovnbq(a, b);56#else /* POLYMORPHIC */57    return vmovnbq_s32(a, b);58#endif /* POLYMORPHIC */59}60 61// LE-LABEL: @test_vmovnbq_u16(62// LE-NEXT:  entry:63// LE-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>64// LE-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>65// LE-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i16> [[B:%.*]], <8 x i16> [[TMP1]], <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>66// LE-NEXT:    [[TMP3:%.*]] = trunc <16 x i16> [[TMP2]] to <16 x i8>67// LE-NEXT:    ret <16 x i8> [[TMP3]]68//69// BE-LABEL: @test_vmovnbq_u16(70// BE-NEXT:  entry:71// BE-NEXT:    [[TMP0:%.*]] = shufflevector <16 x i8> [[A:%.*]], <16 x i8> poison, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>72// BE-NEXT:    [[TMP1:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[TMP0]])73// BE-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i16> [[B:%.*]], <8 x i16> [[TMP1]], <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>74// BE-NEXT:    [[TMP3:%.*]] = trunc <16 x i16> [[TMP2]] to <16 x i8>75// BE-NEXT:    ret <16 x i8> [[TMP3]]76//77uint8x16_t test_vmovnbq_u16(uint8x16_t a, uint16x8_t b)78{79#ifdef POLYMORPHIC80    return vmovnbq(a, b);81#else /* POLYMORPHIC */82    return vmovnbq_u16(a, b);83#endif /* POLYMORPHIC */84}85 86// LE-LABEL: @test_vmovnbq_u32(87// LE-NEXT:  entry:88// LE-NEXT:    [[TMP0:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>89// LE-NEXT:    [[TMP1:%.*]] = bitcast <8 x i16> [[TMP0]] to <4 x i32>90// LE-NEXT:    [[TMP2:%.*]] = shufflevector <4 x i32> [[B:%.*]], <4 x i32> [[TMP1]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>91// LE-NEXT:    [[TMP3:%.*]] = trunc <8 x i32> [[TMP2]] to <8 x i16>92// LE-NEXT:    ret <8 x i16> [[TMP3]]93//94// BE-LABEL: @test_vmovnbq_u32(95// BE-NEXT:  entry:96// BE-NEXT:    [[TMP0:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>97// BE-NEXT:    [[TMP1:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[TMP0]])98// BE-NEXT:    [[TMP2:%.*]] = shufflevector <4 x i32> [[B:%.*]], <4 x i32> [[TMP1]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>99// BE-NEXT:    [[TMP3:%.*]] = trunc <8 x i32> [[TMP2]] to <8 x i16>100// BE-NEXT:    ret <8 x i16> [[TMP3]]101//102uint16x8_t test_vmovnbq_u32(uint16x8_t a, uint32x4_t b)103{104#ifdef POLYMORPHIC105    return vmovnbq(a, b);106#else /* POLYMORPHIC */107    return vmovnbq_u32(a, b);108#endif /* POLYMORPHIC */109}110 111// LE-LABEL: @test_vmovntq_s16(112// LE-NEXT:  entry:113// LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>114// LE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i16> [[TMP0]], <8 x i16> [[B:%.*]], <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>115// LE-NEXT:    [[TMP2:%.*]] = trunc <16 x i16> [[TMP1]] to <16 x i8>116// LE-NEXT:    ret <16 x i8> [[TMP2]]117//118// BE-LABEL: @test_vmovntq_s16(119// BE-NEXT:  entry:120// BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])121// BE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i16> [[TMP0]], <8 x i16> [[B:%.*]], <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>122// BE-NEXT:    [[TMP2:%.*]] = trunc <16 x i16> [[TMP1]] to <16 x i8>123// BE-NEXT:    ret <16 x i8> [[TMP2]]124//125int8x16_t test_vmovntq_s16(int8x16_t a, int16x8_t b)126{127#ifdef POLYMORPHIC128    return vmovntq(a, b);129#else /* POLYMORPHIC */130    return vmovntq_s16(a, b);131#endif /* POLYMORPHIC */132}133 134// LE-LABEL: @test_vmovntq_s32(135// LE-NEXT:  entry:136// LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>137// LE-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> [[B:%.*]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>138// LE-NEXT:    [[TMP2:%.*]] = trunc <8 x i32> [[TMP1]] to <8 x i16>139// LE-NEXT:    ret <8 x i16> [[TMP2]]140//141// BE-LABEL: @test_vmovntq_s32(142// BE-NEXT:  entry:143// BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])144// BE-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> [[B:%.*]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>145// BE-NEXT:    [[TMP2:%.*]] = trunc <8 x i32> [[TMP1]] to <8 x i16>146// BE-NEXT:    ret <8 x i16> [[TMP2]]147//148int16x8_t test_vmovntq_s32(int16x8_t a, int32x4_t b)149{150#ifdef POLYMORPHIC151    return vmovntq(a, b);152#else /* POLYMORPHIC */153    return vmovntq_s32(a, b);154#endif /* POLYMORPHIC */155}156 157// LE-LABEL: @test_vmovntq_u16(158// LE-NEXT:  entry:159// LE-NEXT:    [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16>160// LE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i16> [[TMP0]], <8 x i16> [[B:%.*]], <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>161// LE-NEXT:    [[TMP2:%.*]] = trunc <16 x i16> [[TMP1]] to <16 x i8>162// LE-NEXT:    ret <16 x i8> [[TMP2]]163//164// BE-LABEL: @test_vmovntq_u16(165// BE-NEXT:  entry:166// BE-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]])167// BE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i16> [[TMP0]], <8 x i16> [[B:%.*]], <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>168// BE-NEXT:    [[TMP2:%.*]] = trunc <16 x i16> [[TMP1]] to <16 x i8>169// BE-NEXT:    ret <16 x i8> [[TMP2]]170//171uint8x16_t test_vmovntq_u16(uint8x16_t a, uint16x8_t b)172{173#ifdef POLYMORPHIC174    return vmovntq(a, b);175#else /* POLYMORPHIC */176    return vmovntq_u16(a, b);177#endif /* POLYMORPHIC */178}179 180// LE-LABEL: @test_vmovntq_u32(181// LE-NEXT:  entry:182// LE-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32>183// LE-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> [[B:%.*]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>184// LE-NEXT:    [[TMP2:%.*]] = trunc <8 x i32> [[TMP1]] to <8 x i16>185// LE-NEXT:    ret <8 x i16> [[TMP2]]186//187// BE-LABEL: @test_vmovntq_u32(188// BE-NEXT:  entry:189// BE-NEXT:    [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]])190// BE-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> [[B:%.*]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>191// BE-NEXT:    [[TMP2:%.*]] = trunc <8 x i32> [[TMP1]] to <8 x i16>192// BE-NEXT:    ret <8 x i16> [[TMP2]]193//194uint16x8_t test_vmovntq_u32(uint16x8_t a, uint32x4_t b)195{196#ifdef POLYMORPHIC197    return vmovntq(a, b);198#else /* POLYMORPHIC */199    return vmovntq_u32(a, b);200#endif /* POLYMORPHIC */201}202 203// LE-LABEL: @test_vmovnbq_m_s16(204// LE-NEXT:  entry:205// LE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32206// LE-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])207// LE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, <8 x i1> [[TMP1]])208// LE-NEXT:    ret <16 x i8> [[TMP2]]209//210// BE-LABEL: @test_vmovnbq_m_s16(211// BE-NEXT:  entry:212// BE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32213// BE-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])214// BE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, <8 x i1> [[TMP1]])215// BE-NEXT:    ret <16 x i8> [[TMP2]]216//217int8x16_t test_vmovnbq_m_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)218{219#ifdef POLYMORPHIC220    return vmovnbq_m(a, b, p);221#else /* POLYMORPHIC */222    return vmovnbq_m_s16(a, b, p);223#endif /* POLYMORPHIC */224}225 226// LE-LABEL: @test_vmovnbq_m_s32(227// LE-NEXT:  entry:228// LE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32229// LE-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])230// LE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, <4 x i1> [[TMP1]])231// LE-NEXT:    ret <8 x i16> [[TMP2]]232//233// BE-LABEL: @test_vmovnbq_m_s32(234// BE-NEXT:  entry:235// BE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32236// BE-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])237// BE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, <4 x i1> [[TMP1]])238// BE-NEXT:    ret <8 x i16> [[TMP2]]239//240int16x8_t test_vmovnbq_m_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)241{242#ifdef POLYMORPHIC243    return vmovnbq_m(a, b, p);244#else /* POLYMORPHIC */245    return vmovnbq_m_s32(a, b, p);246#endif /* POLYMORPHIC */247}248 249// LE-LABEL: @test_vmovnbq_m_u16(250// LE-NEXT:  entry:251// LE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32252// LE-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])253// LE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, <8 x i1> [[TMP1]])254// LE-NEXT:    ret <16 x i8> [[TMP2]]255//256// BE-LABEL: @test_vmovnbq_m_u16(257// BE-NEXT:  entry:258// BE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32259// BE-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])260// BE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 0, <8 x i1> [[TMP1]])261// BE-NEXT:    ret <16 x i8> [[TMP2]]262//263uint8x16_t test_vmovnbq_m_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)264{265#ifdef POLYMORPHIC266    return vmovnbq_m(a, b, p);267#else /* POLYMORPHIC */268    return vmovnbq_m_u16(a, b, p);269#endif /* POLYMORPHIC */270}271 272// LE-LABEL: @test_vmovnbq_m_u32(273// LE-NEXT:  entry:274// LE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32275// LE-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])276// LE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, <4 x i1> [[TMP1]])277// LE-NEXT:    ret <8 x i16> [[TMP2]]278//279// BE-LABEL: @test_vmovnbq_m_u32(280// BE-NEXT:  entry:281// BE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32282// BE-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])283// BE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 0, <4 x i1> [[TMP1]])284// BE-NEXT:    ret <8 x i16> [[TMP2]]285//286uint16x8_t test_vmovnbq_m_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)287{288#ifdef POLYMORPHIC289    return vmovnbq_m(a, b, p);290#else /* POLYMORPHIC */291    return vmovnbq_m_u32(a, b, p);292#endif /* POLYMORPHIC */293}294 295// LE-LABEL: @test_vmovntq_m_s16(296// LE-NEXT:  entry:297// LE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32298// LE-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])299// LE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, <8 x i1> [[TMP1]])300// LE-NEXT:    ret <16 x i8> [[TMP2]]301//302// BE-LABEL: @test_vmovntq_m_s16(303// BE-NEXT:  entry:304// BE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32305// BE-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])306// BE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, <8 x i1> [[TMP1]])307// BE-NEXT:    ret <16 x i8> [[TMP2]]308//309int8x16_t test_vmovntq_m_s16(int8x16_t a, int16x8_t b, mve_pred16_t p)310{311#ifdef POLYMORPHIC312    return vmovntq_m(a, b, p);313#else /* POLYMORPHIC */314    return vmovntq_m_s16(a, b, p);315#endif /* POLYMORPHIC */316}317 318// LE-LABEL: @test_vmovntq_m_s32(319// LE-NEXT:  entry:320// LE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32321// LE-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])322// LE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, <4 x i1> [[TMP1]])323// LE-NEXT:    ret <8 x i16> [[TMP2]]324//325// BE-LABEL: @test_vmovntq_m_s32(326// BE-NEXT:  entry:327// BE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32328// BE-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])329// BE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, <4 x i1> [[TMP1]])330// BE-NEXT:    ret <8 x i16> [[TMP2]]331//332int16x8_t test_vmovntq_m_s32(int16x8_t a, int32x4_t b, mve_pred16_t p)333{334#ifdef POLYMORPHIC335    return vmovntq_m(a, b, p);336#else /* POLYMORPHIC */337    return vmovntq_m_s32(a, b, p);338#endif /* POLYMORPHIC */339}340 341// LE-LABEL: @test_vmovntq_m_u16(342// LE-NEXT:  entry:343// LE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32344// LE-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])345// LE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, <8 x i1> [[TMP1]])346// LE-NEXT:    ret <16 x i8> [[TMP2]]347//348// BE-LABEL: @test_vmovntq_m_u16(349// BE-NEXT:  entry:350// BE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32351// BE-NEXT:    [[TMP1:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[TMP0]])352// BE-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.arm.mve.vmovn.predicated.v16i8.v8i16.v8i1(<16 x i8> [[A:%.*]], <8 x i16> [[B:%.*]], i32 1, <8 x i1> [[TMP1]])353// BE-NEXT:    ret <16 x i8> [[TMP2]]354//355uint8x16_t test_vmovntq_m_u16(uint8x16_t a, uint16x8_t b, mve_pred16_t p)356{357#ifdef POLYMORPHIC358    return vmovntq_m(a, b, p);359#else /* POLYMORPHIC */360    return vmovntq_m_u16(a, b, p);361#endif /* POLYMORPHIC */362}363 364// LE-LABEL: @test_vmovntq_m_u32(365// LE-NEXT:  entry:366// LE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32367// LE-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])368// LE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, <4 x i1> [[TMP1]])369// LE-NEXT:    ret <8 x i16> [[TMP2]]370//371// BE-LABEL: @test_vmovntq_m_u32(372// BE-NEXT:  entry:373// BE-NEXT:    [[TMP0:%.*]] = zext i16 [[P:%.*]] to i32374// BE-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[TMP0]])375// BE-NEXT:    [[TMP2:%.*]] = call <8 x i16> @llvm.arm.mve.vmovn.predicated.v8i16.v4i32.v4i1(<8 x i16> [[A:%.*]], <4 x i32> [[B:%.*]], i32 1, <4 x i1> [[TMP1]])376// BE-NEXT:    ret <8 x i16> [[TMP2]]377//378uint16x8_t test_vmovntq_m_u32(uint16x8_t a, uint32x4_t b, mve_pred16_t p)379{380#ifdef POLYMORPHIC381    return vmovntq_m(a, b, p);382#else /* POLYMORPHIC */383    return vmovntq_m_u32(a, b, p);384#endif /* POLYMORPHIC */385}386