brintos

brintos / llvm-project-archived public Read only

0
0
Text · 177.4 KiB · 6eadaaf Raw
4057 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 52// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \3// RUN:  -disable-O0-optnone -emit-llvm -o - %s \4// RUN: | opt -S -passes=mem2reg,sroa | FileCheck %s5 6// REQUIRES: aarch64-registered-target || arm-registered-target7 8#include <arm_neon.h>9 10// CHECK-LABEL: define dso_local <8 x i8> @test_vceqz_s8(11// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0:[0-9]+]] {12// CHECK-NEXT:  [[ENTRY:.*:]]13// CHECK-NEXT:    [[TMP0:%.*]] = icmp eq <8 x i8> [[A]], zeroinitializer14// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>15// CHECK-NEXT:    ret <8 x i8> [[VCEQZ_I]]16//17uint8x8_t test_vceqz_s8(int8x8_t a) {18  return vceqz_s8(a);19}20 21// CHECK-LABEL: define dso_local <4 x i16> @test_vceqz_s16(22// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {23// CHECK-NEXT:  [[ENTRY:.*:]]24// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>25// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>26// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <4 x i16> [[TMP1]], zeroinitializer27// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>28// CHECK-NEXT:    ret <4 x i16> [[VCEQZ_I]]29//30uint16x4_t test_vceqz_s16(int16x4_t a) {31  return vceqz_s16(a);32}33 34// CHECK-LABEL: define dso_local <2 x i32> @test_vceqz_s32(35// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {36// CHECK-NEXT:  [[ENTRY:.*:]]37// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>38// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>39// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x i32> [[TMP1]], zeroinitializer40// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>41// CHECK-NEXT:    ret <2 x i32> [[VCEQZ_I]]42//43uint32x2_t test_vceqz_s32(int32x2_t a) {44  return vceqz_s32(a);45}46 47// CHECK-LABEL: define dso_local <1 x i64> @test_vceqz_s64(48// CHECK-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {49// CHECK-NEXT:  [[ENTRY:.*:]]50// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>51// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>52// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <1 x i64> [[TMP1]], zeroinitializer53// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>54// CHECK-NEXT:    ret <1 x i64> [[VCEQZ_I]]55//56uint64x1_t test_vceqz_s64(int64x1_t a) {57  return vceqz_s64(a);58}59 60// CHECK-LABEL: define dso_local <1 x i64> @test_vceqz_u64(61// CHECK-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {62// CHECK-NEXT:  [[ENTRY:.*:]]63// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>64// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>65// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <1 x i64> [[TMP1]], zeroinitializer66// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>67// CHECK-NEXT:    ret <1 x i64> [[VCEQZ_I]]68//69uint64x1_t test_vceqz_u64(uint64x1_t a) {70  return vceqz_u64(a);71}72 73// CHECK-LABEL: define dso_local <1 x i64> @test_vceqz_p64(74// CHECK-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {75// CHECK-NEXT:  [[ENTRY:.*:]]76// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>77// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>78// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <1 x i64> [[TMP1]], zeroinitializer79// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>80// CHECK-NEXT:    ret <1 x i64> [[VCEQZ_I]]81//82uint64x1_t test_vceqz_p64(poly64x1_t a) {83  return vceqz_p64(a);84}85 86// CHECK-LABEL: define dso_local <16 x i8> @test_vceqzq_s8(87// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {88// CHECK-NEXT:  [[ENTRY:.*:]]89// CHECK-NEXT:    [[TMP0:%.*]] = icmp eq <16 x i8> [[A]], zeroinitializer90// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>91// CHECK-NEXT:    ret <16 x i8> [[VCEQZ_I]]92//93uint8x16_t test_vceqzq_s8(int8x16_t a) {94  return vceqzq_s8(a);95}96 97// CHECK-LABEL: define dso_local <8 x i16> @test_vceqzq_s16(98// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {99// CHECK-NEXT:  [[ENTRY:.*:]]100// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>101// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>102// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <8 x i16> [[TMP1]], zeroinitializer103// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>104// CHECK-NEXT:    ret <8 x i16> [[VCEQZ_I]]105//106uint16x8_t test_vceqzq_s16(int16x8_t a) {107  return vceqzq_s16(a);108}109 110// CHECK-LABEL: define dso_local <4 x i32> @test_vceqzq_s32(111// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {112// CHECK-NEXT:  [[ENTRY:.*:]]113// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>114// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>115// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <4 x i32> [[TMP1]], zeroinitializer116// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>117// CHECK-NEXT:    ret <4 x i32> [[VCEQZ_I]]118//119uint32x4_t test_vceqzq_s32(int32x4_t a) {120  return vceqzq_s32(a);121}122 123// CHECK-LABEL: define dso_local <2 x i64> @test_vceqzq_s64(124// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {125// CHECK-NEXT:  [[ENTRY:.*:]]126// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>127// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>128// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x i64> [[TMP1]], zeroinitializer129// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>130// CHECK-NEXT:    ret <2 x i64> [[VCEQZ_I]]131//132uint64x2_t test_vceqzq_s64(int64x2_t a) {133  return vceqzq_s64(a);134}135 136// CHECK-LABEL: define dso_local <8 x i8> @test_vceqz_u8(137// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {138// CHECK-NEXT:  [[ENTRY:.*:]]139// CHECK-NEXT:    [[TMP0:%.*]] = icmp eq <8 x i8> [[A]], zeroinitializer140// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>141// CHECK-NEXT:    ret <8 x i8> [[VCEQZ_I]]142//143uint8x8_t test_vceqz_u8(uint8x8_t a) {144  return vceqz_u8(a);145}146 147// CHECK-LABEL: define dso_local <4 x i16> @test_vceqz_u16(148// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {149// CHECK-NEXT:  [[ENTRY:.*:]]150// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>151// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>152// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <4 x i16> [[TMP1]], zeroinitializer153// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>154// CHECK-NEXT:    ret <4 x i16> [[VCEQZ_I]]155//156uint16x4_t test_vceqz_u16(uint16x4_t a) {157  return vceqz_u16(a);158}159 160// CHECK-LABEL: define dso_local <2 x i32> @test_vceqz_u32(161// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {162// CHECK-NEXT:  [[ENTRY:.*:]]163// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>164// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>165// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x i32> [[TMP1]], zeroinitializer166// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>167// CHECK-NEXT:    ret <2 x i32> [[VCEQZ_I]]168//169uint32x2_t test_vceqz_u32(uint32x2_t a) {170  return vceqz_u32(a);171}172 173// CHECK-LABEL: define dso_local <16 x i8> @test_vceqzq_u8(174// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {175// CHECK-NEXT:  [[ENTRY:.*:]]176// CHECK-NEXT:    [[TMP0:%.*]] = icmp eq <16 x i8> [[A]], zeroinitializer177// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>178// CHECK-NEXT:    ret <16 x i8> [[VCEQZ_I]]179//180uint8x16_t test_vceqzq_u8(uint8x16_t a) {181  return vceqzq_u8(a);182}183 184// CHECK-LABEL: define dso_local <8 x i16> @test_vceqzq_u16(185// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {186// CHECK-NEXT:  [[ENTRY:.*:]]187// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>188// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>189// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <8 x i16> [[TMP1]], zeroinitializer190// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>191// CHECK-NEXT:    ret <8 x i16> [[VCEQZ_I]]192//193uint16x8_t test_vceqzq_u16(uint16x8_t a) {194  return vceqzq_u16(a);195}196 197// CHECK-LABEL: define dso_local <4 x i32> @test_vceqzq_u32(198// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {199// CHECK-NEXT:  [[ENTRY:.*:]]200// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>201// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>202// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <4 x i32> [[TMP1]], zeroinitializer203// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>204// CHECK-NEXT:    ret <4 x i32> [[VCEQZ_I]]205//206uint32x4_t test_vceqzq_u32(uint32x4_t a) {207  return vceqzq_u32(a);208}209 210// CHECK-LABEL: define dso_local <2 x i64> @test_vceqzq_u64(211// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {212// CHECK-NEXT:  [[ENTRY:.*:]]213// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>214// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>215// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x i64> [[TMP1]], zeroinitializer216// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>217// CHECK-NEXT:    ret <2 x i64> [[VCEQZ_I]]218//219uint64x2_t test_vceqzq_u64(uint64x2_t a) {220  return vceqzq_u64(a);221}222 223// CHECK-LABEL: define dso_local <2 x i32> @test_vceqz_f32(224// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {225// CHECK-NEXT:  [[ENTRY:.*:]]226// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>227// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>228// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>229// CHECK-NEXT:    [[TMP3:%.*]] = fcmp oeq <2 x float> [[TMP2]], zeroinitializer230// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i32>231// CHECK-NEXT:    ret <2 x i32> [[VCEQZ_I]]232//233uint32x2_t test_vceqz_f32(float32x2_t a) {234  return vceqz_f32(a);235}236 237// CHECK-LABEL: define dso_local <1 x i64> @test_vceqz_f64(238// CHECK-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {239// CHECK-NEXT:  [[ENTRY:.*:]]240// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i64241// CHECK-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 0242// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>243// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>244// CHECK-NEXT:    [[TMP3:%.*]] = fcmp oeq <1 x double> [[TMP2]], zeroinitializer245// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <1 x i1> [[TMP3]] to <1 x i64>246// CHECK-NEXT:    ret <1 x i64> [[VCEQZ_I]]247//248uint64x1_t test_vceqz_f64(float64x1_t a) {249  return vceqz_f64(a);250}251 252// CHECK-LABEL: define dso_local <4 x i32> @test_vceqzq_f32(253// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {254// CHECK-NEXT:  [[ENTRY:.*:]]255// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>256// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>257// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>258// CHECK-NEXT:    [[TMP3:%.*]] = fcmp oeq <4 x float> [[TMP2]], zeroinitializer259// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <4 x i1> [[TMP3]] to <4 x i32>260// CHECK-NEXT:    ret <4 x i32> [[VCEQZ_I]]261//262uint32x4_t test_vceqzq_f32(float32x4_t a) {263  return vceqzq_f32(a);264}265 266// CHECK-LABEL: define dso_local <8 x i8> @test_vceqz_p8(267// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {268// CHECK-NEXT:  [[ENTRY:.*:]]269// CHECK-NEXT:    [[TMP0:%.*]] = icmp eq <8 x i8> [[A]], zeroinitializer270// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>271// CHECK-NEXT:    ret <8 x i8> [[VCEQZ_I]]272//273uint8x8_t test_vceqz_p8(poly8x8_t a) {274  return vceqz_p8(a);275}276 277// CHECK-LABEL: define dso_local <16 x i8> @test_vceqzq_p8(278// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {279// CHECK-NEXT:  [[ENTRY:.*:]]280// CHECK-NEXT:    [[TMP0:%.*]] = icmp eq <16 x i8> [[A]], zeroinitializer281// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>282// CHECK-NEXT:    ret <16 x i8> [[VCEQZ_I]]283//284uint8x16_t test_vceqzq_p8(poly8x16_t a) {285  return vceqzq_p8(a);286}287 288// CHECK-LABEL: define dso_local <2 x i64> @test_vceqzq_f64(289// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {290// CHECK-NEXT:  [[ENTRY:.*:]]291// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>292// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>293// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>294// CHECK-NEXT:    [[TMP3:%.*]] = fcmp oeq <2 x double> [[TMP2]], zeroinitializer295// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i64>296// CHECK-NEXT:    ret <2 x i64> [[VCEQZ_I]]297//298uint64x2_t test_vceqzq_f64(float64x2_t a) {299  return vceqzq_f64(a);300}301 302// CHECK-LABEL: define dso_local <2 x i64> @test_vceqzq_p64(303// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {304// CHECK-NEXT:  [[ENTRY:.*:]]305// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>306// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>307// CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x i64> [[TMP1]], zeroinitializer308// CHECK-NEXT:    [[VCEQZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>309// CHECK-NEXT:    ret <2 x i64> [[VCEQZ_I]]310//311uint64x2_t test_vceqzq_p64(poly64x2_t a) {312  return vceqzq_p64(a);313}314 315// CHECK-LABEL: define dso_local <8 x i8> @test_vcgez_s8(316// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {317// CHECK-NEXT:  [[ENTRY:.*:]]318// CHECK-NEXT:    [[TMP0:%.*]] = icmp sge <8 x i8> [[A]], zeroinitializer319// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>320// CHECK-NEXT:    ret <8 x i8> [[VCGEZ_I]]321//322uint8x8_t test_vcgez_s8(int8x8_t a) {323  return vcgez_s8(a);324}325 326// CHECK-LABEL: define dso_local <4 x i16> @test_vcgez_s16(327// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {328// CHECK-NEXT:  [[ENTRY:.*:]]329// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>330// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>331// CHECK-NEXT:    [[TMP2:%.*]] = icmp sge <4 x i16> [[TMP1]], zeroinitializer332// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>333// CHECK-NEXT:    ret <4 x i16> [[VCGEZ_I]]334//335uint16x4_t test_vcgez_s16(int16x4_t a) {336  return vcgez_s16(a);337}338 339// CHECK-LABEL: define dso_local <2 x i32> @test_vcgez_s32(340// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {341// CHECK-NEXT:  [[ENTRY:.*:]]342// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>343// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>344// CHECK-NEXT:    [[TMP2:%.*]] = icmp sge <2 x i32> [[TMP1]], zeroinitializer345// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>346// CHECK-NEXT:    ret <2 x i32> [[VCGEZ_I]]347//348uint32x2_t test_vcgez_s32(int32x2_t a) {349  return vcgez_s32(a);350}351 352// CHECK-LABEL: define dso_local <1 x i64> @test_vcgez_s64(353// CHECK-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {354// CHECK-NEXT:  [[ENTRY:.*:]]355// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>356// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>357// CHECK-NEXT:    [[TMP2:%.*]] = icmp sge <1 x i64> [[TMP1]], zeroinitializer358// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>359// CHECK-NEXT:    ret <1 x i64> [[VCGEZ_I]]360//361uint64x1_t test_vcgez_s64(int64x1_t a) {362  return vcgez_s64(a);363}364 365// CHECK-LABEL: define dso_local <16 x i8> @test_vcgezq_s8(366// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {367// CHECK-NEXT:  [[ENTRY:.*:]]368// CHECK-NEXT:    [[TMP0:%.*]] = icmp sge <16 x i8> [[A]], zeroinitializer369// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>370// CHECK-NEXT:    ret <16 x i8> [[VCGEZ_I]]371//372uint8x16_t test_vcgezq_s8(int8x16_t a) {373  return vcgezq_s8(a);374}375 376// CHECK-LABEL: define dso_local <8 x i16> @test_vcgezq_s16(377// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {378// CHECK-NEXT:  [[ENTRY:.*:]]379// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>380// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>381// CHECK-NEXT:    [[TMP2:%.*]] = icmp sge <8 x i16> [[TMP1]], zeroinitializer382// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>383// CHECK-NEXT:    ret <8 x i16> [[VCGEZ_I]]384//385uint16x8_t test_vcgezq_s16(int16x8_t a) {386  return vcgezq_s16(a);387}388 389// CHECK-LABEL: define dso_local <4 x i32> @test_vcgezq_s32(390// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {391// CHECK-NEXT:  [[ENTRY:.*:]]392// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>393// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>394// CHECK-NEXT:    [[TMP2:%.*]] = icmp sge <4 x i32> [[TMP1]], zeroinitializer395// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>396// CHECK-NEXT:    ret <4 x i32> [[VCGEZ_I]]397//398uint32x4_t test_vcgezq_s32(int32x4_t a) {399  return vcgezq_s32(a);400}401 402// CHECK-LABEL: define dso_local <2 x i64> @test_vcgezq_s64(403// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {404// CHECK-NEXT:  [[ENTRY:.*:]]405// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>406// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>407// CHECK-NEXT:    [[TMP2:%.*]] = icmp sge <2 x i64> [[TMP1]], zeroinitializer408// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>409// CHECK-NEXT:    ret <2 x i64> [[VCGEZ_I]]410//411uint64x2_t test_vcgezq_s64(int64x2_t a) {412  return vcgezq_s64(a);413}414 415// CHECK-LABEL: define dso_local <2 x i32> @test_vcgez_f32(416// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {417// CHECK-NEXT:  [[ENTRY:.*:]]418// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>419// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>420// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>421// CHECK-NEXT:    [[TMP3:%.*]] = fcmp oge <2 x float> [[TMP2]], zeroinitializer422// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i32>423// CHECK-NEXT:    ret <2 x i32> [[VCGEZ_I]]424//425uint32x2_t test_vcgez_f32(float32x2_t a) {426  return vcgez_f32(a);427}428 429// CHECK-LABEL: define dso_local <1 x i64> @test_vcgez_f64(430// CHECK-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {431// CHECK-NEXT:  [[ENTRY:.*:]]432// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i64433// CHECK-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 0434// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>435// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>436// CHECK-NEXT:    [[TMP3:%.*]] = fcmp oge <1 x double> [[TMP2]], zeroinitializer437// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <1 x i1> [[TMP3]] to <1 x i64>438// CHECK-NEXT:    ret <1 x i64> [[VCGEZ_I]]439//440uint64x1_t test_vcgez_f64(float64x1_t a) {441  return vcgez_f64(a);442}443 444// CHECK-LABEL: define dso_local <4 x i32> @test_vcgezq_f32(445// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {446// CHECK-NEXT:  [[ENTRY:.*:]]447// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>448// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>449// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>450// CHECK-NEXT:    [[TMP3:%.*]] = fcmp oge <4 x float> [[TMP2]], zeroinitializer451// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <4 x i1> [[TMP3]] to <4 x i32>452// CHECK-NEXT:    ret <4 x i32> [[VCGEZ_I]]453//454uint32x4_t test_vcgezq_f32(float32x4_t a) {455  return vcgezq_f32(a);456}457 458// CHECK-LABEL: define dso_local <2 x i64> @test_vcgezq_f64(459// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {460// CHECK-NEXT:  [[ENTRY:.*:]]461// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>462// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>463// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>464// CHECK-NEXT:    [[TMP3:%.*]] = fcmp oge <2 x double> [[TMP2]], zeroinitializer465// CHECK-NEXT:    [[VCGEZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i64>466// CHECK-NEXT:    ret <2 x i64> [[VCGEZ_I]]467//468uint64x2_t test_vcgezq_f64(float64x2_t a) {469  return vcgezq_f64(a);470}471 472// CHECK-LABEL: define dso_local <8 x i8> @test_vclez_s8(473// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {474// CHECK-NEXT:  [[ENTRY:.*:]]475// CHECK-NEXT:    [[TMP0:%.*]] = icmp sle <8 x i8> [[A]], zeroinitializer476// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>477// CHECK-NEXT:    ret <8 x i8> [[VCLEZ_I]]478//479uint8x8_t test_vclez_s8(int8x8_t a) {480  return vclez_s8(a);481}482 483// CHECK-LABEL: define dso_local <4 x i16> @test_vclez_s16(484// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {485// CHECK-NEXT:  [[ENTRY:.*:]]486// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>487// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>488// CHECK-NEXT:    [[TMP2:%.*]] = icmp sle <4 x i16> [[TMP1]], zeroinitializer489// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>490// CHECK-NEXT:    ret <4 x i16> [[VCLEZ_I]]491//492uint16x4_t test_vclez_s16(int16x4_t a) {493  return vclez_s16(a);494}495 496// CHECK-LABEL: define dso_local <2 x i32> @test_vclez_s32(497// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {498// CHECK-NEXT:  [[ENTRY:.*:]]499// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>500// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>501// CHECK-NEXT:    [[TMP2:%.*]] = icmp sle <2 x i32> [[TMP1]], zeroinitializer502// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>503// CHECK-NEXT:    ret <2 x i32> [[VCLEZ_I]]504//505uint32x2_t test_vclez_s32(int32x2_t a) {506  return vclez_s32(a);507}508 509// CHECK-LABEL: define dso_local <1 x i64> @test_vclez_s64(510// CHECK-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {511// CHECK-NEXT:  [[ENTRY:.*:]]512// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>513// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>514// CHECK-NEXT:    [[TMP2:%.*]] = icmp sle <1 x i64> [[TMP1]], zeroinitializer515// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>516// CHECK-NEXT:    ret <1 x i64> [[VCLEZ_I]]517//518uint64x1_t test_vclez_s64(int64x1_t a) {519  return vclez_s64(a);520}521 522// CHECK-LABEL: define dso_local <16 x i8> @test_vclezq_s8(523// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {524// CHECK-NEXT:  [[ENTRY:.*:]]525// CHECK-NEXT:    [[TMP0:%.*]] = icmp sle <16 x i8> [[A]], zeroinitializer526// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>527// CHECK-NEXT:    ret <16 x i8> [[VCLEZ_I]]528//529uint8x16_t test_vclezq_s8(int8x16_t a) {530  return vclezq_s8(a);531}532 533// CHECK-LABEL: define dso_local <8 x i16> @test_vclezq_s16(534// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {535// CHECK-NEXT:  [[ENTRY:.*:]]536// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>537// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>538// CHECK-NEXT:    [[TMP2:%.*]] = icmp sle <8 x i16> [[TMP1]], zeroinitializer539// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>540// CHECK-NEXT:    ret <8 x i16> [[VCLEZ_I]]541//542uint16x8_t test_vclezq_s16(int16x8_t a) {543  return vclezq_s16(a);544}545 546// CHECK-LABEL: define dso_local <4 x i32> @test_vclezq_s32(547// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {548// CHECK-NEXT:  [[ENTRY:.*:]]549// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>550// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>551// CHECK-NEXT:    [[TMP2:%.*]] = icmp sle <4 x i32> [[TMP1]], zeroinitializer552// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>553// CHECK-NEXT:    ret <4 x i32> [[VCLEZ_I]]554//555uint32x4_t test_vclezq_s32(int32x4_t a) {556  return vclezq_s32(a);557}558 559// CHECK-LABEL: define dso_local <2 x i64> @test_vclezq_s64(560// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {561// CHECK-NEXT:  [[ENTRY:.*:]]562// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>563// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>564// CHECK-NEXT:    [[TMP2:%.*]] = icmp sle <2 x i64> [[TMP1]], zeroinitializer565// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>566// CHECK-NEXT:    ret <2 x i64> [[VCLEZ_I]]567//568uint64x2_t test_vclezq_s64(int64x2_t a) {569  return vclezq_s64(a);570}571 572// CHECK-LABEL: define dso_local <2 x i32> @test_vclez_f32(573// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {574// CHECK-NEXT:  [[ENTRY:.*:]]575// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>576// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>577// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>578// CHECK-NEXT:    [[TMP3:%.*]] = fcmp ole <2 x float> [[TMP2]], zeroinitializer579// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i32>580// CHECK-NEXT:    ret <2 x i32> [[VCLEZ_I]]581//582uint32x2_t test_vclez_f32(float32x2_t a) {583  return vclez_f32(a);584}585 586// CHECK-LABEL: define dso_local <1 x i64> @test_vclez_f64(587// CHECK-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {588// CHECK-NEXT:  [[ENTRY:.*:]]589// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i64590// CHECK-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 0591// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>592// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>593// CHECK-NEXT:    [[TMP3:%.*]] = fcmp ole <1 x double> [[TMP2]], zeroinitializer594// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <1 x i1> [[TMP3]] to <1 x i64>595// CHECK-NEXT:    ret <1 x i64> [[VCLEZ_I]]596//597uint64x1_t test_vclez_f64(float64x1_t a) {598  return vclez_f64(a);599}600 601// CHECK-LABEL: define dso_local <4 x i32> @test_vclezq_f32(602// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {603// CHECK-NEXT:  [[ENTRY:.*:]]604// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>605// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>606// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>607// CHECK-NEXT:    [[TMP3:%.*]] = fcmp ole <4 x float> [[TMP2]], zeroinitializer608// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <4 x i1> [[TMP3]] to <4 x i32>609// CHECK-NEXT:    ret <4 x i32> [[VCLEZ_I]]610//611uint32x4_t test_vclezq_f32(float32x4_t a) {612  return vclezq_f32(a);613}614 615// CHECK-LABEL: define dso_local <2 x i64> @test_vclezq_f64(616// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {617// CHECK-NEXT:  [[ENTRY:.*:]]618// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>619// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>620// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>621// CHECK-NEXT:    [[TMP3:%.*]] = fcmp ole <2 x double> [[TMP2]], zeroinitializer622// CHECK-NEXT:    [[VCLEZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i64>623// CHECK-NEXT:    ret <2 x i64> [[VCLEZ_I]]624//625uint64x2_t test_vclezq_f64(float64x2_t a) {626  return vclezq_f64(a);627}628 629// CHECK-LABEL: define dso_local <8 x i8> @test_vcgtz_s8(630// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {631// CHECK-NEXT:  [[ENTRY:.*:]]632// CHECK-NEXT:    [[TMP0:%.*]] = icmp sgt <8 x i8> [[A]], zeroinitializer633// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>634// CHECK-NEXT:    ret <8 x i8> [[VCGTZ_I]]635//636uint8x8_t test_vcgtz_s8(int8x8_t a) {637  return vcgtz_s8(a);638}639 640// CHECK-LABEL: define dso_local <4 x i16> @test_vcgtz_s16(641// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {642// CHECK-NEXT:  [[ENTRY:.*:]]643// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>644// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>645// CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt <4 x i16> [[TMP1]], zeroinitializer646// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>647// CHECK-NEXT:    ret <4 x i16> [[VCGTZ_I]]648//649uint16x4_t test_vcgtz_s16(int16x4_t a) {650  return vcgtz_s16(a);651}652 653// CHECK-LABEL: define dso_local <2 x i32> @test_vcgtz_s32(654// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {655// CHECK-NEXT:  [[ENTRY:.*:]]656// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>657// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>658// CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt <2 x i32> [[TMP1]], zeroinitializer659// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>660// CHECK-NEXT:    ret <2 x i32> [[VCGTZ_I]]661//662uint32x2_t test_vcgtz_s32(int32x2_t a) {663  return vcgtz_s32(a);664}665 666// CHECK-LABEL: define dso_local <1 x i64> @test_vcgtz_s64(667// CHECK-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {668// CHECK-NEXT:  [[ENTRY:.*:]]669// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>670// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>671// CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt <1 x i64> [[TMP1]], zeroinitializer672// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>673// CHECK-NEXT:    ret <1 x i64> [[VCGTZ_I]]674//675uint64x1_t test_vcgtz_s64(int64x1_t a) {676  return vcgtz_s64(a);677}678 679// CHECK-LABEL: define dso_local <16 x i8> @test_vcgtzq_s8(680// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {681// CHECK-NEXT:  [[ENTRY:.*:]]682// CHECK-NEXT:    [[TMP0:%.*]] = icmp sgt <16 x i8> [[A]], zeroinitializer683// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>684// CHECK-NEXT:    ret <16 x i8> [[VCGTZ_I]]685//686uint8x16_t test_vcgtzq_s8(int8x16_t a) {687  return vcgtzq_s8(a);688}689 690// CHECK-LABEL: define dso_local <8 x i16> @test_vcgtzq_s16(691// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {692// CHECK-NEXT:  [[ENTRY:.*:]]693// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>694// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>695// CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt <8 x i16> [[TMP1]], zeroinitializer696// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>697// CHECK-NEXT:    ret <8 x i16> [[VCGTZ_I]]698//699uint16x8_t test_vcgtzq_s16(int16x8_t a) {700  return vcgtzq_s16(a);701}702 703// CHECK-LABEL: define dso_local <4 x i32> @test_vcgtzq_s32(704// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {705// CHECK-NEXT:  [[ENTRY:.*:]]706// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>707// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>708// CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt <4 x i32> [[TMP1]], zeroinitializer709// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>710// CHECK-NEXT:    ret <4 x i32> [[VCGTZ_I]]711//712uint32x4_t test_vcgtzq_s32(int32x4_t a) {713  return vcgtzq_s32(a);714}715 716// CHECK-LABEL: define dso_local <2 x i64> @test_vcgtzq_s64(717// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {718// CHECK-NEXT:  [[ENTRY:.*:]]719// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>720// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>721// CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt <2 x i64> [[TMP1]], zeroinitializer722// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>723// CHECK-NEXT:    ret <2 x i64> [[VCGTZ_I]]724//725uint64x2_t test_vcgtzq_s64(int64x2_t a) {726  return vcgtzq_s64(a);727}728 729// CHECK-LABEL: define dso_local <2 x i32> @test_vcgtz_f32(730// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {731// CHECK-NEXT:  [[ENTRY:.*:]]732// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>733// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>734// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>735// CHECK-NEXT:    [[TMP3:%.*]] = fcmp ogt <2 x float> [[TMP2]], zeroinitializer736// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i32>737// CHECK-NEXT:    ret <2 x i32> [[VCGTZ_I]]738//739uint32x2_t test_vcgtz_f32(float32x2_t a) {740  return vcgtz_f32(a);741}742 743// CHECK-LABEL: define dso_local <1 x i64> @test_vcgtz_f64(744// CHECK-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {745// CHECK-NEXT:  [[ENTRY:.*:]]746// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i64747// CHECK-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 0748// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>749// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>750// CHECK-NEXT:    [[TMP3:%.*]] = fcmp ogt <1 x double> [[TMP2]], zeroinitializer751// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <1 x i1> [[TMP3]] to <1 x i64>752// CHECK-NEXT:    ret <1 x i64> [[VCGTZ_I]]753//754uint64x1_t test_vcgtz_f64(float64x1_t a) {755  return vcgtz_f64(a);756}757 758// CHECK-LABEL: define dso_local <4 x i32> @test_vcgtzq_f32(759// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {760// CHECK-NEXT:  [[ENTRY:.*:]]761// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>762// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>763// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>764// CHECK-NEXT:    [[TMP3:%.*]] = fcmp ogt <4 x float> [[TMP2]], zeroinitializer765// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <4 x i1> [[TMP3]] to <4 x i32>766// CHECK-NEXT:    ret <4 x i32> [[VCGTZ_I]]767//768uint32x4_t test_vcgtzq_f32(float32x4_t a) {769  return vcgtzq_f32(a);770}771 772// CHECK-LABEL: define dso_local <2 x i64> @test_vcgtzq_f64(773// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {774// CHECK-NEXT:  [[ENTRY:.*:]]775// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>776// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>777// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>778// CHECK-NEXT:    [[TMP3:%.*]] = fcmp ogt <2 x double> [[TMP2]], zeroinitializer779// CHECK-NEXT:    [[VCGTZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i64>780// CHECK-NEXT:    ret <2 x i64> [[VCGTZ_I]]781//782uint64x2_t test_vcgtzq_f64(float64x2_t a) {783  return vcgtzq_f64(a);784}785 786// CHECK-LABEL: define dso_local <8 x i8> @test_vcltz_s8(787// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {788// CHECK-NEXT:  [[ENTRY:.*:]]789// CHECK-NEXT:    [[TMP0:%.*]] = icmp slt <8 x i8> [[A]], zeroinitializer790// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <8 x i1> [[TMP0]] to <8 x i8>791// CHECK-NEXT:    ret <8 x i8> [[VCLTZ_I]]792//793uint8x8_t test_vcltz_s8(int8x8_t a) {794  return vcltz_s8(a);795}796 797// CHECK-LABEL: define dso_local <4 x i16> @test_vcltz_s16(798// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {799// CHECK-NEXT:  [[ENTRY:.*:]]800// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>801// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>802// CHECK-NEXT:    [[TMP2:%.*]] = icmp slt <4 x i16> [[TMP1]], zeroinitializer803// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i16>804// CHECK-NEXT:    ret <4 x i16> [[VCLTZ_I]]805//806uint16x4_t test_vcltz_s16(int16x4_t a) {807  return vcltz_s16(a);808}809 810// CHECK-LABEL: define dso_local <2 x i32> @test_vcltz_s32(811// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {812// CHECK-NEXT:  [[ENTRY:.*:]]813// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>814// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>815// CHECK-NEXT:    [[TMP2:%.*]] = icmp slt <2 x i32> [[TMP1]], zeroinitializer816// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i32>817// CHECK-NEXT:    ret <2 x i32> [[VCLTZ_I]]818//819uint32x2_t test_vcltz_s32(int32x2_t a) {820  return vcltz_s32(a);821}822 823// CHECK-LABEL: define dso_local <1 x i64> @test_vcltz_s64(824// CHECK-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {825// CHECK-NEXT:  [[ENTRY:.*:]]826// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>827// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>828// CHECK-NEXT:    [[TMP2:%.*]] = icmp slt <1 x i64> [[TMP1]], zeroinitializer829// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <1 x i1> [[TMP2]] to <1 x i64>830// CHECK-NEXT:    ret <1 x i64> [[VCLTZ_I]]831//832uint64x1_t test_vcltz_s64(int64x1_t a) {833  return vcltz_s64(a);834}835 836// CHECK-LABEL: define dso_local <16 x i8> @test_vcltzq_s8(837// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {838// CHECK-NEXT:  [[ENTRY:.*:]]839// CHECK-NEXT:    [[TMP0:%.*]] = icmp slt <16 x i8> [[A]], zeroinitializer840// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <16 x i1> [[TMP0]] to <16 x i8>841// CHECK-NEXT:    ret <16 x i8> [[VCLTZ_I]]842//843uint8x16_t test_vcltzq_s8(int8x16_t a) {844  return vcltzq_s8(a);845}846 847// CHECK-LABEL: define dso_local <8 x i16> @test_vcltzq_s16(848// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {849// CHECK-NEXT:  [[ENTRY:.*:]]850// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>851// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>852// CHECK-NEXT:    [[TMP2:%.*]] = icmp slt <8 x i16> [[TMP1]], zeroinitializer853// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i16>854// CHECK-NEXT:    ret <8 x i16> [[VCLTZ_I]]855//856uint16x8_t test_vcltzq_s16(int16x8_t a) {857  return vcltzq_s16(a);858}859 860// CHECK-LABEL: define dso_local <4 x i32> @test_vcltzq_s32(861// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {862// CHECK-NEXT:  [[ENTRY:.*:]]863// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>864// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>865// CHECK-NEXT:    [[TMP2:%.*]] = icmp slt <4 x i32> [[TMP1]], zeroinitializer866// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>867// CHECK-NEXT:    ret <4 x i32> [[VCLTZ_I]]868//869uint32x4_t test_vcltzq_s32(int32x4_t a) {870  return vcltzq_s32(a);871}872 873// CHECK-LABEL: define dso_local <2 x i64> @test_vcltzq_s64(874// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {875// CHECK-NEXT:  [[ENTRY:.*:]]876// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>877// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>878// CHECK-NEXT:    [[TMP2:%.*]] = icmp slt <2 x i64> [[TMP1]], zeroinitializer879// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP2]] to <2 x i64>880// CHECK-NEXT:    ret <2 x i64> [[VCLTZ_I]]881//882uint64x2_t test_vcltzq_s64(int64x2_t a) {883  return vcltzq_s64(a);884}885 886// CHECK-LABEL: define dso_local <2 x i32> @test_vcltz_f32(887// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {888// CHECK-NEXT:  [[ENTRY:.*:]]889// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>890// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>891// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>892// CHECK-NEXT:    [[TMP3:%.*]] = fcmp olt <2 x float> [[TMP2]], zeroinitializer893// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i32>894// CHECK-NEXT:    ret <2 x i32> [[VCLTZ_I]]895//896uint32x2_t test_vcltz_f32(float32x2_t a) {897  return vcltz_f32(a);898}899 900// CHECK-LABEL: define dso_local <1 x i64> @test_vcltz_f64(901// CHECK-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {902// CHECK-NEXT:  [[ENTRY:.*:]]903// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i64904// CHECK-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 0905// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>906// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>907// CHECK-NEXT:    [[TMP3:%.*]] = fcmp olt <1 x double> [[TMP2]], zeroinitializer908// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <1 x i1> [[TMP3]] to <1 x i64>909// CHECK-NEXT:    ret <1 x i64> [[VCLTZ_I]]910//911uint64x1_t test_vcltz_f64(float64x1_t a) {912  return vcltz_f64(a);913}914 915// CHECK-LABEL: define dso_local <4 x i32> @test_vcltzq_f32(916// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {917// CHECK-NEXT:  [[ENTRY:.*:]]918// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>919// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>920// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>921// CHECK-NEXT:    [[TMP3:%.*]] = fcmp olt <4 x float> [[TMP2]], zeroinitializer922// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <4 x i1> [[TMP3]] to <4 x i32>923// CHECK-NEXT:    ret <4 x i32> [[VCLTZ_I]]924//925uint32x4_t test_vcltzq_f32(float32x4_t a) {926  return vcltzq_f32(a);927}928 929// CHECK-LABEL: define dso_local <2 x i64> @test_vcltzq_f64(930// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {931// CHECK-NEXT:  [[ENTRY:.*:]]932// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>933// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>934// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>935// CHECK-NEXT:    [[TMP3:%.*]] = fcmp olt <2 x double> [[TMP2]], zeroinitializer936// CHECK-NEXT:    [[VCLTZ_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i64>937// CHECK-NEXT:    ret <2 x i64> [[VCLTZ_I]]938//939uint64x2_t test_vcltzq_f64(float64x2_t a) {940  return vcltzq_f64(a);941}942 943// CHECK-LABEL: define dso_local <8 x i8> @test_vrev16_s8(944// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {945// CHECK-NEXT:  [[ENTRY:.*:]]946// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[A]], <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>947// CHECK-NEXT:    ret <8 x i8> [[SHUFFLE_I]]948//949int8x8_t test_vrev16_s8(int8x8_t a) {950  return vrev16_s8(a);951}952 953// CHECK-LABEL: define dso_local <8 x i8> @test_vrev16_u8(954// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {955// CHECK-NEXT:  [[ENTRY:.*:]]956// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[A]], <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>957// CHECK-NEXT:    ret <8 x i8> [[SHUFFLE_I]]958//959uint8x8_t test_vrev16_u8(uint8x8_t a) {960  return vrev16_u8(a);961}962 963// CHECK-LABEL: define dso_local <8 x i8> @test_vrev16_p8(964// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {965// CHECK-NEXT:  [[ENTRY:.*:]]966// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[A]], <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>967// CHECK-NEXT:    ret <8 x i8> [[SHUFFLE_I]]968//969poly8x8_t test_vrev16_p8(poly8x8_t a) {970  return vrev16_p8(a);971}972 973// CHECK-LABEL: define dso_local <16 x i8> @test_vrev16q_s8(974// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {975// CHECK-NEXT:  [[ENTRY:.*:]]976// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <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>977// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]978//979int8x16_t test_vrev16q_s8(int8x16_t a) {980  return vrev16q_s8(a);981}982 983// CHECK-LABEL: define dso_local <16 x i8> @test_vrev16q_u8(984// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {985// CHECK-NEXT:  [[ENTRY:.*:]]986// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <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>987// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]988//989uint8x16_t test_vrev16q_u8(uint8x16_t a) {990  return vrev16q_u8(a);991}992 993// CHECK-LABEL: define dso_local <16 x i8> @test_vrev16q_p8(994// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {995// CHECK-NEXT:  [[ENTRY:.*:]]996// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <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>997// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]998//999poly8x16_t test_vrev16q_p8(poly8x16_t a) {1000  return vrev16q_p8(a);1001}1002 1003// CHECK-LABEL: define dso_local <8 x i8> @test_vrev32_s8(1004// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1005// CHECK-NEXT:  [[ENTRY:.*:]]1006// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[A]], <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1007// CHECK-NEXT:    ret <8 x i8> [[SHUFFLE_I]]1008//1009int8x8_t test_vrev32_s8(int8x8_t a) {1010  return vrev32_s8(a);1011}1012 1013// CHECK-LABEL: define dso_local <4 x i16> @test_vrev32_s16(1014// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1015// CHECK-NEXT:  [[ENTRY:.*:]]1016// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[A]], <4 x i32> <i32 1, i32 0, i32 3, i32 2>1017// CHECK-NEXT:    ret <4 x i16> [[SHUFFLE_I]]1018//1019int16x4_t test_vrev32_s16(int16x4_t a) {1020  return vrev32_s16(a);1021}1022 1023// CHECK-LABEL: define dso_local <8 x i8> @test_vrev32_u8(1024// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1025// CHECK-NEXT:  [[ENTRY:.*:]]1026// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[A]], <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1027// CHECK-NEXT:    ret <8 x i8> [[SHUFFLE_I]]1028//1029uint8x8_t test_vrev32_u8(uint8x8_t a) {1030  return vrev32_u8(a);1031}1032 1033// CHECK-LABEL: define dso_local <4 x i16> @test_vrev32_u16(1034// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1035// CHECK-NEXT:  [[ENTRY:.*:]]1036// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[A]], <4 x i32> <i32 1, i32 0, i32 3, i32 2>1037// CHECK-NEXT:    ret <4 x i16> [[SHUFFLE_I]]1038//1039uint16x4_t test_vrev32_u16(uint16x4_t a) {1040  return vrev32_u16(a);1041}1042 1043// CHECK-LABEL: define dso_local <8 x i8> @test_vrev32_p8(1044// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1045// CHECK-NEXT:  [[ENTRY:.*:]]1046// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[A]], <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1047// CHECK-NEXT:    ret <8 x i8> [[SHUFFLE_I]]1048//1049poly8x8_t test_vrev32_p8(poly8x8_t a) {1050  return vrev32_p8(a);1051}1052 1053// CHECK-LABEL: define dso_local <4 x i16> @test_vrev32_p16(1054// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1055// CHECK-NEXT:  [[ENTRY:.*:]]1056// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[A]], <4 x i32> <i32 1, i32 0, i32 3, i32 2>1057// CHECK-NEXT:    ret <4 x i16> [[SHUFFLE_I]]1058//1059poly16x4_t test_vrev32_p16(poly16x4_t a) {1060  return vrev32_p16(a);1061}1062 1063// CHECK-LABEL: define dso_local <16 x i8> @test_vrev32q_s8(1064// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1065// CHECK-NEXT:  [[ENTRY:.*:]]1066// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>1067// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]1068//1069int8x16_t test_vrev32q_s8(int8x16_t a) {1070  return vrev32q_s8(a);1071}1072 1073// CHECK-LABEL: define dso_local <8 x i16> @test_vrev32q_s16(1074// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1075// CHECK-NEXT:  [[ENTRY:.*:]]1076// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[A]], <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>1077// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]1078//1079int16x8_t test_vrev32q_s16(int16x8_t a) {1080  return vrev32q_s16(a);1081}1082 1083// CHECK-LABEL: define dso_local <16 x i8> @test_vrev32q_u8(1084// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1085// CHECK-NEXT:  [[ENTRY:.*:]]1086// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>1087// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]1088//1089uint8x16_t test_vrev32q_u8(uint8x16_t a) {1090  return vrev32q_u8(a);1091}1092 1093// CHECK-LABEL: define dso_local <8 x i16> @test_vrev32q_u16(1094// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1095// CHECK-NEXT:  [[ENTRY:.*:]]1096// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[A]], <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>1097// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]1098//1099uint16x8_t test_vrev32q_u16(uint16x8_t a) {1100  return vrev32q_u16(a);1101}1102 1103// CHECK-LABEL: define dso_local <16 x i8> @test_vrev32q_p8(1104// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1105// CHECK-NEXT:  [[ENTRY:.*:]]1106// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>1107// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]1108//1109poly8x16_t test_vrev32q_p8(poly8x16_t a) {1110  return vrev32q_p8(a);1111}1112 1113// CHECK-LABEL: define dso_local <8 x i16> @test_vrev32q_p16(1114// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1115// CHECK-NEXT:  [[ENTRY:.*:]]1116// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[A]], <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>1117// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]1118//1119poly16x8_t test_vrev32q_p16(poly16x8_t a) {1120  return vrev32q_p16(a);1121}1122 1123// CHECK-LABEL: define dso_local <8 x i8> @test_vrev64_s8(1124// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1125// CHECK-NEXT:  [[ENTRY:.*:]]1126// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[A]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>1127// CHECK-NEXT:    ret <8 x i8> [[SHUFFLE_I]]1128//1129int8x8_t test_vrev64_s8(int8x8_t a) {1130  return vrev64_s8(a);1131}1132 1133// CHECK-LABEL: define dso_local <4 x i16> @test_vrev64_s16(1134// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1135// CHECK-NEXT:  [[ENTRY:.*:]]1136// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[A]], <4 x i32> <i32 3, i32 2, i32 1, i32 0>1137// CHECK-NEXT:    ret <4 x i16> [[SHUFFLE_I]]1138//1139int16x4_t test_vrev64_s16(int16x4_t a) {1140  return vrev64_s16(a);1141}1142 1143// CHECK-LABEL: define dso_local <2 x i32> @test_vrev64_s32(1144// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1145// CHECK-NEXT:  [[ENTRY:.*:]]1146// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[A]], <2 x i32> <i32 1, i32 0>1147// CHECK-NEXT:    ret <2 x i32> [[SHUFFLE_I]]1148//1149int32x2_t test_vrev64_s32(int32x2_t a) {1150  return vrev64_s32(a);1151}1152 1153// CHECK-LABEL: define dso_local <8 x i8> @test_vrev64_u8(1154// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1155// CHECK-NEXT:  [[ENTRY:.*:]]1156// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[A]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>1157// CHECK-NEXT:    ret <8 x i8> [[SHUFFLE_I]]1158//1159uint8x8_t test_vrev64_u8(uint8x8_t a) {1160  return vrev64_u8(a);1161}1162 1163// CHECK-LABEL: define dso_local <4 x i16> @test_vrev64_u16(1164// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1165// CHECK-NEXT:  [[ENTRY:.*:]]1166// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[A]], <4 x i32> <i32 3, i32 2, i32 1, i32 0>1167// CHECK-NEXT:    ret <4 x i16> [[SHUFFLE_I]]1168//1169uint16x4_t test_vrev64_u16(uint16x4_t a) {1170  return vrev64_u16(a);1171}1172 1173// CHECK-LABEL: define dso_local <2 x i32> @test_vrev64_u32(1174// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1175// CHECK-NEXT:  [[ENTRY:.*:]]1176// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[A]], <2 x i32> <i32 1, i32 0>1177// CHECK-NEXT:    ret <2 x i32> [[SHUFFLE_I]]1178//1179uint32x2_t test_vrev64_u32(uint32x2_t a) {1180  return vrev64_u32(a);1181}1182 1183// CHECK-LABEL: define dso_local <8 x i8> @test_vrev64_p8(1184// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1185// CHECK-NEXT:  [[ENTRY:.*:]]1186// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[A]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>1187// CHECK-NEXT:    ret <8 x i8> [[SHUFFLE_I]]1188//1189poly8x8_t test_vrev64_p8(poly8x8_t a) {1190  return vrev64_p8(a);1191}1192 1193// CHECK-LABEL: define dso_local <4 x i16> @test_vrev64_p16(1194// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1195// CHECK-NEXT:  [[ENTRY:.*:]]1196// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[A]], <4 x i32> <i32 3, i32 2, i32 1, i32 0>1197// CHECK-NEXT:    ret <4 x i16> [[SHUFFLE_I]]1198//1199poly16x4_t test_vrev64_p16(poly16x4_t a) {1200  return vrev64_p16(a);1201}1202 1203// CHECK-LABEL: define dso_local <2 x float> @test_vrev64_f32(1204// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {1205// CHECK-NEXT:  [[ENTRY:.*:]]1206// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x float> [[A]], <2 x float> [[A]], <2 x i32> <i32 1, i32 0>1207// CHECK-NEXT:    ret <2 x float> [[SHUFFLE_I]]1208//1209float32x2_t test_vrev64_f32(float32x2_t a) {1210  return vrev64_f32(a);1211}1212 1213// CHECK-LABEL: define dso_local <16 x i8> @test_vrev64q_s8(1214// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1215// CHECK-NEXT:  [[ENTRY:.*:]]1216// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>1217// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]1218//1219int8x16_t test_vrev64q_s8(int8x16_t a) {1220  return vrev64q_s8(a);1221}1222 1223// CHECK-LABEL: define dso_local <8 x i16> @test_vrev64q_s16(1224// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1225// CHECK-NEXT:  [[ENTRY:.*:]]1226// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[A]], <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1227// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]1228//1229int16x8_t test_vrev64q_s16(int16x8_t a) {1230  return vrev64q_s16(a);1231}1232 1233// CHECK-LABEL: define dso_local <4 x i32> @test_vrev64q_s32(1234// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1235// CHECK-NEXT:  [[ENTRY:.*:]]1236// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> [[A]], <4 x i32> [[A]], <4 x i32> <i32 1, i32 0, i32 3, i32 2>1237// CHECK-NEXT:    ret <4 x i32> [[SHUFFLE_I]]1238//1239int32x4_t test_vrev64q_s32(int32x4_t a) {1240  return vrev64q_s32(a);1241}1242 1243// CHECK-LABEL: define dso_local <16 x i8> @test_vrev64q_u8(1244// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1245// CHECK-NEXT:  [[ENTRY:.*:]]1246// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>1247// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]1248//1249uint8x16_t test_vrev64q_u8(uint8x16_t a) {1250  return vrev64q_u8(a);1251}1252 1253// CHECK-LABEL: define dso_local <8 x i16> @test_vrev64q_u16(1254// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1255// CHECK-NEXT:  [[ENTRY:.*:]]1256// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[A]], <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1257// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]1258//1259uint16x8_t test_vrev64q_u16(uint16x8_t a) {1260  return vrev64q_u16(a);1261}1262 1263// CHECK-LABEL: define dso_local <4 x i32> @test_vrev64q_u32(1264// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1265// CHECK-NEXT:  [[ENTRY:.*:]]1266// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> [[A]], <4 x i32> [[A]], <4 x i32> <i32 1, i32 0, i32 3, i32 2>1267// CHECK-NEXT:    ret <4 x i32> [[SHUFFLE_I]]1268//1269uint32x4_t test_vrev64q_u32(uint32x4_t a) {1270  return vrev64q_u32(a);1271}1272 1273// CHECK-LABEL: define dso_local <16 x i8> @test_vrev64q_p8(1274// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1275// CHECK-NEXT:  [[ENTRY:.*:]]1276// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>1277// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]1278//1279poly8x16_t test_vrev64q_p8(poly8x16_t a) {1280  return vrev64q_p8(a);1281}1282 1283// CHECK-LABEL: define dso_local <8 x i16> @test_vrev64q_p16(1284// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1285// CHECK-NEXT:  [[ENTRY:.*:]]1286// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[A]], <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1287// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]1288//1289poly16x8_t test_vrev64q_p16(poly16x8_t a) {1290  return vrev64q_p16(a);1291}1292 1293// CHECK-LABEL: define dso_local <4 x float> @test_vrev64q_f32(1294// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {1295// CHECK-NEXT:  [[ENTRY:.*:]]1296// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x float> [[A]], <4 x float> [[A]], <4 x i32> <i32 1, i32 0, i32 3, i32 2>1297// CHECK-NEXT:    ret <4 x float> [[SHUFFLE_I]]1298//1299float32x4_t test_vrev64q_f32(float32x4_t a) {1300  return vrev64q_f32(a);1301}1302 1303// CHECK-LABEL: define dso_local <4 x i16> @test_vpaddl_s8(1304// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1305// CHECK-NEXT:  [[ENTRY:.*:]]1306// CHECK-NEXT:    [[VPADDL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.saddlp.v4i16.v8i8(<8 x i8> [[A]])1307// CHECK-NEXT:    ret <4 x i16> [[VPADDL_I]]1308//1309int16x4_t test_vpaddl_s8(int8x8_t a) {1310  return vpaddl_s8(a);1311}1312 1313// CHECK-LABEL: define dso_local <2 x i32> @test_vpaddl_s16(1314// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1315// CHECK-NEXT:  [[ENTRY:.*:]]1316// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>1317// CHECK-NEXT:    [[VPADDL_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>1318// CHECK-NEXT:    [[VPADDL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.saddlp.v2i32.v4i16(<4 x i16> [[VPADDL_I]])1319// CHECK-NEXT:    ret <2 x i32> [[VPADDL1_I]]1320//1321int32x2_t test_vpaddl_s16(int16x4_t a) {1322  return vpaddl_s16(a);1323}1324 1325// CHECK-LABEL: define dso_local <1 x i64> @test_vpaddl_s32(1326// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1327// CHECK-NEXT:  [[ENTRY:.*:]]1328// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>1329// CHECK-NEXT:    [[VPADDL_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>1330// CHECK-NEXT:    [[VPADDL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.saddlp.v1i64.v2i32(<2 x i32> [[VPADDL_I]])1331// CHECK-NEXT:    ret <1 x i64> [[VPADDL1_I]]1332//1333int64x1_t test_vpaddl_s32(int32x2_t a) {1334  return vpaddl_s32(a);1335}1336 1337// CHECK-LABEL: define dso_local <4 x i16> @test_vpaddl_u8(1338// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1339// CHECK-NEXT:  [[ENTRY:.*:]]1340// CHECK-NEXT:    [[VPADDL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uaddlp.v4i16.v8i8(<8 x i8> [[A]])1341// CHECK-NEXT:    ret <4 x i16> [[VPADDL_I]]1342//1343uint16x4_t test_vpaddl_u8(uint8x8_t a) {1344  return vpaddl_u8(a);1345}1346 1347// CHECK-LABEL: define dso_local <2 x i32> @test_vpaddl_u16(1348// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1349// CHECK-NEXT:  [[ENTRY:.*:]]1350// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>1351// CHECK-NEXT:    [[VPADDL_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>1352// CHECK-NEXT:    [[VPADDL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uaddlp.v2i32.v4i16(<4 x i16> [[VPADDL_I]])1353// CHECK-NEXT:    ret <2 x i32> [[VPADDL1_I]]1354//1355uint32x2_t test_vpaddl_u16(uint16x4_t a) {1356  return vpaddl_u16(a);1357}1358 1359// CHECK-LABEL: define dso_local <1 x i64> @test_vpaddl_u32(1360// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1361// CHECK-NEXT:  [[ENTRY:.*:]]1362// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>1363// CHECK-NEXT:    [[VPADDL_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>1364// CHECK-NEXT:    [[VPADDL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.uaddlp.v1i64.v2i32(<2 x i32> [[VPADDL_I]])1365// CHECK-NEXT:    ret <1 x i64> [[VPADDL1_I]]1366//1367uint64x1_t test_vpaddl_u32(uint32x2_t a) {1368  return vpaddl_u32(a);1369}1370 1371// CHECK-LABEL: define dso_local <8 x i16> @test_vpaddlq_s8(1372// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1373// CHECK-NEXT:  [[ENTRY:.*:]]1374// CHECK-NEXT:    [[VPADDL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.saddlp.v8i16.v16i8(<16 x i8> [[A]])1375// CHECK-NEXT:    ret <8 x i16> [[VPADDL_I]]1376//1377int16x8_t test_vpaddlq_s8(int8x16_t a) {1378  return vpaddlq_s8(a);1379}1380 1381// CHECK-LABEL: define dso_local <4 x i32> @test_vpaddlq_s16(1382// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1383// CHECK-NEXT:  [[ENTRY:.*:]]1384// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>1385// CHECK-NEXT:    [[VPADDL_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>1386// CHECK-NEXT:    [[VPADDL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.saddlp.v4i32.v8i16(<8 x i16> [[VPADDL_I]])1387// CHECK-NEXT:    ret <4 x i32> [[VPADDL1_I]]1388//1389int32x4_t test_vpaddlq_s16(int16x8_t a) {1390  return vpaddlq_s16(a);1391}1392 1393// CHECK-LABEL: define dso_local <2 x i64> @test_vpaddlq_s32(1394// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1395// CHECK-NEXT:  [[ENTRY:.*:]]1396// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>1397// CHECK-NEXT:    [[VPADDL_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>1398// CHECK-NEXT:    [[VPADDL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.saddlp.v2i64.v4i32(<4 x i32> [[VPADDL_I]])1399// CHECK-NEXT:    ret <2 x i64> [[VPADDL1_I]]1400//1401int64x2_t test_vpaddlq_s32(int32x4_t a) {1402  return vpaddlq_s32(a);1403}1404 1405// CHECK-LABEL: define dso_local <8 x i16> @test_vpaddlq_u8(1406// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1407// CHECK-NEXT:  [[ENTRY:.*:]]1408// CHECK-NEXT:    [[VPADDL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> [[A]])1409// CHECK-NEXT:    ret <8 x i16> [[VPADDL_I]]1410//1411uint16x8_t test_vpaddlq_u8(uint8x16_t a) {1412  return vpaddlq_u8(a);1413}1414 1415// CHECK-LABEL: define dso_local <4 x i32> @test_vpaddlq_u16(1416// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1417// CHECK-NEXT:  [[ENTRY:.*:]]1418// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>1419// CHECK-NEXT:    [[VPADDL_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>1420// CHECK-NEXT:    [[VPADDL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> [[VPADDL_I]])1421// CHECK-NEXT:    ret <4 x i32> [[VPADDL1_I]]1422//1423uint32x4_t test_vpaddlq_u16(uint16x8_t a) {1424  return vpaddlq_u16(a);1425}1426 1427// CHECK-LABEL: define dso_local <2 x i64> @test_vpaddlq_u32(1428// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1429// CHECK-NEXT:  [[ENTRY:.*:]]1430// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>1431// CHECK-NEXT:    [[VPADDL_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>1432// CHECK-NEXT:    [[VPADDL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> [[VPADDL_I]])1433// CHECK-NEXT:    ret <2 x i64> [[VPADDL1_I]]1434//1435uint64x2_t test_vpaddlq_u32(uint32x4_t a) {1436  return vpaddlq_u32(a);1437}1438 1439// CHECK-LABEL: define dso_local <4 x i16> @test_vpadal_s8(1440// CHECK-SAME: <4 x i16> noundef [[A:%.*]], <8 x i8> noundef [[B:%.*]]) #[[ATTR0]] {1441// CHECK-NEXT:  [[ENTRY:.*:]]1442// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>1443// CHECK-NEXT:    [[VPADAL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.saddlp.v4i16.v8i8(<8 x i8> [[B]])1444// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>1445// CHECK-NEXT:    [[TMP2:%.*]] = add <4 x i16> [[VPADAL_I]], [[TMP1]]1446// CHECK-NEXT:    ret <4 x i16> [[TMP2]]1447//1448int16x4_t test_vpadal_s8(int16x4_t a, int8x8_t b) {1449  return vpadal_s8(a, b);1450}1451 1452// CHECK-LABEL: define dso_local <2 x i32> @test_vpadal_s16(1453// CHECK-SAME: <2 x i32> noundef [[A:%.*]], <4 x i16> noundef [[B:%.*]]) #[[ATTR0]] {1454// CHECK-NEXT:  [[ENTRY:.*:]]1455// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>1456// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[B]] to <8 x i8>1457// CHECK-NEXT:    [[VPADAL_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <4 x i16>1458// CHECK-NEXT:    [[VPADAL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.saddlp.v2i32.v4i16(<4 x i16> [[VPADAL_I]])1459// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>1460// CHECK-NEXT:    [[TMP3:%.*]] = add <2 x i32> [[VPADAL1_I]], [[TMP2]]1461// CHECK-NEXT:    ret <2 x i32> [[TMP3]]1462//1463int32x2_t test_vpadal_s16(int32x2_t a, int16x4_t b) {1464  return vpadal_s16(a, b);1465}1466 1467// CHECK-LABEL: define dso_local <1 x i64> @test_vpadal_s32(1468// CHECK-SAME: <1 x i64> noundef [[A:%.*]], <2 x i32> noundef [[B:%.*]]) #[[ATTR0]] {1469// CHECK-NEXT:  [[ENTRY:.*:]]1470// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>1471// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[B]] to <8 x i8>1472// CHECK-NEXT:    [[VPADAL_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x i32>1473// CHECK-NEXT:    [[VPADAL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.saddlp.v1i64.v2i32(<2 x i32> [[VPADAL_I]])1474// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>1475// CHECK-NEXT:    [[TMP3:%.*]] = add <1 x i64> [[VPADAL1_I]], [[TMP2]]1476// CHECK-NEXT:    ret <1 x i64> [[TMP3]]1477//1478int64x1_t test_vpadal_s32(int64x1_t a, int32x2_t b) {1479  return vpadal_s32(a, b);1480}1481 1482// CHECK-LABEL: define dso_local <4 x i16> @test_vpadal_u8(1483// CHECK-SAME: <4 x i16> noundef [[A:%.*]], <8 x i8> noundef [[B:%.*]]) #[[ATTR0]] {1484// CHECK-NEXT:  [[ENTRY:.*:]]1485// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>1486// CHECK-NEXT:    [[VPADAL_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uaddlp.v4i16.v8i8(<8 x i8> [[B]])1487// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>1488// CHECK-NEXT:    [[TMP2:%.*]] = add <4 x i16> [[VPADAL_I]], [[TMP1]]1489// CHECK-NEXT:    ret <4 x i16> [[TMP2]]1490//1491uint16x4_t test_vpadal_u8(uint16x4_t a, uint8x8_t b) {1492  return vpadal_u8(a, b);1493}1494 1495// CHECK-LABEL: define dso_local <2 x i32> @test_vpadal_u16(1496// CHECK-SAME: <2 x i32> noundef [[A:%.*]], <4 x i16> noundef [[B:%.*]]) #[[ATTR0]] {1497// CHECK-NEXT:  [[ENTRY:.*:]]1498// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>1499// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[B]] to <8 x i8>1500// CHECK-NEXT:    [[VPADAL_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <4 x i16>1501// CHECK-NEXT:    [[VPADAL1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uaddlp.v2i32.v4i16(<4 x i16> [[VPADAL_I]])1502// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>1503// CHECK-NEXT:    [[TMP3:%.*]] = add <2 x i32> [[VPADAL1_I]], [[TMP2]]1504// CHECK-NEXT:    ret <2 x i32> [[TMP3]]1505//1506uint32x2_t test_vpadal_u16(uint32x2_t a, uint16x4_t b) {1507  return vpadal_u16(a, b);1508}1509 1510// CHECK-LABEL: define dso_local <1 x i64> @test_vpadal_u32(1511// CHECK-SAME: <1 x i64> noundef [[A:%.*]], <2 x i32> noundef [[B:%.*]]) #[[ATTR0]] {1512// CHECK-NEXT:  [[ENTRY:.*:]]1513// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>1514// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[B]] to <8 x i8>1515// CHECK-NEXT:    [[VPADAL_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x i32>1516// CHECK-NEXT:    [[VPADAL1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.uaddlp.v1i64.v2i32(<2 x i32> [[VPADAL_I]])1517// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>1518// CHECK-NEXT:    [[TMP3:%.*]] = add <1 x i64> [[VPADAL1_I]], [[TMP2]]1519// CHECK-NEXT:    ret <1 x i64> [[TMP3]]1520//1521uint64x1_t test_vpadal_u32(uint64x1_t a, uint32x2_t b) {1522  return vpadal_u32(a, b);1523}1524 1525// CHECK-LABEL: define dso_local <8 x i16> @test_vpadalq_s8(1526// CHECK-SAME: <8 x i16> noundef [[A:%.*]], <16 x i8> noundef [[B:%.*]]) #[[ATTR0]] {1527// CHECK-NEXT:  [[ENTRY:.*:]]1528// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>1529// CHECK-NEXT:    [[VPADAL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.saddlp.v8i16.v16i8(<16 x i8> [[B]])1530// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>1531// CHECK-NEXT:    [[TMP2:%.*]] = add <8 x i16> [[VPADAL_I]], [[TMP1]]1532// CHECK-NEXT:    ret <8 x i16> [[TMP2]]1533//1534int16x8_t test_vpadalq_s8(int16x8_t a, int8x16_t b) {1535  return vpadalq_s8(a, b);1536}1537 1538// CHECK-LABEL: define dso_local <4 x i32> @test_vpadalq_s16(1539// CHECK-SAME: <4 x i32> noundef [[A:%.*]], <8 x i16> noundef [[B:%.*]]) #[[ATTR0]] {1540// CHECK-NEXT:  [[ENTRY:.*:]]1541// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>1542// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i16> [[B]] to <16 x i8>1543// CHECK-NEXT:    [[VPADAL_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <8 x i16>1544// CHECK-NEXT:    [[VPADAL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.saddlp.v4i32.v8i16(<8 x i16> [[VPADAL_I]])1545// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>1546// CHECK-NEXT:    [[TMP3:%.*]] = add <4 x i32> [[VPADAL1_I]], [[TMP2]]1547// CHECK-NEXT:    ret <4 x i32> [[TMP3]]1548//1549int32x4_t test_vpadalq_s16(int32x4_t a, int16x8_t b) {1550  return vpadalq_s16(a, b);1551}1552 1553// CHECK-LABEL: define dso_local <2 x i64> @test_vpadalq_s32(1554// CHECK-SAME: <2 x i64> noundef [[A:%.*]], <4 x i32> noundef [[B:%.*]]) #[[ATTR0]] {1555// CHECK-NEXT:  [[ENTRY:.*:]]1556// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>1557// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[B]] to <16 x i8>1558// CHECK-NEXT:    [[VPADAL_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x i32>1559// CHECK-NEXT:    [[VPADAL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.saddlp.v2i64.v4i32(<4 x i32> [[VPADAL_I]])1560// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>1561// CHECK-NEXT:    [[TMP3:%.*]] = add <2 x i64> [[VPADAL1_I]], [[TMP2]]1562// CHECK-NEXT:    ret <2 x i64> [[TMP3]]1563//1564int64x2_t test_vpadalq_s32(int64x2_t a, int32x4_t b) {1565  return vpadalq_s32(a, b);1566}1567 1568// CHECK-LABEL: define dso_local <8 x i16> @test_vpadalq_u8(1569// CHECK-SAME: <8 x i16> noundef [[A:%.*]], <16 x i8> noundef [[B:%.*]]) #[[ATTR0]] {1570// CHECK-NEXT:  [[ENTRY:.*:]]1571// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>1572// CHECK-NEXT:    [[VPADAL_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> [[B]])1573// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>1574// CHECK-NEXT:    [[TMP2:%.*]] = add <8 x i16> [[VPADAL_I]], [[TMP1]]1575// CHECK-NEXT:    ret <8 x i16> [[TMP2]]1576//1577uint16x8_t test_vpadalq_u8(uint16x8_t a, uint8x16_t b) {1578  return vpadalq_u8(a, b);1579}1580 1581// CHECK-LABEL: define dso_local <4 x i32> @test_vpadalq_u16(1582// CHECK-SAME: <4 x i32> noundef [[A:%.*]], <8 x i16> noundef [[B:%.*]]) #[[ATTR0]] {1583// CHECK-NEXT:  [[ENTRY:.*:]]1584// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>1585// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i16> [[B]] to <16 x i8>1586// CHECK-NEXT:    [[VPADAL_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <8 x i16>1587// CHECK-NEXT:    [[VPADAL1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> [[VPADAL_I]])1588// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>1589// CHECK-NEXT:    [[TMP3:%.*]] = add <4 x i32> [[VPADAL1_I]], [[TMP2]]1590// CHECK-NEXT:    ret <4 x i32> [[TMP3]]1591//1592uint32x4_t test_vpadalq_u16(uint32x4_t a, uint16x8_t b) {1593  return vpadalq_u16(a, b);1594}1595 1596// CHECK-LABEL: define dso_local <2 x i64> @test_vpadalq_u32(1597// CHECK-SAME: <2 x i64> noundef [[A:%.*]], <4 x i32> noundef [[B:%.*]]) #[[ATTR0]] {1598// CHECK-NEXT:  [[ENTRY:.*:]]1599// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>1600// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[B]] to <16 x i8>1601// CHECK-NEXT:    [[VPADAL_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x i32>1602// CHECK-NEXT:    [[VPADAL1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> [[VPADAL_I]])1603// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>1604// CHECK-NEXT:    [[TMP3:%.*]] = add <2 x i64> [[VPADAL1_I]], [[TMP2]]1605// CHECK-NEXT:    ret <2 x i64> [[TMP3]]1606//1607uint64x2_t test_vpadalq_u32(uint64x2_t a, uint32x4_t b) {1608  return vpadalq_u32(a, b);1609}1610 1611// CHECK-LABEL: define dso_local <8 x i8> @test_vqabs_s8(1612// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1613// CHECK-NEXT:  [[ENTRY:.*:]]1614// CHECK-NEXT:    [[VQABS_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqabs.v8i8(<8 x i8> [[A]])1615// CHECK-NEXT:    ret <8 x i8> [[VQABS_V_I]]1616//1617int8x8_t test_vqabs_s8(int8x8_t a) {1618  return vqabs_s8(a);1619}1620 1621// CHECK-LABEL: define dso_local <16 x i8> @test_vqabsq_s8(1622// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1623// CHECK-NEXT:  [[ENTRY:.*:]]1624// CHECK-NEXT:    [[VQABSQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqabs.v16i8(<16 x i8> [[A]])1625// CHECK-NEXT:    ret <16 x i8> [[VQABSQ_V_I]]1626//1627int8x16_t test_vqabsq_s8(int8x16_t a) {1628  return vqabsq_s8(a);1629}1630 1631// CHECK-LABEL: define dso_local <4 x i16> @test_vqabs_s16(1632// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1633// CHECK-NEXT:  [[ENTRY:.*:]]1634// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>1635// CHECK-NEXT:    [[VQABS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>1636// CHECK-NEXT:    [[VQABS_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqabs.v4i16(<4 x i16> [[VQABS_V_I]])1637// CHECK-NEXT:    [[VQABS_V2_I:%.*]] = bitcast <4 x i16> [[VQABS_V1_I]] to <8 x i8>1638// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQABS_V2_I]] to <4 x i16>1639// CHECK-NEXT:    ret <4 x i16> [[TMP1]]1640//1641int16x4_t test_vqabs_s16(int16x4_t a) {1642  return vqabs_s16(a);1643}1644 1645// CHECK-LABEL: define dso_local <8 x i16> @test_vqabsq_s16(1646// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1647// CHECK-NEXT:  [[ENTRY:.*:]]1648// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>1649// CHECK-NEXT:    [[VQABSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>1650// CHECK-NEXT:    [[VQABSQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqabs.v8i16(<8 x i16> [[VQABSQ_V_I]])1651// CHECK-NEXT:    [[VQABSQ_V2_I:%.*]] = bitcast <8 x i16> [[VQABSQ_V1_I]] to <16 x i8>1652// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VQABSQ_V2_I]] to <8 x i16>1653// CHECK-NEXT:    ret <8 x i16> [[TMP1]]1654//1655int16x8_t test_vqabsq_s16(int16x8_t a) {1656  return vqabsq_s16(a);1657}1658 1659// CHECK-LABEL: define dso_local <2 x i32> @test_vqabs_s32(1660// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1661// CHECK-NEXT:  [[ENTRY:.*:]]1662// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>1663// CHECK-NEXT:    [[VQABS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>1664// CHECK-NEXT:    [[VQABS_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqabs.v2i32(<2 x i32> [[VQABS_V_I]])1665// CHECK-NEXT:    [[VQABS_V2_I:%.*]] = bitcast <2 x i32> [[VQABS_V1_I]] to <8 x i8>1666// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQABS_V2_I]] to <2 x i32>1667// CHECK-NEXT:    ret <2 x i32> [[TMP1]]1668//1669int32x2_t test_vqabs_s32(int32x2_t a) {1670  return vqabs_s32(a);1671}1672 1673// CHECK-LABEL: define dso_local <4 x i32> @test_vqabsq_s32(1674// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1675// CHECK-NEXT:  [[ENTRY:.*:]]1676// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>1677// CHECK-NEXT:    [[VQABSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>1678// CHECK-NEXT:    [[VQABSQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqabs.v4i32(<4 x i32> [[VQABSQ_V_I]])1679// CHECK-NEXT:    [[VQABSQ_V2_I:%.*]] = bitcast <4 x i32> [[VQABSQ_V1_I]] to <16 x i8>1680// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VQABSQ_V2_I]] to <4 x i32>1681// CHECK-NEXT:    ret <4 x i32> [[TMP1]]1682//1683int32x4_t test_vqabsq_s32(int32x4_t a) {1684  return vqabsq_s32(a);1685}1686 1687// CHECK-LABEL: define dso_local <2 x i64> @test_vqabsq_s64(1688// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {1689// CHECK-NEXT:  [[ENTRY:.*:]]1690// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>1691// CHECK-NEXT:    [[VQABSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>1692// CHECK-NEXT:    [[VQABSQ_V1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqabs.v2i64(<2 x i64> [[VQABSQ_V_I]])1693// CHECK-NEXT:    [[VQABSQ_V2_I:%.*]] = bitcast <2 x i64> [[VQABSQ_V1_I]] to <16 x i8>1694// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VQABSQ_V2_I]] to <2 x i64>1695// CHECK-NEXT:    ret <2 x i64> [[TMP1]]1696//1697int64x2_t test_vqabsq_s64(int64x2_t a) {1698  return vqabsq_s64(a);1699}1700 1701// CHECK-LABEL: define dso_local <8 x i8> @test_vqneg_s8(1702// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1703// CHECK-NEXT:  [[ENTRY:.*:]]1704// CHECK-NEXT:    [[VQNEG_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqneg.v8i8(<8 x i8> [[A]])1705// CHECK-NEXT:    ret <8 x i8> [[VQNEG_V_I]]1706//1707int8x8_t test_vqneg_s8(int8x8_t a) {1708  return vqneg_s8(a);1709}1710 1711// CHECK-LABEL: define dso_local <16 x i8> @test_vqnegq_s8(1712// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1713// CHECK-NEXT:  [[ENTRY:.*:]]1714// CHECK-NEXT:    [[VQNEGQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqneg.v16i8(<16 x i8> [[A]])1715// CHECK-NEXT:    ret <16 x i8> [[VQNEGQ_V_I]]1716//1717int8x16_t test_vqnegq_s8(int8x16_t a) {1718  return vqnegq_s8(a);1719}1720 1721// CHECK-LABEL: define dso_local <4 x i16> @test_vqneg_s16(1722// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1723// CHECK-NEXT:  [[ENTRY:.*:]]1724// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>1725// CHECK-NEXT:    [[VQNEG_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>1726// CHECK-NEXT:    [[VQNEG_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqneg.v4i16(<4 x i16> [[VQNEG_V_I]])1727// CHECK-NEXT:    [[VQNEG_V2_I:%.*]] = bitcast <4 x i16> [[VQNEG_V1_I]] to <8 x i8>1728// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQNEG_V2_I]] to <4 x i16>1729// CHECK-NEXT:    ret <4 x i16> [[TMP1]]1730//1731int16x4_t test_vqneg_s16(int16x4_t a) {1732  return vqneg_s16(a);1733}1734 1735// CHECK-LABEL: define dso_local <8 x i16> @test_vqnegq_s16(1736// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1737// CHECK-NEXT:  [[ENTRY:.*:]]1738// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>1739// CHECK-NEXT:    [[VQNEGQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>1740// CHECK-NEXT:    [[VQNEGQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqneg.v8i16(<8 x i16> [[VQNEGQ_V_I]])1741// CHECK-NEXT:    [[VQNEGQ_V2_I:%.*]] = bitcast <8 x i16> [[VQNEGQ_V1_I]] to <16 x i8>1742// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VQNEGQ_V2_I]] to <8 x i16>1743// CHECK-NEXT:    ret <8 x i16> [[TMP1]]1744//1745int16x8_t test_vqnegq_s16(int16x8_t a) {1746  return vqnegq_s16(a);1747}1748 1749// CHECK-LABEL: define dso_local <2 x i32> @test_vqneg_s32(1750// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1751// CHECK-NEXT:  [[ENTRY:.*:]]1752// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>1753// CHECK-NEXT:    [[VQNEG_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>1754// CHECK-NEXT:    [[VQNEG_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqneg.v2i32(<2 x i32> [[VQNEG_V_I]])1755// CHECK-NEXT:    [[VQNEG_V2_I:%.*]] = bitcast <2 x i32> [[VQNEG_V1_I]] to <8 x i8>1756// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQNEG_V2_I]] to <2 x i32>1757// CHECK-NEXT:    ret <2 x i32> [[TMP1]]1758//1759int32x2_t test_vqneg_s32(int32x2_t a) {1760  return vqneg_s32(a);1761}1762 1763// CHECK-LABEL: define dso_local <4 x i32> @test_vqnegq_s32(1764// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1765// CHECK-NEXT:  [[ENTRY:.*:]]1766// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>1767// CHECK-NEXT:    [[VQNEGQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>1768// CHECK-NEXT:    [[VQNEGQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqneg.v4i32(<4 x i32> [[VQNEGQ_V_I]])1769// CHECK-NEXT:    [[VQNEGQ_V2_I:%.*]] = bitcast <4 x i32> [[VQNEGQ_V1_I]] to <16 x i8>1770// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VQNEGQ_V2_I]] to <4 x i32>1771// CHECK-NEXT:    ret <4 x i32> [[TMP1]]1772//1773int32x4_t test_vqnegq_s32(int32x4_t a) {1774  return vqnegq_s32(a);1775}1776 1777// CHECK-LABEL: define dso_local <2 x i64> @test_vqnegq_s64(1778// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {1779// CHECK-NEXT:  [[ENTRY:.*:]]1780// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>1781// CHECK-NEXT:    [[VQNEGQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>1782// CHECK-NEXT:    [[VQNEGQ_V1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqneg.v2i64(<2 x i64> [[VQNEGQ_V_I]])1783// CHECK-NEXT:    [[VQNEGQ_V2_I:%.*]] = bitcast <2 x i64> [[VQNEGQ_V1_I]] to <16 x i8>1784// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VQNEGQ_V2_I]] to <2 x i64>1785// CHECK-NEXT:    ret <2 x i64> [[TMP1]]1786//1787int64x2_t test_vqnegq_s64(int64x2_t a) {1788  return vqnegq_s64(a);1789}1790 1791// CHECK-LABEL: define dso_local <8 x i8> @test_vneg_s8(1792// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1793// CHECK-NEXT:  [[ENTRY:.*:]]1794// CHECK-NEXT:    [[SUB_I:%.*]] = sub <8 x i8> zeroinitializer, [[A]]1795// CHECK-NEXT:    ret <8 x i8> [[SUB_I]]1796//1797int8x8_t test_vneg_s8(int8x8_t a) {1798  return vneg_s8(a);1799}1800 1801// CHECK-LABEL: define dso_local <16 x i8> @test_vnegq_s8(1802// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1803// CHECK-NEXT:  [[ENTRY:.*:]]1804// CHECK-NEXT:    [[SUB_I:%.*]] = sub <16 x i8> zeroinitializer, [[A]]1805// CHECK-NEXT:    ret <16 x i8> [[SUB_I]]1806//1807int8x16_t test_vnegq_s8(int8x16_t a) {1808  return vnegq_s8(a);1809}1810 1811// CHECK-LABEL: define dso_local <4 x i16> @test_vneg_s16(1812// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1813// CHECK-NEXT:  [[ENTRY:.*:]]1814// CHECK-NEXT:    [[SUB_I:%.*]] = sub <4 x i16> zeroinitializer, [[A]]1815// CHECK-NEXT:    ret <4 x i16> [[SUB_I]]1816//1817int16x4_t test_vneg_s16(int16x4_t a) {1818  return vneg_s16(a);1819}1820 1821// CHECK-LABEL: define dso_local <8 x i16> @test_vnegq_s16(1822// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1823// CHECK-NEXT:  [[ENTRY:.*:]]1824// CHECK-NEXT:    [[SUB_I:%.*]] = sub <8 x i16> zeroinitializer, [[A]]1825// CHECK-NEXT:    ret <8 x i16> [[SUB_I]]1826//1827int16x8_t test_vnegq_s16(int16x8_t a) {1828  return vnegq_s16(a);1829}1830 1831// CHECK-LABEL: define dso_local <2 x i32> @test_vneg_s32(1832// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1833// CHECK-NEXT:  [[ENTRY:.*:]]1834// CHECK-NEXT:    [[SUB_I:%.*]] = sub <2 x i32> zeroinitializer, [[A]]1835// CHECK-NEXT:    ret <2 x i32> [[SUB_I]]1836//1837int32x2_t test_vneg_s32(int32x2_t a) {1838  return vneg_s32(a);1839}1840 1841// CHECK-LABEL: define dso_local <4 x i32> @test_vnegq_s32(1842// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1843// CHECK-NEXT:  [[ENTRY:.*:]]1844// CHECK-NEXT:    [[SUB_I:%.*]] = sub <4 x i32> zeroinitializer, [[A]]1845// CHECK-NEXT:    ret <4 x i32> [[SUB_I]]1846//1847int32x4_t test_vnegq_s32(int32x4_t a) {1848  return vnegq_s32(a);1849}1850 1851// CHECK-LABEL: define dso_local <2 x i64> @test_vnegq_s64(1852// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {1853// CHECK-NEXT:  [[ENTRY:.*:]]1854// CHECK-NEXT:    [[SUB_I:%.*]] = sub <2 x i64> zeroinitializer, [[A]]1855// CHECK-NEXT:    ret <2 x i64> [[SUB_I]]1856//1857int64x2_t test_vnegq_s64(int64x2_t a) {1858  return vnegq_s64(a);1859}1860 1861// CHECK-LABEL: define dso_local <2 x float> @test_vneg_f32(1862// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {1863// CHECK-NEXT:  [[ENTRY:.*:]]1864// CHECK-NEXT:    [[FNEG_I:%.*]] = fneg <2 x float> [[A]]1865// CHECK-NEXT:    ret <2 x float> [[FNEG_I]]1866//1867float32x2_t test_vneg_f32(float32x2_t a) {1868  return vneg_f32(a);1869}1870 1871// CHECK-LABEL: define dso_local <4 x float> @test_vnegq_f32(1872// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {1873// CHECK-NEXT:  [[ENTRY:.*:]]1874// CHECK-NEXT:    [[FNEG_I:%.*]] = fneg <4 x float> [[A]]1875// CHECK-NEXT:    ret <4 x float> [[FNEG_I]]1876//1877float32x4_t test_vnegq_f32(float32x4_t a) {1878  return vnegq_f32(a);1879}1880 1881// CHECK-LABEL: define dso_local <2 x double> @test_vnegq_f64(1882// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {1883// CHECK-NEXT:  [[ENTRY:.*:]]1884// CHECK-NEXT:    [[FNEG_I:%.*]] = fneg <2 x double> [[A]]1885// CHECK-NEXT:    ret <2 x double> [[FNEG_I]]1886//1887float64x2_t test_vnegq_f64(float64x2_t a) {1888  return vnegq_f64(a);1889}1890 1891// CHECK-LABEL: define dso_local <8 x i8> @test_vabs_s8(1892// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1893// CHECK-NEXT:  [[ENTRY:.*:]]1894// CHECK-NEXT:    [[VABS_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.abs.v8i8(<8 x i8> [[A]])1895// CHECK-NEXT:    ret <8 x i8> [[VABS_I]]1896//1897int8x8_t test_vabs_s8(int8x8_t a) {1898  return vabs_s8(a);1899}1900 1901// CHECK-LABEL: define dso_local <16 x i8> @test_vabsq_s8(1902// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {1903// CHECK-NEXT:  [[ENTRY:.*:]]1904// CHECK-NEXT:    [[VABS_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.abs.v16i8(<16 x i8> [[A]])1905// CHECK-NEXT:    ret <16 x i8> [[VABS_I]]1906//1907int8x16_t test_vabsq_s8(int8x16_t a) {1908  return vabsq_s8(a);1909}1910 1911// CHECK-LABEL: define dso_local <4 x i16> @test_vabs_s16(1912// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1913// CHECK-NEXT:  [[ENTRY:.*:]]1914// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>1915// CHECK-NEXT:    [[VABS_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>1916// CHECK-NEXT:    [[VABS1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.abs.v4i16(<4 x i16> [[VABS_I]])1917// CHECK-NEXT:    ret <4 x i16> [[VABS1_I]]1918//1919int16x4_t test_vabs_s16(int16x4_t a) {1920  return vabs_s16(a);1921}1922 1923// CHECK-LABEL: define dso_local <8 x i16> @test_vabsq_s16(1924// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {1925// CHECK-NEXT:  [[ENTRY:.*:]]1926// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>1927// CHECK-NEXT:    [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>1928// CHECK-NEXT:    [[VABS1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.abs.v8i16(<8 x i16> [[VABS_I]])1929// CHECK-NEXT:    ret <8 x i16> [[VABS1_I]]1930//1931int16x8_t test_vabsq_s16(int16x8_t a) {1932  return vabsq_s16(a);1933}1934 1935// CHECK-LABEL: define dso_local <2 x i32> @test_vabs_s32(1936// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1937// CHECK-NEXT:  [[ENTRY:.*:]]1938// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>1939// CHECK-NEXT:    [[VABS_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>1940// CHECK-NEXT:    [[VABS1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.abs.v2i32(<2 x i32> [[VABS_I]])1941// CHECK-NEXT:    ret <2 x i32> [[VABS1_I]]1942//1943int32x2_t test_vabs_s32(int32x2_t a) {1944  return vabs_s32(a);1945}1946 1947// CHECK-LABEL: define dso_local <4 x i32> @test_vabsq_s32(1948// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {1949// CHECK-NEXT:  [[ENTRY:.*:]]1950// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>1951// CHECK-NEXT:    [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>1952// CHECK-NEXT:    [[VABS1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.abs.v4i32(<4 x i32> [[VABS_I]])1953// CHECK-NEXT:    ret <4 x i32> [[VABS1_I]]1954//1955int32x4_t test_vabsq_s32(int32x4_t a) {1956  return vabsq_s32(a);1957}1958 1959// CHECK-LABEL: define dso_local <2 x i64> @test_vabsq_s64(1960// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {1961// CHECK-NEXT:  [[ENTRY:.*:]]1962// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>1963// CHECK-NEXT:    [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>1964// CHECK-NEXT:    [[VABS1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.abs.v2i64(<2 x i64> [[VABS_I]])1965// CHECK-NEXT:    ret <2 x i64> [[VABS1_I]]1966//1967int64x2_t test_vabsq_s64(int64x2_t a) {1968  return vabsq_s64(a);1969}1970 1971// CHECK-LABEL: define dso_local <2 x float> @test_vabs_f32(1972// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {1973// CHECK-NEXT:  [[ENTRY:.*:]]1974// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>1975// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>1976// CHECK-NEXT:    [[VABS_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>1977// CHECK-NEXT:    [[VABS1_I:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> [[VABS_I]])1978// CHECK-NEXT:    ret <2 x float> [[VABS1_I]]1979//1980float32x2_t test_vabs_f32(float32x2_t a) {1981  return vabs_f32(a);1982}1983 1984// CHECK-LABEL: define dso_local <4 x float> @test_vabsq_f32(1985// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {1986// CHECK-NEXT:  [[ENTRY:.*:]]1987// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>1988// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>1989// CHECK-NEXT:    [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>1990// CHECK-NEXT:    [[VABS1_I:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[VABS_I]])1991// CHECK-NEXT:    ret <4 x float> [[VABS1_I]]1992//1993float32x4_t test_vabsq_f32(float32x4_t a) {1994  return vabsq_f32(a);1995}1996 1997// CHECK-LABEL: define dso_local <2 x double> @test_vabsq_f64(1998// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {1999// CHECK-NEXT:  [[ENTRY:.*:]]2000// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>2001// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>2002// CHECK-NEXT:    [[VABS_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>2003// CHECK-NEXT:    [[VABS1_I:%.*]] = call <2 x double> @llvm.fabs.v2f64(<2 x double> [[VABS_I]])2004// CHECK-NEXT:    ret <2 x double> [[VABS1_I]]2005//2006float64x2_t test_vabsq_f64(float64x2_t a) {2007  return vabsq_f64(a);2008}2009 2010// CHECK-LABEL: define dso_local <8 x i8> @test_vuqadd_s8(2011// CHECK-SAME: <8 x i8> noundef [[A:%.*]], <8 x i8> noundef [[B:%.*]]) #[[ATTR0]] {2012// CHECK-NEXT:  [[ENTRY:.*:]]2013// CHECK-NEXT:    [[VUQADD_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.suqadd.v8i8(<8 x i8> [[A]], <8 x i8> [[B]])2014// CHECK-NEXT:    ret <8 x i8> [[VUQADD_I]]2015//2016int8x8_t test_vuqadd_s8(int8x8_t a, int8x8_t b) {2017  return vuqadd_s8(a, b);2018}2019 2020// CHECK-LABEL: define dso_local <16 x i8> @test_vuqaddq_s8(2021// CHECK-SAME: <16 x i8> noundef [[A:%.*]], <16 x i8> noundef [[B:%.*]]) #[[ATTR0]] {2022// CHECK-NEXT:  [[ENTRY:.*:]]2023// CHECK-NEXT:    [[VUQADD_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.suqadd.v16i8(<16 x i8> [[A]], <16 x i8> [[B]])2024// CHECK-NEXT:    ret <16 x i8> [[VUQADD_I]]2025//2026int8x16_t test_vuqaddq_s8(int8x16_t a, int8x16_t b) {2027  return vuqaddq_s8(a, b);2028}2029 2030// CHECK-LABEL: define dso_local <4 x i16> @test_vuqadd_s16(2031// CHECK-SAME: <4 x i16> noundef [[A:%.*]], <4 x i16> noundef [[B:%.*]]) #[[ATTR0]] {2032// CHECK-NEXT:  [[ENTRY:.*:]]2033// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>2034// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[B]] to <8 x i8>2035// CHECK-NEXT:    [[VUQADD_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>2036// CHECK-NEXT:    [[VUQADD1_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <4 x i16>2037// CHECK-NEXT:    [[VUQADD2_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.suqadd.v4i16(<4 x i16> [[VUQADD_I]], <4 x i16> [[VUQADD1_I]])2038// CHECK-NEXT:    ret <4 x i16> [[VUQADD2_I]]2039//2040int16x4_t test_vuqadd_s16(int16x4_t a, int16x4_t b) {2041  return vuqadd_s16(a, b);2042}2043 2044// CHECK-LABEL: define dso_local <8 x i16> @test_vuqaddq_s16(2045// CHECK-SAME: <8 x i16> noundef [[A:%.*]], <8 x i16> noundef [[B:%.*]]) #[[ATTR0]] {2046// CHECK-NEXT:  [[ENTRY:.*:]]2047// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2048// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i16> [[B]] to <16 x i8>2049// CHECK-NEXT:    [[VUQADD_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2050// CHECK-NEXT:    [[VUQADD1_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <8 x i16>2051// CHECK-NEXT:    [[VUQADD2_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.suqadd.v8i16(<8 x i16> [[VUQADD_I]], <8 x i16> [[VUQADD1_I]])2052// CHECK-NEXT:    ret <8 x i16> [[VUQADD2_I]]2053//2054int16x8_t test_vuqaddq_s16(int16x8_t a, int16x8_t b) {2055  return vuqaddq_s16(a, b);2056}2057 2058// CHECK-LABEL: define dso_local <2 x i32> @test_vuqadd_s32(2059// CHECK-SAME: <2 x i32> noundef [[A:%.*]], <2 x i32> noundef [[B:%.*]]) #[[ATTR0]] {2060// CHECK-NEXT:  [[ENTRY:.*:]]2061// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>2062// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[B]] to <8 x i8>2063// CHECK-NEXT:    [[VUQADD_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>2064// CHECK-NEXT:    [[VUQADD1_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x i32>2065// CHECK-NEXT:    [[VUQADD2_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.suqadd.v2i32(<2 x i32> [[VUQADD_I]], <2 x i32> [[VUQADD1_I]])2066// CHECK-NEXT:    ret <2 x i32> [[VUQADD2_I]]2067//2068int32x2_t test_vuqadd_s32(int32x2_t a, int32x2_t b) {2069  return vuqadd_s32(a, b);2070}2071 2072// CHECK-LABEL: define dso_local <4 x i32> @test_vuqaddq_s32(2073// CHECK-SAME: <4 x i32> noundef [[A:%.*]], <4 x i32> noundef [[B:%.*]]) #[[ATTR0]] {2074// CHECK-NEXT:  [[ENTRY:.*:]]2075// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2076// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[B]] to <16 x i8>2077// CHECK-NEXT:    [[VUQADD_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2078// CHECK-NEXT:    [[VUQADD1_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x i32>2079// CHECK-NEXT:    [[VUQADD2_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.suqadd.v4i32(<4 x i32> [[VUQADD_I]], <4 x i32> [[VUQADD1_I]])2080// CHECK-NEXT:    ret <4 x i32> [[VUQADD2_I]]2081//2082int32x4_t test_vuqaddq_s32(int32x4_t a, int32x4_t b) {2083  return vuqaddq_s32(a, b);2084}2085 2086// CHECK-LABEL: define dso_local <2 x i64> @test_vuqaddq_s64(2087// CHECK-SAME: <2 x i64> noundef [[A:%.*]], <2 x i64> noundef [[B:%.*]]) #[[ATTR0]] {2088// CHECK-NEXT:  [[ENTRY:.*:]]2089// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>2090// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[B]] to <16 x i8>2091// CHECK-NEXT:    [[VUQADD_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>2092// CHECK-NEXT:    [[VUQADD1_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x i64>2093// CHECK-NEXT:    [[VUQADD2_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.suqadd.v2i64(<2 x i64> [[VUQADD_I]], <2 x i64> [[VUQADD1_I]])2094// CHECK-NEXT:    ret <2 x i64> [[VUQADD2_I]]2095//2096int64x2_t test_vuqaddq_s64(int64x2_t a, int64x2_t b) {2097  return vuqaddq_s64(a, b);2098}2099 2100// CHECK-LABEL: define dso_local <8 x i8> @test_vcls_s8(2101// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2102// CHECK-NEXT:  [[ENTRY:.*:]]2103// CHECK-NEXT:    [[VCLS_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.cls.v8i8(<8 x i8> [[A]])2104// CHECK-NEXT:    ret <8 x i8> [[VCLS_V_I]]2105//2106int8x8_t test_vcls_s8(int8x8_t a) {2107  return vcls_s8(a);2108}2109 2110// CHECK-LABEL: define dso_local <8 x i8> @test_vcls_u8(2111// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2112// CHECK-NEXT:  [[ENTRY:.*:]]2113// CHECK-NEXT:    [[VCLS_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.cls.v8i8(<8 x i8> [[A]])2114// CHECK-NEXT:    ret <8 x i8> [[VCLS_V_I]]2115//2116int8x8_t test_vcls_u8(uint8x8_t a) {2117  return vcls_u8(a);2118}2119 2120// CHECK-LABEL: define dso_local <16 x i8> @test_vclsq_s8(2121// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2122// CHECK-NEXT:  [[ENTRY:.*:]]2123// CHECK-NEXT:    [[VCLSQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.cls.v16i8(<16 x i8> [[A]])2124// CHECK-NEXT:    ret <16 x i8> [[VCLSQ_V_I]]2125//2126int8x16_t test_vclsq_s8(int8x16_t a) {2127  return vclsq_s8(a);2128}2129 2130// CHECK-LABEL: define dso_local <16 x i8> @test_vclsq_u8(2131// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2132// CHECK-NEXT:  [[ENTRY:.*:]]2133// CHECK-NEXT:    [[VCLSQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.cls.v16i8(<16 x i8> [[A]])2134// CHECK-NEXT:    ret <16 x i8> [[VCLSQ_V_I]]2135//2136int8x16_t test_vclsq_u8(uint8x16_t a) {2137  return vclsq_u8(a);2138}2139 2140// CHECK-LABEL: define dso_local <4 x i16> @test_vcls_s16(2141// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2142// CHECK-NEXT:  [[ENTRY:.*:]]2143// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>2144// CHECK-NEXT:    [[VCLS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>2145// CHECK-NEXT:    [[VCLS_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.cls.v4i16(<4 x i16> [[VCLS_V_I]])2146// CHECK-NEXT:    [[VCLS_V2_I:%.*]] = bitcast <4 x i16> [[VCLS_V1_I]] to <8 x i8>2147// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VCLS_V2_I]] to <4 x i16>2148// CHECK-NEXT:    ret <4 x i16> [[TMP1]]2149//2150int16x4_t test_vcls_s16(int16x4_t a) {2151  return vcls_s16(a);2152}2153 2154// CHECK-LABEL: define dso_local <4 x i16> @test_vcls_u16(2155// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2156// CHECK-NEXT:  [[ENTRY:.*:]]2157// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>2158// CHECK-NEXT:    [[VCLS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>2159// CHECK-NEXT:    [[VCLS_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.cls.v4i16(<4 x i16> [[VCLS_V_I]])2160// CHECK-NEXT:    [[VCLS_V2_I:%.*]] = bitcast <4 x i16> [[VCLS_V1_I]] to <8 x i8>2161// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VCLS_V2_I]] to <4 x i16>2162// CHECK-NEXT:    ret <4 x i16> [[TMP1]]2163//2164int16x4_t test_vcls_u16(uint16x4_t a) {2165  return vcls_u16(a);2166}2167 2168// CHECK-LABEL: define dso_local <8 x i16> @test_vclsq_s16(2169// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2170// CHECK-NEXT:  [[ENTRY:.*:]]2171// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2172// CHECK-NEXT:    [[VCLSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2173// CHECK-NEXT:    [[VCLSQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.cls.v8i16(<8 x i16> [[VCLSQ_V_I]])2174// CHECK-NEXT:    [[VCLSQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLSQ_V1_I]] to <16 x i8>2175// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VCLSQ_V2_I]] to <8 x i16>2176// CHECK-NEXT:    ret <8 x i16> [[TMP1]]2177//2178int16x8_t test_vclsq_s16(int16x8_t a) {2179  return vclsq_s16(a);2180}2181 2182// CHECK-LABEL: define dso_local <8 x i16> @test_vclsq_u16(2183// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2184// CHECK-NEXT:  [[ENTRY:.*:]]2185// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2186// CHECK-NEXT:    [[VCLSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2187// CHECK-NEXT:    [[VCLSQ_V1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.cls.v8i16(<8 x i16> [[VCLSQ_V_I]])2188// CHECK-NEXT:    [[VCLSQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLSQ_V1_I]] to <16 x i8>2189// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VCLSQ_V2_I]] to <8 x i16>2190// CHECK-NEXT:    ret <8 x i16> [[TMP1]]2191//2192int16x8_t test_vclsq_u16(uint16x8_t a) {2193  return vclsq_u16(a);2194}2195 2196// CHECK-LABEL: define dso_local <2 x i32> @test_vcls_s32(2197// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2198// CHECK-NEXT:  [[ENTRY:.*:]]2199// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>2200// CHECK-NEXT:    [[VCLS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>2201// CHECK-NEXT:    [[VCLS_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.cls.v2i32(<2 x i32> [[VCLS_V_I]])2202// CHECK-NEXT:    [[VCLS_V2_I:%.*]] = bitcast <2 x i32> [[VCLS_V1_I]] to <8 x i8>2203// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VCLS_V2_I]] to <2 x i32>2204// CHECK-NEXT:    ret <2 x i32> [[TMP1]]2205//2206int32x2_t test_vcls_s32(int32x2_t a) {2207  return vcls_s32(a);2208}2209 2210// CHECK-LABEL: define dso_local <2 x i32> @test_vcls_u32(2211// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2212// CHECK-NEXT:  [[ENTRY:.*:]]2213// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>2214// CHECK-NEXT:    [[VCLS_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>2215// CHECK-NEXT:    [[VCLS_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.cls.v2i32(<2 x i32> [[VCLS_V_I]])2216// CHECK-NEXT:    [[VCLS_V2_I:%.*]] = bitcast <2 x i32> [[VCLS_V1_I]] to <8 x i8>2217// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VCLS_V2_I]] to <2 x i32>2218// CHECK-NEXT:    ret <2 x i32> [[TMP1]]2219//2220int32x2_t test_vcls_u32(uint32x2_t a) {2221  return vcls_u32(a);2222}2223 2224// CHECK-LABEL: define dso_local <4 x i32> @test_vclsq_s32(2225// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2226// CHECK-NEXT:  [[ENTRY:.*:]]2227// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2228// CHECK-NEXT:    [[VCLSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2229// CHECK-NEXT:    [[VCLSQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.cls.v4i32(<4 x i32> [[VCLSQ_V_I]])2230// CHECK-NEXT:    [[VCLSQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLSQ_V1_I]] to <16 x i8>2231// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VCLSQ_V2_I]] to <4 x i32>2232// CHECK-NEXT:    ret <4 x i32> [[TMP1]]2233//2234int32x4_t test_vclsq_s32(int32x4_t a) {2235  return vclsq_s32(a);2236}2237 2238// CHECK-LABEL: define dso_local <4 x i32> @test_vclsq_u32(2239// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2240// CHECK-NEXT:  [[ENTRY:.*:]]2241// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2242// CHECK-NEXT:    [[VCLSQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2243// CHECK-NEXT:    [[VCLSQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.cls.v4i32(<4 x i32> [[VCLSQ_V_I]])2244// CHECK-NEXT:    [[VCLSQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLSQ_V1_I]] to <16 x i8>2245// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VCLSQ_V2_I]] to <4 x i32>2246// CHECK-NEXT:    ret <4 x i32> [[TMP1]]2247//2248int32x4_t test_vclsq_u32(uint32x4_t a) {2249  return vclsq_u32(a);2250}2251 2252// CHECK-LABEL: define dso_local <8 x i8> @test_vclz_s8(2253// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2254// CHECK-NEXT:  [[ENTRY:.*:]]2255// CHECK-NEXT:    [[VCLZ_V_I:%.*]] = call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> [[A]], i1 false)2256// CHECK-NEXT:    ret <8 x i8> [[VCLZ_V_I]]2257//2258int8x8_t test_vclz_s8(int8x8_t a) {2259  return vclz_s8(a);2260}2261 2262// CHECK-LABEL: define dso_local <16 x i8> @test_vclzq_s8(2263// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2264// CHECK-NEXT:  [[ENTRY:.*:]]2265// CHECK-NEXT:    [[VCLZQ_V_I:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> [[A]], i1 false)2266// CHECK-NEXT:    ret <16 x i8> [[VCLZQ_V_I]]2267//2268int8x16_t test_vclzq_s8(int8x16_t a) {2269  return vclzq_s8(a);2270}2271 2272// CHECK-LABEL: define dso_local <4 x i16> @test_vclz_s16(2273// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2274// CHECK-NEXT:  [[ENTRY:.*:]]2275// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>2276// CHECK-NEXT:    [[VCLZ_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>2277// CHECK-NEXT:    [[VCLZ_V1_I:%.*]] = call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> [[VCLZ_V_I]], i1 false)2278// CHECK-NEXT:    [[VCLZ_V2_I:%.*]] = bitcast <4 x i16> [[VCLZ_V1_I]] to <8 x i8>2279// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VCLZ_V2_I]] to <4 x i16>2280// CHECK-NEXT:    ret <4 x i16> [[TMP1]]2281//2282int16x4_t test_vclz_s16(int16x4_t a) {2283  return vclz_s16(a);2284}2285 2286// CHECK-LABEL: define dso_local <8 x i16> @test_vclzq_s16(2287// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2288// CHECK-NEXT:  [[ENTRY:.*:]]2289// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2290// CHECK-NEXT:    [[VCLZQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2291// CHECK-NEXT:    [[VCLZQ_V1_I:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[VCLZQ_V_I]], i1 false)2292// CHECK-NEXT:    [[VCLZQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLZQ_V1_I]] to <16 x i8>2293// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VCLZQ_V2_I]] to <8 x i16>2294// CHECK-NEXT:    ret <8 x i16> [[TMP1]]2295//2296int16x8_t test_vclzq_s16(int16x8_t a) {2297  return vclzq_s16(a);2298}2299 2300// CHECK-LABEL: define dso_local <2 x i32> @test_vclz_s32(2301// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2302// CHECK-NEXT:  [[ENTRY:.*:]]2303// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>2304// CHECK-NEXT:    [[VCLZ_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>2305// CHECK-NEXT:    [[VCLZ_V1_I:%.*]] = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[VCLZ_V_I]], i1 false)2306// CHECK-NEXT:    [[VCLZ_V2_I:%.*]] = bitcast <2 x i32> [[VCLZ_V1_I]] to <8 x i8>2307// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VCLZ_V2_I]] to <2 x i32>2308// CHECK-NEXT:    ret <2 x i32> [[TMP1]]2309//2310int32x2_t test_vclz_s32(int32x2_t a) {2311  return vclz_s32(a);2312}2313 2314// CHECK-LABEL: define dso_local <4 x i32> @test_vclzq_s32(2315// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2316// CHECK-NEXT:  [[ENTRY:.*:]]2317// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2318// CHECK-NEXT:    [[VCLZQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2319// CHECK-NEXT:    [[VCLZQ_V1_I:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[VCLZQ_V_I]], i1 false)2320// CHECK-NEXT:    [[VCLZQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLZQ_V1_I]] to <16 x i8>2321// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VCLZQ_V2_I]] to <4 x i32>2322// CHECK-NEXT:    ret <4 x i32> [[TMP1]]2323//2324int32x4_t test_vclzq_s32(int32x4_t a) {2325  return vclzq_s32(a);2326}2327 2328// CHECK-LABEL: define dso_local <8 x i8> @test_vclz_u8(2329// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2330// CHECK-NEXT:  [[ENTRY:.*:]]2331// CHECK-NEXT:    [[VCLZ_V_I:%.*]] = call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> [[A]], i1 false)2332// CHECK-NEXT:    ret <8 x i8> [[VCLZ_V_I]]2333//2334uint8x8_t test_vclz_u8(uint8x8_t a) {2335  return vclz_u8(a);2336}2337 2338// CHECK-LABEL: define dso_local <16 x i8> @test_vclzq_u8(2339// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2340// CHECK-NEXT:  [[ENTRY:.*:]]2341// CHECK-NEXT:    [[VCLZQ_V_I:%.*]] = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> [[A]], i1 false)2342// CHECK-NEXT:    ret <16 x i8> [[VCLZQ_V_I]]2343//2344uint8x16_t test_vclzq_u8(uint8x16_t a) {2345  return vclzq_u8(a);2346}2347 2348// CHECK-LABEL: define dso_local <4 x i16> @test_vclz_u16(2349// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2350// CHECK-NEXT:  [[ENTRY:.*:]]2351// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>2352// CHECK-NEXT:    [[VCLZ_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>2353// CHECK-NEXT:    [[VCLZ_V1_I:%.*]] = call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> [[VCLZ_V_I]], i1 false)2354// CHECK-NEXT:    [[VCLZ_V2_I:%.*]] = bitcast <4 x i16> [[VCLZ_V1_I]] to <8 x i8>2355// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VCLZ_V2_I]] to <4 x i16>2356// CHECK-NEXT:    ret <4 x i16> [[TMP1]]2357//2358uint16x4_t test_vclz_u16(uint16x4_t a) {2359  return vclz_u16(a);2360}2361 2362// CHECK-LABEL: define dso_local <8 x i16> @test_vclzq_u16(2363// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2364// CHECK-NEXT:  [[ENTRY:.*:]]2365// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2366// CHECK-NEXT:    [[VCLZQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2367// CHECK-NEXT:    [[VCLZQ_V1_I:%.*]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[VCLZQ_V_I]], i1 false)2368// CHECK-NEXT:    [[VCLZQ_V2_I:%.*]] = bitcast <8 x i16> [[VCLZQ_V1_I]] to <16 x i8>2369// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VCLZQ_V2_I]] to <8 x i16>2370// CHECK-NEXT:    ret <8 x i16> [[TMP1]]2371//2372uint16x8_t test_vclzq_u16(uint16x8_t a) {2373  return vclzq_u16(a);2374}2375 2376// CHECK-LABEL: define dso_local <2 x i32> @test_vclz_u32(2377// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2378// CHECK-NEXT:  [[ENTRY:.*:]]2379// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>2380// CHECK-NEXT:    [[VCLZ_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>2381// CHECK-NEXT:    [[VCLZ_V1_I:%.*]] = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[VCLZ_V_I]], i1 false)2382// CHECK-NEXT:    [[VCLZ_V2_I:%.*]] = bitcast <2 x i32> [[VCLZ_V1_I]] to <8 x i8>2383// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VCLZ_V2_I]] to <2 x i32>2384// CHECK-NEXT:    ret <2 x i32> [[TMP1]]2385//2386uint32x2_t test_vclz_u32(uint32x2_t a) {2387  return vclz_u32(a);2388}2389 2390// CHECK-LABEL: define dso_local <4 x i32> @test_vclzq_u32(2391// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2392// CHECK-NEXT:  [[ENTRY:.*:]]2393// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2394// CHECK-NEXT:    [[VCLZQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2395// CHECK-NEXT:    [[VCLZQ_V1_I:%.*]] = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[VCLZQ_V_I]], i1 false)2396// CHECK-NEXT:    [[VCLZQ_V2_I:%.*]] = bitcast <4 x i32> [[VCLZQ_V1_I]] to <16 x i8>2397// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[VCLZQ_V2_I]] to <4 x i32>2398// CHECK-NEXT:    ret <4 x i32> [[TMP1]]2399//2400uint32x4_t test_vclzq_u32(uint32x4_t a) {2401  return vclzq_u32(a);2402}2403 2404// CHECK-LABEL: define dso_local <8 x i8> @test_vcnt_s8(2405// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2406// CHECK-NEXT:  [[ENTRY:.*:]]2407// CHECK-NEXT:    [[VCNT_V_I:%.*]] = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> [[A]])2408// CHECK-NEXT:    ret <8 x i8> [[VCNT_V_I]]2409//2410int8x8_t test_vcnt_s8(int8x8_t a) {2411  return vcnt_s8(a);2412}2413 2414// CHECK-LABEL: define dso_local <16 x i8> @test_vcntq_s8(2415// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2416// CHECK-NEXT:  [[ENTRY:.*:]]2417// CHECK-NEXT:    [[VCNTQ_V_I:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[A]])2418// CHECK-NEXT:    ret <16 x i8> [[VCNTQ_V_I]]2419//2420int8x16_t test_vcntq_s8(int8x16_t a) {2421  return vcntq_s8(a);2422}2423 2424// CHECK-LABEL: define dso_local <8 x i8> @test_vcnt_u8(2425// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2426// CHECK-NEXT:  [[ENTRY:.*:]]2427// CHECK-NEXT:    [[VCNT_V_I:%.*]] = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> [[A]])2428// CHECK-NEXT:    ret <8 x i8> [[VCNT_V_I]]2429//2430uint8x8_t test_vcnt_u8(uint8x8_t a) {2431  return vcnt_u8(a);2432}2433 2434// CHECK-LABEL: define dso_local <16 x i8> @test_vcntq_u8(2435// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2436// CHECK-NEXT:  [[ENTRY:.*:]]2437// CHECK-NEXT:    [[VCNTQ_V_I:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[A]])2438// CHECK-NEXT:    ret <16 x i8> [[VCNTQ_V_I]]2439//2440uint8x16_t test_vcntq_u8(uint8x16_t a) {2441  return vcntq_u8(a);2442}2443 2444// CHECK-LABEL: define dso_local <8 x i8> @test_vcnt_p8(2445// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2446// CHECK-NEXT:  [[ENTRY:.*:]]2447// CHECK-NEXT:    [[VCNT_V_I:%.*]] = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> [[A]])2448// CHECK-NEXT:    ret <8 x i8> [[VCNT_V_I]]2449//2450poly8x8_t test_vcnt_p8(poly8x8_t a) {2451  return vcnt_p8(a);2452}2453 2454// CHECK-LABEL: define dso_local <16 x i8> @test_vcntq_p8(2455// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2456// CHECK-NEXT:  [[ENTRY:.*:]]2457// CHECK-NEXT:    [[VCNTQ_V_I:%.*]] = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[A]])2458// CHECK-NEXT:    ret <16 x i8> [[VCNTQ_V_I]]2459//2460poly8x16_t test_vcntq_p8(poly8x16_t a) {2461  return vcntq_p8(a);2462}2463 2464// CHECK-LABEL: define dso_local <8 x i8> @test_vmvn_s8(2465// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2466// CHECK-NEXT:  [[ENTRY:.*:]]2467// CHECK-NEXT:    [[NOT_I:%.*]] = xor <8 x i8> [[A]], splat (i8 -1)2468// CHECK-NEXT:    ret <8 x i8> [[NOT_I]]2469//2470int8x8_t test_vmvn_s8(int8x8_t a) {2471  return vmvn_s8(a);2472}2473 2474// CHECK-LABEL: define dso_local <16 x i8> @test_vmvnq_s8(2475// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2476// CHECK-NEXT:  [[ENTRY:.*:]]2477// CHECK-NEXT:    [[NOT_I:%.*]] = xor <16 x i8> [[A]], splat (i8 -1)2478// CHECK-NEXT:    ret <16 x i8> [[NOT_I]]2479//2480int8x16_t test_vmvnq_s8(int8x16_t a) {2481  return vmvnq_s8(a);2482}2483 2484// CHECK-LABEL: define dso_local <4 x i16> @test_vmvn_s16(2485// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2486// CHECK-NEXT:  [[ENTRY:.*:]]2487// CHECK-NEXT:    [[NOT_I:%.*]] = xor <4 x i16> [[A]], splat (i16 -1)2488// CHECK-NEXT:    ret <4 x i16> [[NOT_I]]2489//2490int16x4_t test_vmvn_s16(int16x4_t a) {2491  return vmvn_s16(a);2492}2493 2494// CHECK-LABEL: define dso_local <8 x i16> @test_vmvnq_s16(2495// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2496// CHECK-NEXT:  [[ENTRY:.*:]]2497// CHECK-NEXT:    [[NOT_I:%.*]] = xor <8 x i16> [[A]], splat (i16 -1)2498// CHECK-NEXT:    ret <8 x i16> [[NOT_I]]2499//2500int16x8_t test_vmvnq_s16(int16x8_t a) {2501  return vmvnq_s16(a);2502}2503 2504// CHECK-LABEL: define dso_local <2 x i32> @test_vmvn_s32(2505// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2506// CHECK-NEXT:  [[ENTRY:.*:]]2507// CHECK-NEXT:    [[NOT_I:%.*]] = xor <2 x i32> [[A]], splat (i32 -1)2508// CHECK-NEXT:    ret <2 x i32> [[NOT_I]]2509//2510int32x2_t test_vmvn_s32(int32x2_t a) {2511  return vmvn_s32(a);2512}2513 2514// CHECK-LABEL: define dso_local <4 x i32> @test_vmvnq_s32(2515// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2516// CHECK-NEXT:  [[ENTRY:.*:]]2517// CHECK-NEXT:    [[NOT_I:%.*]] = xor <4 x i32> [[A]], splat (i32 -1)2518// CHECK-NEXT:    ret <4 x i32> [[NOT_I]]2519//2520int32x4_t test_vmvnq_s32(int32x4_t a) {2521  return vmvnq_s32(a);2522}2523 2524// CHECK-LABEL: define dso_local <8 x i8> @test_vmvn_u8(2525// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2526// CHECK-NEXT:  [[ENTRY:.*:]]2527// CHECK-NEXT:    [[NOT_I:%.*]] = xor <8 x i8> [[A]], splat (i8 -1)2528// CHECK-NEXT:    ret <8 x i8> [[NOT_I]]2529//2530uint8x8_t test_vmvn_u8(uint8x8_t a) {2531  return vmvn_u8(a);2532}2533 2534// CHECK-LABEL: define dso_local <16 x i8> @test_vmvnq_u8(2535// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2536// CHECK-NEXT:  [[ENTRY:.*:]]2537// CHECK-NEXT:    [[NOT_I:%.*]] = xor <16 x i8> [[A]], splat (i8 -1)2538// CHECK-NEXT:    ret <16 x i8> [[NOT_I]]2539//2540uint8x16_t test_vmvnq_u8(uint8x16_t a) {2541  return vmvnq_u8(a);2542}2543 2544// CHECK-LABEL: define dso_local <4 x i16> @test_vmvn_u16(2545// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2546// CHECK-NEXT:  [[ENTRY:.*:]]2547// CHECK-NEXT:    [[NOT_I:%.*]] = xor <4 x i16> [[A]], splat (i16 -1)2548// CHECK-NEXT:    ret <4 x i16> [[NOT_I]]2549//2550uint16x4_t test_vmvn_u16(uint16x4_t a) {2551  return vmvn_u16(a);2552}2553 2554// CHECK-LABEL: define dso_local <8 x i16> @test_vmvnq_u16(2555// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2556// CHECK-NEXT:  [[ENTRY:.*:]]2557// CHECK-NEXT:    [[NOT_I:%.*]] = xor <8 x i16> [[A]], splat (i16 -1)2558// CHECK-NEXT:    ret <8 x i16> [[NOT_I]]2559//2560uint16x8_t test_vmvnq_u16(uint16x8_t a) {2561  return vmvnq_u16(a);2562}2563 2564// CHECK-LABEL: define dso_local <2 x i32> @test_vmvn_u32(2565// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2566// CHECK-NEXT:  [[ENTRY:.*:]]2567// CHECK-NEXT:    [[NOT_I:%.*]] = xor <2 x i32> [[A]], splat (i32 -1)2568// CHECK-NEXT:    ret <2 x i32> [[NOT_I]]2569//2570uint32x2_t test_vmvn_u32(uint32x2_t a) {2571  return vmvn_u32(a);2572}2573 2574// CHECK-LABEL: define dso_local <4 x i32> @test_vmvnq_u32(2575// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2576// CHECK-NEXT:  [[ENTRY:.*:]]2577// CHECK-NEXT:    [[NOT_I:%.*]] = xor <4 x i32> [[A]], splat (i32 -1)2578// CHECK-NEXT:    ret <4 x i32> [[NOT_I]]2579//2580uint32x4_t test_vmvnq_u32(uint32x4_t a) {2581  return vmvnq_u32(a);2582}2583 2584// CHECK-LABEL: define dso_local <8 x i8> @test_vmvn_p8(2585// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2586// CHECK-NEXT:  [[ENTRY:.*:]]2587// CHECK-NEXT:    [[NOT_I:%.*]] = xor <8 x i8> [[A]], splat (i8 -1)2588// CHECK-NEXT:    ret <8 x i8> [[NOT_I]]2589//2590poly8x8_t test_vmvn_p8(poly8x8_t a) {2591  return vmvn_p8(a);2592}2593 2594// CHECK-LABEL: define dso_local <16 x i8> @test_vmvnq_p8(2595// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2596// CHECK-NEXT:  [[ENTRY:.*:]]2597// CHECK-NEXT:    [[NOT_I:%.*]] = xor <16 x i8> [[A]], splat (i8 -1)2598// CHECK-NEXT:    ret <16 x i8> [[NOT_I]]2599//2600poly8x16_t test_vmvnq_p8(poly8x16_t a) {2601  return vmvnq_p8(a);2602}2603 2604// CHECK-LABEL: define dso_local <8 x i8> @test_vrbit_s8(2605// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2606// CHECK-NEXT:  [[ENTRY:.*:]]2607// CHECK-NEXT:    [[VRBIT_I:%.*]] = call <8 x i8> @llvm.bitreverse.v8i8(<8 x i8> [[A]])2608// CHECK-NEXT:    ret <8 x i8> [[VRBIT_I]]2609//2610int8x8_t test_vrbit_s8(int8x8_t a) {2611  return vrbit_s8(a);2612}2613 2614// CHECK-LABEL: define dso_local <16 x i8> @test_vrbitq_s8(2615// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2616// CHECK-NEXT:  [[ENTRY:.*:]]2617// CHECK-NEXT:    [[VRBIT_I:%.*]] = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> [[A]])2618// CHECK-NEXT:    ret <16 x i8> [[VRBIT_I]]2619//2620int8x16_t test_vrbitq_s8(int8x16_t a) {2621  return vrbitq_s8(a);2622}2623 2624// CHECK-LABEL: define dso_local <8 x i8> @test_vrbit_u8(2625// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2626// CHECK-NEXT:  [[ENTRY:.*:]]2627// CHECK-NEXT:    [[VRBIT_I:%.*]] = call <8 x i8> @llvm.bitreverse.v8i8(<8 x i8> [[A]])2628// CHECK-NEXT:    ret <8 x i8> [[VRBIT_I]]2629//2630uint8x8_t test_vrbit_u8(uint8x8_t a) {2631  return vrbit_u8(a);2632}2633 2634// CHECK-LABEL: define dso_local <16 x i8> @test_vrbitq_u8(2635// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2636// CHECK-NEXT:  [[ENTRY:.*:]]2637// CHECK-NEXT:    [[VRBIT_I:%.*]] = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> [[A]])2638// CHECK-NEXT:    ret <16 x i8> [[VRBIT_I]]2639//2640uint8x16_t test_vrbitq_u8(uint8x16_t a) {2641  return vrbitq_u8(a);2642}2643 2644// CHECK-LABEL: define dso_local <8 x i8> @test_vrbit_p8(2645// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2646// CHECK-NEXT:  [[ENTRY:.*:]]2647// CHECK-NEXT:    [[VRBIT_I:%.*]] = call <8 x i8> @llvm.bitreverse.v8i8(<8 x i8> [[A]])2648// CHECK-NEXT:    ret <8 x i8> [[VRBIT_I]]2649//2650poly8x8_t test_vrbit_p8(poly8x8_t a) {2651  return vrbit_p8(a);2652}2653 2654// CHECK-LABEL: define dso_local <16 x i8> @test_vrbitq_p8(2655// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {2656// CHECK-NEXT:  [[ENTRY:.*:]]2657// CHECK-NEXT:    [[VRBIT_I:%.*]] = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> [[A]])2658// CHECK-NEXT:    ret <16 x i8> [[VRBIT_I]]2659//2660poly8x16_t test_vrbitq_p8(poly8x16_t a) {2661  return vrbitq_p8(a);2662}2663 2664// CHECK-LABEL: define dso_local <8 x i8> @test_vmovn_s16(2665// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2666// CHECK-NEXT:  [[ENTRY:.*:]]2667// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2668// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2669// CHECK-NEXT:    [[VMOVN_I:%.*]] = trunc <8 x i16> [[TMP1]] to <8 x i8>2670// CHECK-NEXT:    ret <8 x i8> [[VMOVN_I]]2671//2672int8x8_t test_vmovn_s16(int16x8_t a) {2673  return vmovn_s16(a);2674}2675 2676// CHECK-LABEL: define dso_local <4 x i16> @test_vmovn_s32(2677// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2678// CHECK-NEXT:  [[ENTRY:.*:]]2679// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2680// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2681// CHECK-NEXT:    [[VMOVN_I:%.*]] = trunc <4 x i32> [[TMP1]] to <4 x i16>2682// CHECK-NEXT:    ret <4 x i16> [[VMOVN_I]]2683//2684int16x4_t test_vmovn_s32(int32x4_t a) {2685  return vmovn_s32(a);2686}2687 2688// CHECK-LABEL: define dso_local <2 x i32> @test_vmovn_s64(2689// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {2690// CHECK-NEXT:  [[ENTRY:.*:]]2691// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>2692// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>2693// CHECK-NEXT:    [[VMOVN_I:%.*]] = trunc <2 x i64> [[TMP1]] to <2 x i32>2694// CHECK-NEXT:    ret <2 x i32> [[VMOVN_I]]2695//2696int32x2_t test_vmovn_s64(int64x2_t a) {2697  return vmovn_s64(a);2698}2699 2700// CHECK-LABEL: define dso_local <8 x i8> @test_vmovn_u16(2701// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2702// CHECK-NEXT:  [[ENTRY:.*:]]2703// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2704// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2705// CHECK-NEXT:    [[VMOVN_I:%.*]] = trunc <8 x i16> [[TMP1]] to <8 x i8>2706// CHECK-NEXT:    ret <8 x i8> [[VMOVN_I]]2707//2708uint8x8_t test_vmovn_u16(uint16x8_t a) {2709  return vmovn_u16(a);2710}2711 2712// CHECK-LABEL: define dso_local <4 x i16> @test_vmovn_u32(2713// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2714// CHECK-NEXT:  [[ENTRY:.*:]]2715// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2716// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2717// CHECK-NEXT:    [[VMOVN_I:%.*]] = trunc <4 x i32> [[TMP1]] to <4 x i16>2718// CHECK-NEXT:    ret <4 x i16> [[VMOVN_I]]2719//2720uint16x4_t test_vmovn_u32(uint32x4_t a) {2721  return vmovn_u32(a);2722}2723 2724// CHECK-LABEL: define dso_local <2 x i32> @test_vmovn_u64(2725// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {2726// CHECK-NEXT:  [[ENTRY:.*:]]2727// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>2728// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>2729// CHECK-NEXT:    [[VMOVN_I:%.*]] = trunc <2 x i64> [[TMP1]] to <2 x i32>2730// CHECK-NEXT:    ret <2 x i32> [[VMOVN_I]]2731//2732uint32x2_t test_vmovn_u64(uint64x2_t a) {2733  return vmovn_u64(a);2734}2735 2736// CHECK-LABEL: define dso_local <16 x i8> @test_vmovn_high_s16(2737// CHECK-SAME: <8 x i8> noundef [[A:%.*]], <8 x i16> noundef [[B:%.*]]) #[[ATTR0]] {2738// CHECK-NEXT:  [[ENTRY:.*:]]2739// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[B]] to <16 x i8>2740// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2741// CHECK-NEXT:    [[VMOVN_I_I:%.*]] = trunc <8 x i16> [[TMP1]] to <8 x i8>2742// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[VMOVN_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2743// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]2744//2745int8x16_t test_vmovn_high_s16(int8x8_t a, int16x8_t b) {2746  return vmovn_high_s16(a, b);2747}2748 2749// CHECK-LABEL: define dso_local <8 x i16> @test_vmovn_high_s32(2750// CHECK-SAME: <4 x i16> noundef [[A:%.*]], <4 x i32> noundef [[B:%.*]]) #[[ATTR0]] {2751// CHECK-NEXT:  [[ENTRY:.*:]]2752// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[B]] to <16 x i8>2753// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2754// CHECK-NEXT:    [[VMOVN_I_I:%.*]] = trunc <4 x i32> [[TMP1]] to <4 x i16>2755// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[VMOVN_I_I]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2756// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]2757//2758int16x8_t test_vmovn_high_s32(int16x4_t a, int32x4_t b) {2759  return vmovn_high_s32(a, b);2760}2761 2762// CHECK-LABEL: define dso_local <4 x i32> @test_vmovn_high_s64(2763// CHECK-SAME: <2 x i32> noundef [[A:%.*]], <2 x i64> noundef [[B:%.*]]) #[[ATTR0]] {2764// CHECK-NEXT:  [[ENTRY:.*:]]2765// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[B]] to <16 x i8>2766// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>2767// CHECK-NEXT:    [[VMOVN_I_I:%.*]] = trunc <2 x i64> [[TMP1]] to <2 x i32>2768// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[VMOVN_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>2769// CHECK-NEXT:    ret <4 x i32> [[SHUFFLE_I]]2770//2771int32x4_t test_vmovn_high_s64(int32x2_t a, int64x2_t b) {2772  return vmovn_high_s64(a, b);2773}2774 2775// CHECK-LABEL: define dso_local <16 x i8> @test_vmovn_high_u16(2776// CHECK-SAME: <8 x i8> noundef [[A:%.*]], <8 x i16> noundef [[B:%.*]]) #[[ATTR0]] {2777// CHECK-NEXT:  [[ENTRY:.*:]]2778// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[B]] to <16 x i8>2779// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2780// CHECK-NEXT:    [[VMOVN_I_I:%.*]] = trunc <8 x i16> [[TMP1]] to <8 x i8>2781// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[VMOVN_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2782// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]2783//2784int8x16_t test_vmovn_high_u16(int8x8_t a, int16x8_t b) {2785  return vmovn_high_u16(a, b);2786}2787 2788// CHECK-LABEL: define dso_local <8 x i16> @test_vmovn_high_u32(2789// CHECK-SAME: <4 x i16> noundef [[A:%.*]], <4 x i32> noundef [[B:%.*]]) #[[ATTR0]] {2790// CHECK-NEXT:  [[ENTRY:.*:]]2791// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[B]] to <16 x i8>2792// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2793// CHECK-NEXT:    [[VMOVN_I_I:%.*]] = trunc <4 x i32> [[TMP1]] to <4 x i16>2794// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[VMOVN_I_I]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2795// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]2796//2797int16x8_t test_vmovn_high_u32(int16x4_t a, int32x4_t b) {2798  return vmovn_high_u32(a, b);2799}2800 2801// CHECK-LABEL: define dso_local <4 x i32> @test_vmovn_high_u64(2802// CHECK-SAME: <2 x i32> noundef [[A:%.*]], <2 x i64> noundef [[B:%.*]]) #[[ATTR0]] {2803// CHECK-NEXT:  [[ENTRY:.*:]]2804// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[B]] to <16 x i8>2805// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>2806// CHECK-NEXT:    [[VMOVN_I_I:%.*]] = trunc <2 x i64> [[TMP1]] to <2 x i32>2807// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[VMOVN_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>2808// CHECK-NEXT:    ret <4 x i32> [[SHUFFLE_I]]2809//2810int32x4_t test_vmovn_high_u64(int32x2_t a, int64x2_t b) {2811  return vmovn_high_u64(a, b);2812}2813 2814// CHECK-LABEL: define dso_local <8 x i8> @test_vqmovun_s16(2815// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2816// CHECK-NEXT:  [[ENTRY:.*:]]2817// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2818// CHECK-NEXT:    [[VQMOVUN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2819// CHECK-NEXT:    [[VQMOVUN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtun.v8i8(<8 x i16> [[VQMOVUN_V_I]])2820// CHECK-NEXT:    ret <8 x i8> [[VQMOVUN_V1_I]]2821//2822int8x8_t test_vqmovun_s16(int16x8_t a) {2823  return vqmovun_s16(a);2824}2825 2826// CHECK-LABEL: define dso_local <4 x i16> @test_vqmovun_s32(2827// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2828// CHECK-NEXT:  [[ENTRY:.*:]]2829// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2830// CHECK-NEXT:    [[VQMOVUN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2831// CHECK-NEXT:    [[VQMOVUN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtun.v4i16(<4 x i32> [[VQMOVUN_V_I]])2832// CHECK-NEXT:    [[VQMOVUN_V2_I:%.*]] = bitcast <4 x i16> [[VQMOVUN_V1_I]] to <8 x i8>2833// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVUN_V2_I]] to <4 x i16>2834// CHECK-NEXT:    ret <4 x i16> [[TMP1]]2835//2836int16x4_t test_vqmovun_s32(int32x4_t a) {2837  return vqmovun_s32(a);2838}2839 2840// CHECK-LABEL: define dso_local <2 x i32> @test_vqmovun_s64(2841// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {2842// CHECK-NEXT:  [[ENTRY:.*:]]2843// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>2844// CHECK-NEXT:    [[VQMOVUN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>2845// CHECK-NEXT:    [[VQMOVUN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtun.v2i32(<2 x i64> [[VQMOVUN_V_I]])2846// CHECK-NEXT:    [[VQMOVUN_V2_I:%.*]] = bitcast <2 x i32> [[VQMOVUN_V1_I]] to <8 x i8>2847// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVUN_V2_I]] to <2 x i32>2848// CHECK-NEXT:    ret <2 x i32> [[TMP1]]2849//2850int32x2_t test_vqmovun_s64(int64x2_t a) {2851  return vqmovun_s64(a);2852}2853 2854// CHECK-LABEL: define dso_local <16 x i8> @test_vqmovun_high_s16(2855// CHECK-SAME: <8 x i8> noundef [[A:%.*]], <8 x i16> noundef [[B:%.*]]) #[[ATTR0]] {2856// CHECK-NEXT:  [[ENTRY:.*:]]2857// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[B]] to <16 x i8>2858// CHECK-NEXT:    [[VQMOVUN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2859// CHECK-NEXT:    [[VQMOVUN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtun.v8i8(<8 x i16> [[VQMOVUN_V_I_I]])2860// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[VQMOVUN_V1_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2861// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]2862//2863uint8x16_t test_vqmovun_high_s16(uint8x8_t a, int16x8_t b) {2864  return vqmovun_high_s16(a, b);2865}2866 2867// CHECK-LABEL: define dso_local <8 x i16> @test_vqmovun_high_s32(2868// CHECK-SAME: <4 x i16> noundef [[A:%.*]], <4 x i32> noundef [[B:%.*]]) #[[ATTR0]] {2869// CHECK-NEXT:  [[ENTRY:.*:]]2870// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[B]] to <16 x i8>2871// CHECK-NEXT:    [[VQMOVUN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2872// CHECK-NEXT:    [[VQMOVUN_V1_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtun.v4i16(<4 x i32> [[VQMOVUN_V_I_I]])2873// CHECK-NEXT:    [[VQMOVUN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVUN_V1_I_I]] to <8 x i8>2874// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVUN_V2_I_I]] to <4 x i16>2875// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2876// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]2877//2878uint16x8_t test_vqmovun_high_s32(uint16x4_t a, int32x4_t b) {2879  return vqmovun_high_s32(a, b);2880}2881 2882// CHECK-LABEL: define dso_local <4 x i32> @test_vqmovun_high_s64(2883// CHECK-SAME: <2 x i32> noundef [[A:%.*]], <2 x i64> noundef [[B:%.*]]) #[[ATTR0]] {2884// CHECK-NEXT:  [[ENTRY:.*:]]2885// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[B]] to <16 x i8>2886// CHECK-NEXT:    [[VQMOVUN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>2887// CHECK-NEXT:    [[VQMOVUN_V1_I_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtun.v2i32(<2 x i64> [[VQMOVUN_V_I_I]])2888// CHECK-NEXT:    [[VQMOVUN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVUN_V1_I_I]] to <8 x i8>2889// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVUN_V2_I_I]] to <2 x i32>2890// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[TMP1]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>2891// CHECK-NEXT:    ret <4 x i32> [[SHUFFLE_I]]2892//2893uint32x4_t test_vqmovun_high_s64(uint32x2_t a, int64x2_t b) {2894  return vqmovun_high_s64(a, b);2895}2896 2897// CHECK-LABEL: define dso_local <8 x i8> @test_vqmovn_s16(2898// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2899// CHECK-NEXT:  [[ENTRY:.*:]]2900// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2901// CHECK-NEXT:    [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2902// CHECK-NEXT:    [[VQMOVN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtn.v8i8(<8 x i16> [[VQMOVN_V_I]])2903// CHECK-NEXT:    ret <8 x i8> [[VQMOVN_V1_I]]2904//2905int8x8_t test_vqmovn_s16(int16x8_t a) {2906  return vqmovn_s16(a);2907}2908 2909// CHECK-LABEL: define dso_local <4 x i16> @test_vqmovn_s32(2910// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2911// CHECK-NEXT:  [[ENTRY:.*:]]2912// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2913// CHECK-NEXT:    [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2914// CHECK-NEXT:    [[VQMOVN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtn.v4i16(<4 x i32> [[VQMOVN_V_I]])2915// CHECK-NEXT:    [[VQMOVN_V2_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I]] to <8 x i8>2916// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I]] to <4 x i16>2917// CHECK-NEXT:    ret <4 x i16> [[TMP1]]2918//2919int16x4_t test_vqmovn_s32(int32x4_t a) {2920  return vqmovn_s32(a);2921}2922 2923// CHECK-LABEL: define dso_local <2 x i32> @test_vqmovn_s64(2924// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {2925// CHECK-NEXT:  [[ENTRY:.*:]]2926// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>2927// CHECK-NEXT:    [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>2928// CHECK-NEXT:    [[VQMOVN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtn.v2i32(<2 x i64> [[VQMOVN_V_I]])2929// CHECK-NEXT:    [[VQMOVN_V2_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I]] to <8 x i8>2930// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I]] to <2 x i32>2931// CHECK-NEXT:    ret <2 x i32> [[TMP1]]2932//2933int32x2_t test_vqmovn_s64(int64x2_t a) {2934  return vqmovn_s64(a);2935}2936 2937// CHECK-LABEL: define dso_local <16 x i8> @test_vqmovn_high_s16(2938// CHECK-SAME: <8 x i8> noundef [[A:%.*]], <8 x i16> noundef [[B:%.*]]) #[[ATTR0]] {2939// CHECK-NEXT:  [[ENTRY:.*:]]2940// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[B]] to <16 x i8>2941// CHECK-NEXT:    [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2942// CHECK-NEXT:    [[VQMOVN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtn.v8i8(<8 x i16> [[VQMOVN_V_I_I]])2943// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[VQMOVN_V1_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2944// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]2945//2946int8x16_t test_vqmovn_high_s16(int8x8_t a, int16x8_t b) {2947  return vqmovn_high_s16(a, b);2948}2949 2950// CHECK-LABEL: define dso_local <8 x i16> @test_vqmovn_high_s32(2951// CHECK-SAME: <4 x i16> noundef [[A:%.*]], <4 x i32> noundef [[B:%.*]]) #[[ATTR0]] {2952// CHECK-NEXT:  [[ENTRY:.*:]]2953// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[B]] to <16 x i8>2954// CHECK-NEXT:    [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2955// CHECK-NEXT:    [[VQMOVN_V1_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtn.v4i16(<4 x i32> [[VQMOVN_V_I_I]])2956// CHECK-NEXT:    [[VQMOVN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I_I]] to <8 x i8>2957// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I_I]] to <4 x i16>2958// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2959// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]2960//2961int16x8_t test_vqmovn_high_s32(int16x4_t a, int32x4_t b) {2962  return vqmovn_high_s32(a, b);2963}2964 2965// CHECK-LABEL: define dso_local <4 x i32> @test_vqmovn_high_s64(2966// CHECK-SAME: <2 x i32> noundef [[A:%.*]], <2 x i64> noundef [[B:%.*]]) #[[ATTR0]] {2967// CHECK-NEXT:  [[ENTRY:.*:]]2968// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[B]] to <16 x i8>2969// CHECK-NEXT:    [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>2970// CHECK-NEXT:    [[VQMOVN_V1_I_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtn.v2i32(<2 x i64> [[VQMOVN_V_I_I]])2971// CHECK-NEXT:    [[VQMOVN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I_I]] to <8 x i8>2972// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I_I]] to <2 x i32>2973// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[TMP1]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>2974// CHECK-NEXT:    ret <4 x i32> [[SHUFFLE_I]]2975//2976int32x4_t test_vqmovn_high_s64(int32x2_t a, int64x2_t b) {2977  return vqmovn_high_s64(a, b);2978}2979 2980// CHECK-LABEL: define dso_local <8 x i8> @test_vqmovn_u16(2981// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {2982// CHECK-NEXT:  [[ENTRY:.*:]]2983// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>2984// CHECK-NEXT:    [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>2985// CHECK-NEXT:    [[VQMOVN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqxtn.v8i8(<8 x i16> [[VQMOVN_V_I]])2986// CHECK-NEXT:    ret <8 x i8> [[VQMOVN_V1_I]]2987//2988uint8x8_t test_vqmovn_u16(uint16x8_t a) {2989  return vqmovn_u16(a);2990}2991 2992// CHECK-LABEL: define dso_local <4 x i16> @test_vqmovn_u32(2993// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {2994// CHECK-NEXT:  [[ENTRY:.*:]]2995// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>2996// CHECK-NEXT:    [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>2997// CHECK-NEXT:    [[VQMOVN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqxtn.v4i16(<4 x i32> [[VQMOVN_V_I]])2998// CHECK-NEXT:    [[VQMOVN_V2_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I]] to <8 x i8>2999// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I]] to <4 x i16>3000// CHECK-NEXT:    ret <4 x i16> [[TMP1]]3001//3002uint16x4_t test_vqmovn_u32(uint32x4_t a) {3003  return vqmovn_u32(a);3004}3005 3006// CHECK-LABEL: define dso_local <2 x i32> @test_vqmovn_u64(3007// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {3008// CHECK-NEXT:  [[ENTRY:.*:]]3009// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>3010// CHECK-NEXT:    [[VQMOVN_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>3011// CHECK-NEXT:    [[VQMOVN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqxtn.v2i32(<2 x i64> [[VQMOVN_V_I]])3012// CHECK-NEXT:    [[VQMOVN_V2_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I]] to <8 x i8>3013// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I]] to <2 x i32>3014// CHECK-NEXT:    ret <2 x i32> [[TMP1]]3015//3016uint32x2_t test_vqmovn_u64(uint64x2_t a) {3017  return vqmovn_u64(a);3018}3019 3020// CHECK-LABEL: define dso_local <16 x i8> @test_vqmovn_high_u16(3021// CHECK-SAME: <8 x i8> noundef [[A:%.*]], <8 x i16> noundef [[B:%.*]]) #[[ATTR0]] {3022// CHECK-NEXT:  [[ENTRY:.*:]]3023// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i16> [[B]] to <16 x i8>3024// CHECK-NEXT:    [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>3025// CHECK-NEXT:    [[VQMOVN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqxtn.v8i8(<8 x i16> [[VQMOVN_V_I_I]])3026// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[VQMOVN_V1_I_I]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>3027// CHECK-NEXT:    ret <16 x i8> [[SHUFFLE_I]]3028//3029uint8x16_t test_vqmovn_high_u16(uint8x8_t a, uint16x8_t b) {3030  return vqmovn_high_u16(a, b);3031}3032 3033// CHECK-LABEL: define dso_local <8 x i16> @test_vqmovn_high_u32(3034// CHECK-SAME: <4 x i16> noundef [[A:%.*]], <4 x i32> noundef [[B:%.*]]) #[[ATTR0]] {3035// CHECK-NEXT:  [[ENTRY:.*:]]3036// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[B]] to <16 x i8>3037// CHECK-NEXT:    [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>3038// CHECK-NEXT:    [[VQMOVN_V1_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqxtn.v4i16(<4 x i32> [[VQMOVN_V_I_I]])3039// CHECK-NEXT:    [[VQMOVN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVN_V1_I_I]] to <8 x i8>3040// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I_I]] to <4 x i16>3041// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3042// CHECK-NEXT:    ret <8 x i16> [[SHUFFLE_I]]3043//3044uint16x8_t test_vqmovn_high_u32(uint16x4_t a, uint32x4_t b) {3045  return vqmovn_high_u32(a, b);3046}3047 3048// CHECK-LABEL: define dso_local <4 x i32> @test_vqmovn_high_u64(3049// CHECK-SAME: <2 x i32> noundef [[A:%.*]], <2 x i64> noundef [[B:%.*]]) #[[ATTR0]] {3050// CHECK-NEXT:  [[ENTRY:.*:]]3051// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[B]] to <16 x i8>3052// CHECK-NEXT:    [[VQMOVN_V_I_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>3053// CHECK-NEXT:    [[VQMOVN_V1_I_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqxtn.v2i32(<2 x i64> [[VQMOVN_V_I_I]])3054// CHECK-NEXT:    [[VQMOVN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVN_V1_I_I]] to <8 x i8>3055// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[VQMOVN_V2_I_I]] to <2 x i32>3056// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[TMP1]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>3057// CHECK-NEXT:    ret <4 x i32> [[SHUFFLE_I]]3058//3059uint32x4_t test_vqmovn_high_u64(uint32x2_t a, uint64x2_t b) {3060  return vqmovn_high_u64(a, b);3061}3062 3063// CHECK-LABEL: define dso_local <8 x i16> @test_vshll_n_s8(3064// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {3065// CHECK-NEXT:  [[ENTRY:.*:]]3066// CHECK-NEXT:    [[TMP0:%.*]] = sext <8 x i8> [[A]] to <8 x i16>3067// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], splat (i16 8)3068// CHECK-NEXT:    ret <8 x i16> [[VSHLL_N]]3069//3070int16x8_t test_vshll_n_s8(int8x8_t a) {3071  return vshll_n_s8(a, 8);3072}3073 3074// CHECK-LABEL: define dso_local <4 x i32> @test_vshll_n_s16(3075// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {3076// CHECK-NEXT:  [[ENTRY:.*:]]3077// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>3078// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>3079// CHECK-NEXT:    [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32>3080// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], splat (i32 16)3081// CHECK-NEXT:    ret <4 x i32> [[VSHLL_N]]3082//3083int32x4_t test_vshll_n_s16(int16x4_t a) {3084  return vshll_n_s16(a, 16);3085}3086 3087// CHECK-LABEL: define dso_local <2 x i64> @test_vshll_n_s32(3088// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {3089// CHECK-NEXT:  [[ENTRY:.*:]]3090// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>3091// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>3092// CHECK-NEXT:    [[TMP2:%.*]] = sext <2 x i32> [[TMP1]] to <2 x i64>3093// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], splat (i64 32)3094// CHECK-NEXT:    ret <2 x i64> [[VSHLL_N]]3095//3096int64x2_t test_vshll_n_s32(int32x2_t a) {3097  return vshll_n_s32(a, 32);3098}3099 3100// CHECK-LABEL: define dso_local <8 x i16> @test_vshll_n_u8(3101// CHECK-SAME: <8 x i8> noundef [[A:%.*]]) #[[ATTR0]] {3102// CHECK-NEXT:  [[ENTRY:.*:]]3103// CHECK-NEXT:    [[TMP0:%.*]] = zext <8 x i8> [[A]] to <8 x i16>3104// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], splat (i16 8)3105// CHECK-NEXT:    ret <8 x i16> [[VSHLL_N]]3106//3107uint16x8_t test_vshll_n_u8(uint8x8_t a) {3108  return vshll_n_u8(a, 8);3109}3110 3111// CHECK-LABEL: define dso_local <4 x i32> @test_vshll_n_u16(3112// CHECK-SAME: <4 x i16> noundef [[A:%.*]]) #[[ATTR0]] {3113// CHECK-NEXT:  [[ENTRY:.*:]]3114// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>3115// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>3116// CHECK-NEXT:    [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>3117// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], splat (i32 16)3118// CHECK-NEXT:    ret <4 x i32> [[VSHLL_N]]3119//3120uint32x4_t test_vshll_n_u16(uint16x4_t a) {3121  return vshll_n_u16(a, 16);3122}3123 3124// CHECK-LABEL: define dso_local <2 x i64> @test_vshll_n_u32(3125// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {3126// CHECK-NEXT:  [[ENTRY:.*:]]3127// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>3128// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>3129// CHECK-NEXT:    [[TMP2:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>3130// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], splat (i64 32)3131// CHECK-NEXT:    ret <2 x i64> [[VSHLL_N]]3132//3133uint64x2_t test_vshll_n_u32(uint32x2_t a) {3134  return vshll_n_u32(a, 32);3135}3136 3137// CHECK-LABEL: define dso_local <8 x i16> @test_vshll_high_n_s8(3138// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {3139// CHECK-NEXT:  [[ENTRY:.*:]]3140// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>3141// CHECK-NEXT:    [[TMP0:%.*]] = sext <8 x i8> [[SHUFFLE_I]] to <8 x i16>3142// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], splat (i16 8)3143// CHECK-NEXT:    ret <8 x i16> [[VSHLL_N]]3144//3145int16x8_t test_vshll_high_n_s8(int8x16_t a) {3146  return vshll_high_n_s8(a, 8);3147}3148 3149// CHECK-LABEL: define dso_local <4 x i32> @test_vshll_high_n_s16(3150// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {3151// CHECK-NEXT:  [[ENTRY:.*:]]3152// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[A]], <4 x i32> <i32 4, i32 5, i32 6, i32 7>3153// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[SHUFFLE_I]] to <8 x i8>3154// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>3155// CHECK-NEXT:    [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32>3156// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], splat (i32 16)3157// CHECK-NEXT:    ret <4 x i32> [[VSHLL_N]]3158//3159int32x4_t test_vshll_high_n_s16(int16x8_t a) {3160  return vshll_high_n_s16(a, 16);3161}3162 3163// CHECK-LABEL: define dso_local <2 x i64> @test_vshll_high_n_s32(3164// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {3165// CHECK-NEXT:  [[ENTRY:.*:]]3166// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> [[A]], <4 x i32> [[A]], <2 x i32> <i32 2, i32 3>3167// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[SHUFFLE_I]] to <8 x i8>3168// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>3169// CHECK-NEXT:    [[TMP2:%.*]] = sext <2 x i32> [[TMP1]] to <2 x i64>3170// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], splat (i64 32)3171// CHECK-NEXT:    ret <2 x i64> [[VSHLL_N]]3172//3173int64x2_t test_vshll_high_n_s32(int32x4_t a) {3174  return vshll_high_n_s32(a, 32);3175}3176 3177// CHECK-LABEL: define dso_local <8 x i16> @test_vshll_high_n_u8(3178// CHECK-SAME: <16 x i8> noundef [[A:%.*]]) #[[ATTR0]] {3179// CHECK-NEXT:  [[ENTRY:.*:]]3180// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[A]], <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>3181// CHECK-NEXT:    [[TMP0:%.*]] = zext <8 x i8> [[SHUFFLE_I]] to <8 x i16>3182// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], splat (i16 8)3183// CHECK-NEXT:    ret <8 x i16> [[VSHLL_N]]3184//3185uint16x8_t test_vshll_high_n_u8(uint8x16_t a) {3186  return vshll_high_n_u8(a, 8);3187}3188 3189// CHECK-LABEL: define dso_local <4 x i32> @test_vshll_high_n_u16(3190// CHECK-SAME: <8 x i16> noundef [[A:%.*]]) #[[ATTR0]] {3191// CHECK-NEXT:  [[ENTRY:.*:]]3192// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[A]], <4 x i32> <i32 4, i32 5, i32 6, i32 7>3193// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i16> [[SHUFFLE_I]] to <8 x i8>3194// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>3195// CHECK-NEXT:    [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>3196// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <4 x i32> [[TMP2]], splat (i32 16)3197// CHECK-NEXT:    ret <4 x i32> [[VSHLL_N]]3198//3199uint32x4_t test_vshll_high_n_u16(uint16x8_t a) {3200  return vshll_high_n_u16(a, 16);3201}3202 3203// CHECK-LABEL: define dso_local <2 x i64> @test_vshll_high_n_u32(3204// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {3205// CHECK-NEXT:  [[ENTRY:.*:]]3206// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x i32> [[A]], <4 x i32> [[A]], <2 x i32> <i32 2, i32 3>3207// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[SHUFFLE_I]] to <8 x i8>3208// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>3209// CHECK-NEXT:    [[TMP2:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>3210// CHECK-NEXT:    [[VSHLL_N:%.*]] = shl <2 x i64> [[TMP2]], splat (i64 32)3211// CHECK-NEXT:    ret <2 x i64> [[VSHLL_N]]3212//3213uint64x2_t test_vshll_high_n_u32(uint32x4_t a) {3214  return vshll_high_n_u32(a, 32);3215}3216 3217// CHECK-LABEL: define dso_local <4 x half> @test_vcvt_f16_f32(3218// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3219// CHECK-NEXT:  [[ENTRY:.*:]]3220// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3221// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3222// CHECK-NEXT:    [[VCVT_F16_F32_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3223// CHECK-NEXT:    [[VCVT_F16_F321_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.vcvtfp2hf(<4 x float> [[VCVT_F16_F32_I]])3224// CHECK-NEXT:    [[VCVT_F16_F322_I:%.*]] = bitcast <4 x i16> [[VCVT_F16_F321_I]] to <8 x i8>3225// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VCVT_F16_F322_I]] to <4 x i16>3226// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i16> [[TMP2]] to <4 x half>3227// CHECK-NEXT:    ret <4 x half> [[TMP3]]3228//3229float16x4_t test_vcvt_f16_f32(float32x4_t a) {3230  return vcvt_f16_f32(a);3231}3232 3233// CHECK-LABEL: define dso_local <8 x half> @test_vcvt_high_f16_f32(3234// CHECK-SAME: <4 x half> noundef [[A:%.*]], <4 x float> noundef [[B:%.*]]) #[[ATTR0]] {3235// CHECK-NEXT:  [[ENTRY:.*:]]3236// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[B]] to <4 x i32>3237// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3238// CHECK-NEXT:    [[VCVT_F16_F32_I_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3239// CHECK-NEXT:    [[VCVT_F16_F321_I_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.vcvtfp2hf(<4 x float> [[VCVT_F16_F32_I_I]])3240// CHECK-NEXT:    [[VCVT_F16_F322_I_I:%.*]] = bitcast <4 x i16> [[VCVT_F16_F321_I_I]] to <8 x i8>3241// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VCVT_F16_F322_I_I]] to <4 x i16>3242// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i16> [[TMP2]] to <4 x half>3243// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x half> [[A]], <4 x half> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3244// CHECK-NEXT:    ret <8 x half> [[SHUFFLE_I]]3245//3246float16x8_t test_vcvt_high_f16_f32(float16x4_t a, float32x4_t b) {3247  return vcvt_high_f16_f32(a, b);3248}3249 3250// CHECK-LABEL: define dso_local <2 x float> @test_vcvt_f32_f64(3251// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3252// CHECK-NEXT:  [[ENTRY:.*:]]3253// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3254// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3255// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3256// CHECK-NEXT:    [[VCVT_I:%.*]] = fptrunc <2 x double> [[TMP2]] to <2 x float>3257// CHECK-NEXT:    ret <2 x float> [[VCVT_I]]3258//3259float32x2_t test_vcvt_f32_f64(float64x2_t a) {3260  return vcvt_f32_f64(a);3261}3262 3263// CHECK-LABEL: define dso_local <4 x float> @test_vcvt_high_f32_f64(3264// CHECK-SAME: <2 x float> noundef [[A:%.*]], <2 x double> noundef [[B:%.*]]) #[[ATTR0]] {3265// CHECK-NEXT:  [[ENTRY:.*:]]3266// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[B]] to <2 x i64>3267// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3268// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3269// CHECK-NEXT:    [[VCVT_I_I:%.*]] = fptrunc <2 x double> [[TMP2]] to <2 x float>3270// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x float> [[A]], <2 x float> [[VCVT_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>3271// CHECK-NEXT:    ret <4 x float> [[SHUFFLE_I]]3272//3273float32x4_t test_vcvt_high_f32_f64(float32x2_t a, float64x2_t b) {3274  return vcvt_high_f32_f64(a, b);3275}3276 3277// CHECK-LABEL: define dso_local <2 x float> @test_vcvtx_f32_f64(3278// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3279// CHECK-NEXT:  [[ENTRY:.*:]]3280// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3281// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3282// CHECK-NEXT:    [[VCVTX_F32_V_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3283// CHECK-NEXT:    [[VCVTX_F32_V1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> [[VCVTX_F32_V_I]])3284// CHECK-NEXT:    ret <2 x float> [[VCVTX_F32_V1_I]]3285//3286float32x2_t test_vcvtx_f32_f64(float64x2_t a) {3287  return vcvtx_f32_f64(a);3288}3289 3290// CHECK-LABEL: define dso_local <4 x float> @test_vcvtx_high_f32_f64(3291// CHECK-SAME: <2 x float> noundef [[A:%.*]], <2 x double> noundef [[B:%.*]]) #[[ATTR0]] {3292// CHECK-NEXT:  [[ENTRY:.*:]]3293// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[B]] to <2 x i64>3294// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3295// CHECK-NEXT:    [[VCVTX_F32_V_I_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3296// CHECK-NEXT:    [[VCVTX_F32_V1_I_I:%.*]] = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> [[VCVTX_F32_V_I_I]])3297// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x float> [[A]], <2 x float> [[VCVTX_F32_V1_I_I]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>3298// CHECK-NEXT:    ret <4 x float> [[SHUFFLE_I]]3299//3300float32x4_t test_vcvtx_high_f32_f64(float32x2_t a, float64x2_t b) {3301  return vcvtx_high_f32_f64(a, b);3302}3303 3304// CHECK-LABEL: define dso_local <4 x float> @test_vcvt_f32_f16(3305// CHECK-SAME: <4 x half> noundef [[A:%.*]]) #[[ATTR0]] {3306// CHECK-NEXT:  [[ENTRY:.*:]]3307// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x half> [[A]] to <4 x i16>3308// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[TMP0]] to <8 x i8>3309// CHECK-NEXT:    [[VCVT_F32_F16_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <4 x i16>3310// CHECK-NEXT:    [[VCVT_F32_F161_I:%.*]] = call <4 x float> @llvm.aarch64.neon.vcvthf2fp(<4 x i16> [[VCVT_F32_F16_I]])3311// CHECK-NEXT:    [[VCVT_F32_F162_I:%.*]] = bitcast <4 x float> [[VCVT_F32_F161_I]] to <16 x i8>3312// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VCVT_F32_F162_I]] to <4 x i32>3313// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP2]] to <4 x float>3314// CHECK-NEXT:    ret <4 x float> [[TMP3]]3315//3316float32x4_t test_vcvt_f32_f16(float16x4_t a) {3317  return vcvt_f32_f16(a);3318}3319 3320// CHECK-LABEL: define dso_local <4 x float> @test_vcvt_high_f32_f16(3321// CHECK-SAME: <8 x half> noundef [[A:%.*]]) #[[ATTR0]] {3322// CHECK-NEXT:  [[ENTRY:.*:]]3323// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <8 x half> [[A]], <8 x half> [[A]], <4 x i32> <i32 4, i32 5, i32 6, i32 7>3324// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x half> [[SHUFFLE_I]] to <4 x i16>3325// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[TMP0]] to <8 x i8>3326// CHECK-NEXT:    [[VCVT_F32_F16_I_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <4 x i16>3327// CHECK-NEXT:    [[VCVT_F32_F161_I_I:%.*]] = call <4 x float> @llvm.aarch64.neon.vcvthf2fp(<4 x i16> [[VCVT_F32_F16_I_I]])3328// CHECK-NEXT:    [[VCVT_F32_F162_I_I:%.*]] = bitcast <4 x float> [[VCVT_F32_F161_I_I]] to <16 x i8>3329// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VCVT_F32_F162_I_I]] to <4 x i32>3330// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP2]] to <4 x float>3331// CHECK-NEXT:    ret <4 x float> [[TMP3]]3332//3333float32x4_t test_vcvt_high_f32_f16(float16x8_t a) {3334  return vcvt_high_f32_f16(a);3335}3336 3337// CHECK-LABEL: define dso_local <2 x double> @test_vcvt_f64_f32(3338// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3339// CHECK-NEXT:  [[ENTRY:.*:]]3340// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3341// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3342// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3343// CHECK-NEXT:    [[VCVT_I:%.*]] = fpext <2 x float> [[TMP2]] to <2 x double>3344// CHECK-NEXT:    ret <2 x double> [[VCVT_I]]3345//3346float64x2_t test_vcvt_f64_f32(float32x2_t a) {3347  return vcvt_f64_f32(a);3348}3349 3350// CHECK-LABEL: define dso_local <2 x double> @test_vcvt_high_f64_f32(3351// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3352// CHECK-NEXT:  [[ENTRY:.*:]]3353// CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <4 x float> [[A]], <4 x float> [[A]], <2 x i32> <i32 2, i32 3>3354// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[SHUFFLE_I]] to <2 x i32>3355// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3356// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3357// CHECK-NEXT:    [[VCVT_I_I:%.*]] = fpext <2 x float> [[TMP2]] to <2 x double>3358// CHECK-NEXT:    ret <2 x double> [[VCVT_I_I]]3359//3360float64x2_t test_vcvt_high_f64_f32(float32x4_t a) {3361  return vcvt_high_f64_f32(a);3362}3363 3364// CHECK-LABEL: define dso_local <2 x double> @test_vrndnq_f64(3365// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3366// CHECK-NEXT:  [[ENTRY:.*:]]3367// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3368// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3369// CHECK-NEXT:    [[VRNDN_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3370// CHECK-NEXT:    [[VRNDN1_I:%.*]] = call <2 x double> @llvm.roundeven.v2f64(<2 x double> [[VRNDN_I]])3371// CHECK-NEXT:    ret <2 x double> [[VRNDN1_I]]3372//3373float64x2_t test_vrndnq_f64(float64x2_t a) {3374  return vrndnq_f64(a);3375}3376 3377// CHECK-LABEL: define dso_local <2 x double> @test_vrndaq_f64(3378// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3379// CHECK-NEXT:  [[ENTRY:.*:]]3380// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3381// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3382// CHECK-NEXT:    [[VRNDA_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3383// CHECK-NEXT:    [[VRNDA1_I:%.*]] = call <2 x double> @llvm.round.v2f64(<2 x double> [[VRNDA_I]])3384// CHECK-NEXT:    ret <2 x double> [[VRNDA1_I]]3385//3386float64x2_t test_vrndaq_f64(float64x2_t a) {3387  return vrndaq_f64(a);3388}3389 3390// CHECK-LABEL: define dso_local <2 x double> @test_vrndpq_f64(3391// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3392// CHECK-NEXT:  [[ENTRY:.*:]]3393// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3394// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3395// CHECK-NEXT:    [[VRNDP_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3396// CHECK-NEXT:    [[VRNDP1_I:%.*]] = call <2 x double> @llvm.ceil.v2f64(<2 x double> [[VRNDP_I]])3397// CHECK-NEXT:    ret <2 x double> [[VRNDP1_I]]3398//3399float64x2_t test_vrndpq_f64(float64x2_t a) {3400  return vrndpq_f64(a);3401}3402 3403// CHECK-LABEL: define dso_local <2 x double> @test_vrndmq_f64(3404// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3405// CHECK-NEXT:  [[ENTRY:.*:]]3406// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3407// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3408// CHECK-NEXT:    [[VRNDM_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3409// CHECK-NEXT:    [[VRNDM1_I:%.*]] = call <2 x double> @llvm.floor.v2f64(<2 x double> [[VRNDM_I]])3410// CHECK-NEXT:    ret <2 x double> [[VRNDM1_I]]3411//3412float64x2_t test_vrndmq_f64(float64x2_t a) {3413  return vrndmq_f64(a);3414}3415 3416// CHECK-LABEL: define dso_local <2 x double> @test_vrndxq_f64(3417// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3418// CHECK-NEXT:  [[ENTRY:.*:]]3419// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3420// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3421// CHECK-NEXT:    [[VRNDX_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3422// CHECK-NEXT:    [[VRNDX1_I:%.*]] = call <2 x double> @llvm.rint.v2f64(<2 x double> [[VRNDX_I]])3423// CHECK-NEXT:    ret <2 x double> [[VRNDX1_I]]3424//3425float64x2_t test_vrndxq_f64(float64x2_t a) {3426  return vrndxq_f64(a);3427}3428 3429// CHECK-LABEL: define dso_local <2 x double> @test_vrndq_f64(3430// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3431// CHECK-NEXT:  [[ENTRY:.*:]]3432// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3433// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3434// CHECK-NEXT:    [[VRNDZ_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3435// CHECK-NEXT:    [[VRNDZ1_I:%.*]] = call <2 x double> @llvm.trunc.v2f64(<2 x double> [[VRNDZ_I]])3436// CHECK-NEXT:    ret <2 x double> [[VRNDZ1_I]]3437//3438float64x2_t test_vrndq_f64(float64x2_t a) {3439  return vrndq_f64(a);3440}3441 3442// CHECK-LABEL: define dso_local <2 x double> @test_vrndiq_f64(3443// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3444// CHECK-NEXT:  [[ENTRY:.*:]]3445// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3446// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3447// CHECK-NEXT:    [[VRNDIQ_V_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3448// CHECK-NEXT:    [[VRNDIQ_V1_I:%.*]] = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[VRNDIQ_V_I]])3449// CHECK-NEXT:    ret <2 x double> [[VRNDIQ_V1_I]]3450//3451float64x2_t test_vrndiq_f64(float64x2_t a) {3452  return vrndiq_f64(a);3453}3454 3455// CHECK-LABEL: define dso_local <2 x i32> @test_vcvt_s32_f32(3456// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3457// CHECK-NEXT:  [[ENTRY:.*:]]3458// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3459// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3460// CHECK-NEXT:    [[VCVTZ_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3461// CHECK-NEXT:    [[VCVTZ1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtzs.v2i32.v2f32(<2 x float> [[VCVTZ_I]])3462// CHECK-NEXT:    ret <2 x i32> [[VCVTZ1_I]]3463//3464int32x2_t test_vcvt_s32_f32(float32x2_t a) {3465  return vcvt_s32_f32(a);3466}3467 3468// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtq_s32_f32(3469// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3470// CHECK-NEXT:  [[ENTRY:.*:]]3471// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3472// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3473// CHECK-NEXT:    [[VCVTZ_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3474// CHECK-NEXT:    [[VCVTZ1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtzs.v4i32.v4f32(<4 x float> [[VCVTZ_I]])3475// CHECK-NEXT:    ret <4 x i32> [[VCVTZ1_I]]3476//3477int32x4_t test_vcvtq_s32_f32(float32x4_t a) {3478  return vcvtq_s32_f32(a);3479}3480 3481// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtq_s64_f64(3482// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3483// CHECK-NEXT:  [[ENTRY:.*:]]3484// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3485// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3486// CHECK-NEXT:    [[VCVTZ_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3487// CHECK-NEXT:    [[VCVTZ1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtzs.v2i64.v2f64(<2 x double> [[VCVTZ_I]])3488// CHECK-NEXT:    ret <2 x i64> [[VCVTZ1_I]]3489//3490int64x2_t test_vcvtq_s64_f64(float64x2_t a) {3491  return vcvtq_s64_f64(a);3492}3493 3494// CHECK-LABEL: define dso_local <2 x i32> @test_vcvt_u32_f32(3495// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3496// CHECK-NEXT:  [[ENTRY:.*:]]3497// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3498// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3499// CHECK-NEXT:    [[VCVTZ_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3500// CHECK-NEXT:    [[VCVTZ1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtzu.v2i32.v2f32(<2 x float> [[VCVTZ_I]])3501// CHECK-NEXT:    ret <2 x i32> [[VCVTZ1_I]]3502//3503uint32x2_t test_vcvt_u32_f32(float32x2_t a) {3504  return vcvt_u32_f32(a);3505}3506 3507// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtq_u32_f32(3508// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3509// CHECK-NEXT:  [[ENTRY:.*:]]3510// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3511// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3512// CHECK-NEXT:    [[VCVTZ_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3513// CHECK-NEXT:    [[VCVTZ1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtzu.v4i32.v4f32(<4 x float> [[VCVTZ_I]])3514// CHECK-NEXT:    ret <4 x i32> [[VCVTZ1_I]]3515//3516uint32x4_t test_vcvtq_u32_f32(float32x4_t a) {3517  return vcvtq_u32_f32(a);3518}3519 3520// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtq_u64_f64(3521// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3522// CHECK-NEXT:  [[ENTRY:.*:]]3523// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3524// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3525// CHECK-NEXT:    [[VCVTZ_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3526// CHECK-NEXT:    [[VCVTZ1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtzu.v2i64.v2f64(<2 x double> [[VCVTZ_I]])3527// CHECK-NEXT:    ret <2 x i64> [[VCVTZ1_I]]3528//3529uint64x2_t test_vcvtq_u64_f64(float64x2_t a) {3530  return vcvtq_u64_f64(a);3531}3532 3533// CHECK-LABEL: define dso_local <2 x i32> @test_vcvtn_s32_f32(3534// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3535// CHECK-NEXT:  [[ENTRY:.*:]]3536// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3537// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3538// CHECK-NEXT:    [[VCVTN_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3539// CHECK-NEXT:    [[VCVTN1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtns.v2i32.v2f32(<2 x float> [[VCVTN_I]])3540// CHECK-NEXT:    ret <2 x i32> [[VCVTN1_I]]3541//3542int32x2_t test_vcvtn_s32_f32(float32x2_t a) {3543  return vcvtn_s32_f32(a);3544}3545 3546// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtnq_s32_f32(3547// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3548// CHECK-NEXT:  [[ENTRY:.*:]]3549// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3550// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3551// CHECK-NEXT:    [[VCVTN_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3552// CHECK-NEXT:    [[VCVTN1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtns.v4i32.v4f32(<4 x float> [[VCVTN_I]])3553// CHECK-NEXT:    ret <4 x i32> [[VCVTN1_I]]3554//3555int32x4_t test_vcvtnq_s32_f32(float32x4_t a) {3556  return vcvtnq_s32_f32(a);3557}3558 3559// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtnq_s64_f64(3560// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3561// CHECK-NEXT:  [[ENTRY:.*:]]3562// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3563// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3564// CHECK-NEXT:    [[VCVTN_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3565// CHECK-NEXT:    [[VCVTN1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtns.v2i64.v2f64(<2 x double> [[VCVTN_I]])3566// CHECK-NEXT:    ret <2 x i64> [[VCVTN1_I]]3567//3568int64x2_t test_vcvtnq_s64_f64(float64x2_t a) {3569  return vcvtnq_s64_f64(a);3570}3571 3572// CHECK-LABEL: define dso_local <2 x i32> @test_vcvtn_u32_f32(3573// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3574// CHECK-NEXT:  [[ENTRY:.*:]]3575// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3576// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3577// CHECK-NEXT:    [[VCVTN_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3578// CHECK-NEXT:    [[VCVTN1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtnu.v2i32.v2f32(<2 x float> [[VCVTN_I]])3579// CHECK-NEXT:    ret <2 x i32> [[VCVTN1_I]]3580//3581uint32x2_t test_vcvtn_u32_f32(float32x2_t a) {3582  return vcvtn_u32_f32(a);3583}3584 3585// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtnq_u32_f32(3586// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3587// CHECK-NEXT:  [[ENTRY:.*:]]3588// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3589// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3590// CHECK-NEXT:    [[VCVTN_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3591// CHECK-NEXT:    [[VCVTN1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtnu.v4i32.v4f32(<4 x float> [[VCVTN_I]])3592// CHECK-NEXT:    ret <4 x i32> [[VCVTN1_I]]3593//3594uint32x4_t test_vcvtnq_u32_f32(float32x4_t a) {3595  return vcvtnq_u32_f32(a);3596}3597 3598// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtnq_u64_f64(3599// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3600// CHECK-NEXT:  [[ENTRY:.*:]]3601// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3602// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3603// CHECK-NEXT:    [[VCVTN_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3604// CHECK-NEXT:    [[VCVTN1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtnu.v2i64.v2f64(<2 x double> [[VCVTN_I]])3605// CHECK-NEXT:    ret <2 x i64> [[VCVTN1_I]]3606//3607uint64x2_t test_vcvtnq_u64_f64(float64x2_t a) {3608  return vcvtnq_u64_f64(a);3609}3610 3611// CHECK-LABEL: define dso_local <2 x i32> @test_vcvtp_s32_f32(3612// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3613// CHECK-NEXT:  [[ENTRY:.*:]]3614// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3615// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3616// CHECK-NEXT:    [[VCVTP_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3617// CHECK-NEXT:    [[VCVTP1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtps.v2i32.v2f32(<2 x float> [[VCVTP_I]])3618// CHECK-NEXT:    ret <2 x i32> [[VCVTP1_I]]3619//3620int32x2_t test_vcvtp_s32_f32(float32x2_t a) {3621  return vcvtp_s32_f32(a);3622}3623 3624// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtpq_s32_f32(3625// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3626// CHECK-NEXT:  [[ENTRY:.*:]]3627// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3628// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3629// CHECK-NEXT:    [[VCVTP_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3630// CHECK-NEXT:    [[VCVTP1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtps.v4i32.v4f32(<4 x float> [[VCVTP_I]])3631// CHECK-NEXT:    ret <4 x i32> [[VCVTP1_I]]3632//3633int32x4_t test_vcvtpq_s32_f32(float32x4_t a) {3634  return vcvtpq_s32_f32(a);3635}3636 3637// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtpq_s64_f64(3638// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3639// CHECK-NEXT:  [[ENTRY:.*:]]3640// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3641// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3642// CHECK-NEXT:    [[VCVTP_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3643// CHECK-NEXT:    [[VCVTP1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtps.v2i64.v2f64(<2 x double> [[VCVTP_I]])3644// CHECK-NEXT:    ret <2 x i64> [[VCVTP1_I]]3645//3646int64x2_t test_vcvtpq_s64_f64(float64x2_t a) {3647  return vcvtpq_s64_f64(a);3648}3649 3650// CHECK-LABEL: define dso_local <2 x i32> @test_vcvtp_u32_f32(3651// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3652// CHECK-NEXT:  [[ENTRY:.*:]]3653// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3654// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3655// CHECK-NEXT:    [[VCVTP_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3656// CHECK-NEXT:    [[VCVTP1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtpu.v2i32.v2f32(<2 x float> [[VCVTP_I]])3657// CHECK-NEXT:    ret <2 x i32> [[VCVTP1_I]]3658//3659uint32x2_t test_vcvtp_u32_f32(float32x2_t a) {3660  return vcvtp_u32_f32(a);3661}3662 3663// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtpq_u32_f32(3664// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3665// CHECK-NEXT:  [[ENTRY:.*:]]3666// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3667// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3668// CHECK-NEXT:    [[VCVTP_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3669// CHECK-NEXT:    [[VCVTP1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtpu.v4i32.v4f32(<4 x float> [[VCVTP_I]])3670// CHECK-NEXT:    ret <4 x i32> [[VCVTP1_I]]3671//3672uint32x4_t test_vcvtpq_u32_f32(float32x4_t a) {3673  return vcvtpq_u32_f32(a);3674}3675 3676// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtpq_u64_f64(3677// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3678// CHECK-NEXT:  [[ENTRY:.*:]]3679// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3680// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3681// CHECK-NEXT:    [[VCVTP_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3682// CHECK-NEXT:    [[VCVTP1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtpu.v2i64.v2f64(<2 x double> [[VCVTP_I]])3683// CHECK-NEXT:    ret <2 x i64> [[VCVTP1_I]]3684//3685uint64x2_t test_vcvtpq_u64_f64(float64x2_t a) {3686  return vcvtpq_u64_f64(a);3687}3688 3689// CHECK-LABEL: define dso_local <2 x i32> @test_vcvtm_s32_f32(3690// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3691// CHECK-NEXT:  [[ENTRY:.*:]]3692// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3693// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3694// CHECK-NEXT:    [[VCVTM_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3695// CHECK-NEXT:    [[VCVTM1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtms.v2i32.v2f32(<2 x float> [[VCVTM_I]])3696// CHECK-NEXT:    ret <2 x i32> [[VCVTM1_I]]3697//3698int32x2_t test_vcvtm_s32_f32(float32x2_t a) {3699  return vcvtm_s32_f32(a);3700}3701 3702// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtmq_s32_f32(3703// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3704// CHECK-NEXT:  [[ENTRY:.*:]]3705// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3706// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3707// CHECK-NEXT:    [[VCVTM_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3708// CHECK-NEXT:    [[VCVTM1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtms.v4i32.v4f32(<4 x float> [[VCVTM_I]])3709// CHECK-NEXT:    ret <4 x i32> [[VCVTM1_I]]3710//3711int32x4_t test_vcvtmq_s32_f32(float32x4_t a) {3712  return vcvtmq_s32_f32(a);3713}3714 3715// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtmq_s64_f64(3716// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3717// CHECK-NEXT:  [[ENTRY:.*:]]3718// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3719// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3720// CHECK-NEXT:    [[VCVTM_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3721// CHECK-NEXT:    [[VCVTM1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtms.v2i64.v2f64(<2 x double> [[VCVTM_I]])3722// CHECK-NEXT:    ret <2 x i64> [[VCVTM1_I]]3723//3724int64x2_t test_vcvtmq_s64_f64(float64x2_t a) {3725  return vcvtmq_s64_f64(a);3726}3727 3728// CHECK-LABEL: define dso_local <2 x i32> @test_vcvtm_u32_f32(3729// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3730// CHECK-NEXT:  [[ENTRY:.*:]]3731// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3732// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3733// CHECK-NEXT:    [[VCVTM_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3734// CHECK-NEXT:    [[VCVTM1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtmu.v2i32.v2f32(<2 x float> [[VCVTM_I]])3735// CHECK-NEXT:    ret <2 x i32> [[VCVTM1_I]]3736//3737uint32x2_t test_vcvtm_u32_f32(float32x2_t a) {3738  return vcvtm_u32_f32(a);3739}3740 3741// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtmq_u32_f32(3742// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3743// CHECK-NEXT:  [[ENTRY:.*:]]3744// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3745// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3746// CHECK-NEXT:    [[VCVTM_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3747// CHECK-NEXT:    [[VCVTM1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtmu.v4i32.v4f32(<4 x float> [[VCVTM_I]])3748// CHECK-NEXT:    ret <4 x i32> [[VCVTM1_I]]3749//3750uint32x4_t test_vcvtmq_u32_f32(float32x4_t a) {3751  return vcvtmq_u32_f32(a);3752}3753 3754// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtmq_u64_f64(3755// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3756// CHECK-NEXT:  [[ENTRY:.*:]]3757// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3758// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3759// CHECK-NEXT:    [[VCVTM_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3760// CHECK-NEXT:    [[VCVTM1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtmu.v2i64.v2f64(<2 x double> [[VCVTM_I]])3761// CHECK-NEXT:    ret <2 x i64> [[VCVTM1_I]]3762//3763uint64x2_t test_vcvtmq_u64_f64(float64x2_t a) {3764  return vcvtmq_u64_f64(a);3765}3766 3767// CHECK-LABEL: define dso_local <2 x i32> @test_vcvta_s32_f32(3768// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3769// CHECK-NEXT:  [[ENTRY:.*:]]3770// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3771// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3772// CHECK-NEXT:    [[VCVTA_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3773// CHECK-NEXT:    [[VCVTA1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtas.v2i32.v2f32(<2 x float> [[VCVTA_I]])3774// CHECK-NEXT:    ret <2 x i32> [[VCVTA1_I]]3775//3776int32x2_t test_vcvta_s32_f32(float32x2_t a) {3777  return vcvta_s32_f32(a);3778}3779 3780// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtaq_s32_f32(3781// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3782// CHECK-NEXT:  [[ENTRY:.*:]]3783// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3784// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3785// CHECK-NEXT:    [[VCVTA_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3786// CHECK-NEXT:    [[VCVTA1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtas.v4i32.v4f32(<4 x float> [[VCVTA_I]])3787// CHECK-NEXT:    ret <4 x i32> [[VCVTA1_I]]3788//3789int32x4_t test_vcvtaq_s32_f32(float32x4_t a) {3790  return vcvtaq_s32_f32(a);3791}3792 3793// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtaq_s64_f64(3794// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3795// CHECK-NEXT:  [[ENTRY:.*:]]3796// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3797// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3798// CHECK-NEXT:    [[VCVTA_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3799// CHECK-NEXT:    [[VCVTA1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtas.v2i64.v2f64(<2 x double> [[VCVTA_I]])3800// CHECK-NEXT:    ret <2 x i64> [[VCVTA1_I]]3801//3802int64x2_t test_vcvtaq_s64_f64(float64x2_t a) {3803  return vcvtaq_s64_f64(a);3804}3805 3806// CHECK-LABEL: define dso_local <2 x i32> @test_vcvta_u32_f32(3807// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3808// CHECK-NEXT:  [[ENTRY:.*:]]3809// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3810// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3811// CHECK-NEXT:    [[VCVTA_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3812// CHECK-NEXT:    [[VCVTA1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.fcvtau.v2i32.v2f32(<2 x float> [[VCVTA_I]])3813// CHECK-NEXT:    ret <2 x i32> [[VCVTA1_I]]3814//3815uint32x2_t test_vcvta_u32_f32(float32x2_t a) {3816  return vcvta_u32_f32(a);3817}3818 3819// CHECK-LABEL: define dso_local <4 x i32> @test_vcvtaq_u32_f32(3820// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3821// CHECK-NEXT:  [[ENTRY:.*:]]3822// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3823// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3824// CHECK-NEXT:    [[VCVTA_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3825// CHECK-NEXT:    [[VCVTA1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.fcvtau.v4i32.v4f32(<4 x float> [[VCVTA_I]])3826// CHECK-NEXT:    ret <4 x i32> [[VCVTA1_I]]3827//3828uint32x4_t test_vcvtaq_u32_f32(float32x4_t a) {3829  return vcvtaq_u32_f32(a);3830}3831 3832// CHECK-LABEL: define dso_local <2 x i64> @test_vcvtaq_u64_f64(3833// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3834// CHECK-NEXT:  [[ENTRY:.*:]]3835// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3836// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3837// CHECK-NEXT:    [[VCVTA_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3838// CHECK-NEXT:    [[VCVTA1_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.fcvtau.v2i64.v2f64(<2 x double> [[VCVTA_I]])3839// CHECK-NEXT:    ret <2 x i64> [[VCVTA1_I]]3840//3841uint64x2_t test_vcvtaq_u64_f64(float64x2_t a) {3842  return vcvtaq_u64_f64(a);3843}3844 3845// CHECK-LABEL: define dso_local <2 x float> @test_vrsqrte_f32(3846// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3847// CHECK-NEXT:  [[ENTRY:.*:]]3848// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3849// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3850// CHECK-NEXT:    [[VRSQRTE_V_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3851// CHECK-NEXT:    [[VRSQRTE_V1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float> [[VRSQRTE_V_I]])3852// CHECK-NEXT:    ret <2 x float> [[VRSQRTE_V1_I]]3853//3854float32x2_t test_vrsqrte_f32(float32x2_t a) {3855  return vrsqrte_f32(a);3856}3857 3858// CHECK-LABEL: define dso_local <4 x float> @test_vrsqrteq_f32(3859// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3860// CHECK-NEXT:  [[ENTRY:.*:]]3861// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3862// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3863// CHECK-NEXT:    [[VRSQRTEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3864// CHECK-NEXT:    [[VRSQRTEQ_V1_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float> [[VRSQRTEQ_V_I]])3865// CHECK-NEXT:    ret <4 x float> [[VRSQRTEQ_V1_I]]3866//3867float32x4_t test_vrsqrteq_f32(float32x4_t a) {3868  return vrsqrteq_f32(a);3869}3870 3871// CHECK-LABEL: define dso_local <2 x double> @test_vrsqrteq_f64(3872// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3873// CHECK-NEXT:  [[ENTRY:.*:]]3874// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3875// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3876// CHECK-NEXT:    [[VRSQRTEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3877// CHECK-NEXT:    [[VRSQRTEQ_V1_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frsqrte.v2f64(<2 x double> [[VRSQRTEQ_V_I]])3878// CHECK-NEXT:    ret <2 x double> [[VRSQRTEQ_V1_I]]3879//3880float64x2_t test_vrsqrteq_f64(float64x2_t a) {3881  return vrsqrteq_f64(a);3882}3883 3884// CHECK-LABEL: define dso_local <2 x float> @test_vrecpe_f32(3885// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3886// CHECK-NEXT:  [[ENTRY:.*:]]3887// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3888// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3889// CHECK-NEXT:    [[VRECPE_V_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3890// CHECK-NEXT:    [[VRECPE_V1_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frecpe.v2f32(<2 x float> [[VRECPE_V_I]])3891// CHECK-NEXT:    ret <2 x float> [[VRECPE_V1_I]]3892//3893float32x2_t test_vrecpe_f32(float32x2_t a) {3894  return vrecpe_f32(a);3895}3896 3897// CHECK-LABEL: define dso_local <4 x float> @test_vrecpeq_f32(3898// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3899// CHECK-NEXT:  [[ENTRY:.*:]]3900// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3901// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3902// CHECK-NEXT:    [[VRECPEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3903// CHECK-NEXT:    [[VRECPEQ_V1_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frecpe.v4f32(<4 x float> [[VRECPEQ_V_I]])3904// CHECK-NEXT:    ret <4 x float> [[VRECPEQ_V1_I]]3905//3906float32x4_t test_vrecpeq_f32(float32x4_t a) {3907  return vrecpeq_f32(a);3908}3909 3910// CHECK-LABEL: define dso_local <2 x double> @test_vrecpeq_f64(3911// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3912// CHECK-NEXT:  [[ENTRY:.*:]]3913// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3914// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3915// CHECK-NEXT:    [[VRECPEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3916// CHECK-NEXT:    [[VRECPEQ_V1_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frecpe.v2f64(<2 x double> [[VRECPEQ_V_I]])3917// CHECK-NEXT:    ret <2 x double> [[VRECPEQ_V1_I]]3918//3919float64x2_t test_vrecpeq_f64(float64x2_t a) {3920  return vrecpeq_f64(a);3921}3922 3923// CHECK-LABEL: define dso_local <2 x i32> @test_vrecpe_u32(3924// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {3925// CHECK-NEXT:  [[ENTRY:.*:]]3926// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>3927// CHECK-NEXT:    [[VRECPE_V_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>3928// CHECK-NEXT:    [[VRECPE_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.urecpe.v2i32(<2 x i32> [[VRECPE_V_I]])3929// CHECK-NEXT:    ret <2 x i32> [[VRECPE_V1_I]]3930//3931uint32x2_t test_vrecpe_u32(uint32x2_t a) {3932  return vrecpe_u32(a);3933}3934 3935// CHECK-LABEL: define dso_local <4 x i32> @test_vrecpeq_u32(3936// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {3937// CHECK-NEXT:  [[ENTRY:.*:]]3938// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>3939// CHECK-NEXT:    [[VRECPEQ_V_I:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>3940// CHECK-NEXT:    [[VRECPEQ_V1_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.urecpe.v4i32(<4 x i32> [[VRECPEQ_V_I]])3941// CHECK-NEXT:    ret <4 x i32> [[VRECPEQ_V1_I]]3942//3943uint32x4_t test_vrecpeq_u32(uint32x4_t a) {3944  return vrecpeq_u32(a);3945}3946 3947// CHECK-LABEL: define dso_local <2 x float> @test_vsqrt_f32(3948// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {3949// CHECK-NEXT:  [[ENTRY:.*:]]3950// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>3951// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>3952// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>3953// CHECK-NEXT:    [[VSQRT_I:%.*]] = call <2 x float> @llvm.sqrt.v2f32(<2 x float> [[TMP2]])3954// CHECK-NEXT:    ret <2 x float> [[VSQRT_I]]3955//3956float32x2_t test_vsqrt_f32(float32x2_t a) {3957  return vsqrt_f32(a);3958}3959 3960// CHECK-LABEL: define dso_local <4 x float> @test_vsqrtq_f32(3961// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {3962// CHECK-NEXT:  [[ENTRY:.*:]]3963// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>3964// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>3965// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>3966// CHECK-NEXT:    [[VSQRT_I:%.*]] = call <4 x float> @llvm.sqrt.v4f32(<4 x float> [[TMP2]])3967// CHECK-NEXT:    ret <4 x float> [[VSQRT_I]]3968//3969float32x4_t test_vsqrtq_f32(float32x4_t a) {3970  return vsqrtq_f32(a);3971}3972 3973// CHECK-LABEL: define dso_local <2 x double> @test_vsqrtq_f64(3974// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {3975// CHECK-NEXT:  [[ENTRY:.*:]]3976// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>3977// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>3978// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>3979// CHECK-NEXT:    [[VSQRT_I:%.*]] = call <2 x double> @llvm.sqrt.v2f64(<2 x double> [[TMP2]])3980// CHECK-NEXT:    ret <2 x double> [[VSQRT_I]]3981//3982float64x2_t test_vsqrtq_f64(float64x2_t a) {3983  return vsqrtq_f64(a);3984}3985 3986// CHECK-LABEL: define dso_local <2 x float> @test_vcvt_f32_s32(3987// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {3988// CHECK-NEXT:  [[ENTRY:.*:]]3989// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>3990// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>3991// CHECK-NEXT:    [[VCVT_I:%.*]] = sitofp <2 x i32> [[TMP1]] to <2 x float>3992// CHECK-NEXT:    ret <2 x float> [[VCVT_I]]3993//3994float32x2_t test_vcvt_f32_s32(int32x2_t a) {3995  return vcvt_f32_s32(a);3996}3997 3998// CHECK-LABEL: define dso_local <2 x float> @test_vcvt_f32_u32(3999// CHECK-SAME: <2 x i32> noundef [[A:%.*]]) #[[ATTR0]] {4000// CHECK-NEXT:  [[ENTRY:.*:]]4001// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>4002// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>4003// CHECK-NEXT:    [[VCVT_I:%.*]] = uitofp <2 x i32> [[TMP1]] to <2 x float>4004// CHECK-NEXT:    ret <2 x float> [[VCVT_I]]4005//4006float32x2_t test_vcvt_f32_u32(uint32x2_t a) {4007  return vcvt_f32_u32(a);4008}4009 4010// CHECK-LABEL: define dso_local <4 x float> @test_vcvtq_f32_s32(4011// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {4012// CHECK-NEXT:  [[ENTRY:.*:]]4013// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>4014// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>4015// CHECK-NEXT:    [[VCVT_I:%.*]] = sitofp <4 x i32> [[TMP1]] to <4 x float>4016// CHECK-NEXT:    ret <4 x float> [[VCVT_I]]4017//4018float32x4_t test_vcvtq_f32_s32(int32x4_t a) {4019  return vcvtq_f32_s32(a);4020}4021 4022// CHECK-LABEL: define dso_local <4 x float> @test_vcvtq_f32_u32(4023// CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR0]] {4024// CHECK-NEXT:  [[ENTRY:.*:]]4025// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>4026// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>4027// CHECK-NEXT:    [[VCVT_I:%.*]] = uitofp <4 x i32> [[TMP1]] to <4 x float>4028// CHECK-NEXT:    ret <4 x float> [[VCVT_I]]4029//4030float32x4_t test_vcvtq_f32_u32(uint32x4_t a) {4031  return vcvtq_f32_u32(a);4032}4033 4034// CHECK-LABEL: define dso_local <2 x double> @test_vcvtq_f64_s64(4035// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {4036// CHECK-NEXT:  [[ENTRY:.*:]]4037// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>4038// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>4039// CHECK-NEXT:    [[VCVT_I:%.*]] = sitofp <2 x i64> [[TMP1]] to <2 x double>4040// CHECK-NEXT:    ret <2 x double> [[VCVT_I]]4041//4042float64x2_t test_vcvtq_f64_s64(int64x2_t a) {4043  return vcvtq_f64_s64(a);4044}4045 4046// CHECK-LABEL: define dso_local <2 x double> @test_vcvtq_f64_u64(4047// CHECK-SAME: <2 x i64> noundef [[A:%.*]]) #[[ATTR0]] {4048// CHECK-NEXT:  [[ENTRY:.*:]]4049// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>4050// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>4051// CHECK-NEXT:    [[VCVT_I:%.*]] = uitofp <2 x i64> [[TMP1]] to <2 x double>4052// CHECK-NEXT:    ret <2 x double> [[VCVT_I]]4053//4054float64x2_t test_vcvtq_f64_u64(uint64x2_t a) {4055  return vcvtq_f64_u64(a);4056}4057