brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.3 KiB · 0138fad Raw
274 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 -target-feature +v8.5a\3// RUN: -flax-vector-conversions=none -disable-O0-optnone -emit-llvm -o - %s \4// RUN: | opt -S -passes=mem2reg,sroa \5// RUN: | FileCheck %s6 7// REQUIRES: aarch64-registered-target8 9#include <arm_neon.h>10 11// CHECK-LABEL: define dso_local <2 x float> @test_vrnd32x_f32(12// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0:[0-9]+]] {13// CHECK-NEXT:  [[ENTRY:.*:]]14// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>15// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>16// CHECK-NEXT:    [[VRND32X_F32_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>17// CHECK-NEXT:    [[VRND32X_F321_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frint32x.v2f32(<2 x float> [[VRND32X_F32_I]])18// CHECK-NEXT:    [[VRND32X_F322_I:%.*]] = bitcast <2 x float> [[VRND32X_F321_I]] to <8 x i8>19// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VRND32X_F322_I]] to <2 x i32>20// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <2 x i32> [[TMP2]] to <2 x float>21// CHECK-NEXT:    ret <2 x float> [[TMP3]]22//23float32x2_t test_vrnd32x_f32(float32x2_t a) {24  return vrnd32x_f32(a);25}26 27// CHECK-LABEL: define dso_local <4 x float> @test_vrnd32xq_f32(28// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {29// CHECK-NEXT:  [[ENTRY:.*:]]30// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>31// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>32// CHECK-NEXT:    [[VRND32XQ_F32_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>33// CHECK-NEXT:    [[VRND32XQ_F321_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frint32x.v4f32(<4 x float> [[VRND32XQ_F32_I]])34// CHECK-NEXT:    [[VRND32XQ_F322_I:%.*]] = bitcast <4 x float> [[VRND32XQ_F321_I]] to <16 x i8>35// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VRND32XQ_F322_I]] to <4 x i32>36// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP2]] to <4 x float>37// CHECK-NEXT:    ret <4 x float> [[TMP3]]38//39float32x4_t test_vrnd32xq_f32(float32x4_t a) {40  return vrnd32xq_f32(a);41}42 43// CHECK-LABEL: define dso_local <2 x float> @test_vrnd32z_f32(44// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {45// CHECK-NEXT:  [[ENTRY:.*:]]46// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>47// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>48// CHECK-NEXT:    [[VRND32Z_F32_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>49// CHECK-NEXT:    [[VRND32Z_F321_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frint32z.v2f32(<2 x float> [[VRND32Z_F32_I]])50// CHECK-NEXT:    [[VRND32Z_F322_I:%.*]] = bitcast <2 x float> [[VRND32Z_F321_I]] to <8 x i8>51// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VRND32Z_F322_I]] to <2 x i32>52// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <2 x i32> [[TMP2]] to <2 x float>53// CHECK-NEXT:    ret <2 x float> [[TMP3]]54//55float32x2_t test_vrnd32z_f32(float32x2_t a) {56  return vrnd32z_f32(a);57}58 59// CHECK-LABEL: define dso_local <4 x float> @test_vrnd32zq_f32(60// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {61// CHECK-NEXT:  [[ENTRY:.*:]]62// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>63// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>64// CHECK-NEXT:    [[VRND32ZQ_F32_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>65// CHECK-NEXT:    [[VRND32ZQ_F321_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frint32z.v4f32(<4 x float> [[VRND32ZQ_F32_I]])66// CHECK-NEXT:    [[VRND32ZQ_F322_I:%.*]] = bitcast <4 x float> [[VRND32ZQ_F321_I]] to <16 x i8>67// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VRND32ZQ_F322_I]] to <4 x i32>68// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP2]] to <4 x float>69// CHECK-NEXT:    ret <4 x float> [[TMP3]]70//71float32x4_t test_vrnd32zq_f32(float32x4_t a) {72  return vrnd32zq_f32(a);73}74 75// CHECK-LABEL: define dso_local <2 x float> @test_vrnd64x_f32(76// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {77// CHECK-NEXT:  [[ENTRY:.*:]]78// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>79// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>80// CHECK-NEXT:    [[VRND64X_F32_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>81// CHECK-NEXT:    [[VRND64X_F321_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frint64x.v2f32(<2 x float> [[VRND64X_F32_I]])82// CHECK-NEXT:    [[VRND64X_F322_I:%.*]] = bitcast <2 x float> [[VRND64X_F321_I]] to <8 x i8>83// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VRND64X_F322_I]] to <2 x i32>84// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <2 x i32> [[TMP2]] to <2 x float>85// CHECK-NEXT:    ret <2 x float> [[TMP3]]86//87float32x2_t test_vrnd64x_f32(float32x2_t a) {88  return vrnd64x_f32(a);89}90 91// CHECK-LABEL: define dso_local <4 x float> @test_vrnd64xq_f32(92// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {93// CHECK-NEXT:  [[ENTRY:.*:]]94// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>95// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>96// CHECK-NEXT:    [[VRND64XQ_F32_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>97// CHECK-NEXT:    [[VRND64XQ_F321_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frint64x.v4f32(<4 x float> [[VRND64XQ_F32_I]])98// CHECK-NEXT:    [[VRND64XQ_F322_I:%.*]] = bitcast <4 x float> [[VRND64XQ_F321_I]] to <16 x i8>99// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VRND64XQ_F322_I]] to <4 x i32>100// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP2]] to <4 x float>101// CHECK-NEXT:    ret <4 x float> [[TMP3]]102//103float32x4_t test_vrnd64xq_f32(float32x4_t a) {104  return vrnd64xq_f32(a);105}106 107// CHECK-LABEL: define dso_local <2 x float> @test_vrnd64z_f32(108// CHECK-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {109// CHECK-NEXT:  [[ENTRY:.*:]]110// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[A]] to <2 x i32>111// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>112// CHECK-NEXT:    [[VRND64Z_F32_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <2 x float>113// CHECK-NEXT:    [[VRND64Z_F321_I:%.*]] = call <2 x float> @llvm.aarch64.neon.frint64z.v2f32(<2 x float> [[VRND64Z_F32_I]])114// CHECK-NEXT:    [[VRND64Z_F322_I:%.*]] = bitcast <2 x float> [[VRND64Z_F321_I]] to <8 x i8>115// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VRND64Z_F322_I]] to <2 x i32>116// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <2 x i32> [[TMP2]] to <2 x float>117// CHECK-NEXT:    ret <2 x float> [[TMP3]]118//119float32x2_t test_vrnd64z_f32(float32x2_t a) {120  return vrnd64z_f32(a);121}122 123// CHECK-LABEL: define dso_local <4 x float> @test_vrnd64zq_f32(124// CHECK-SAME: <4 x float> noundef [[A:%.*]]) #[[ATTR0]] {125// CHECK-NEXT:  [[ENTRY:.*:]]126// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[A]] to <4 x i32>127// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>128// CHECK-NEXT:    [[VRND64ZQ_F32_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <4 x float>129// CHECK-NEXT:    [[VRND64ZQ_F321_I:%.*]] = call <4 x float> @llvm.aarch64.neon.frint64z.v4f32(<4 x float> [[VRND64ZQ_F32_I]])130// CHECK-NEXT:    [[VRND64ZQ_F322_I:%.*]] = bitcast <4 x float> [[VRND64ZQ_F321_I]] to <16 x i8>131// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VRND64ZQ_F322_I]] to <4 x i32>132// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP2]] to <4 x float>133// CHECK-NEXT:    ret <4 x float> [[TMP3]]134//135float32x4_t test_vrnd64zq_f32(float32x4_t a) {136  return vrnd64zq_f32(a);137}138 139// CHECK-LABEL: define dso_local <1 x double> @test_vrnd32x_f64(140// CHECK-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {141// CHECK-NEXT:  [[ENTRY:.*:]]142// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i64143// CHECK-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 0144// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>145// CHECK-NEXT:    [[VRND32X_F64_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>146// CHECK-NEXT:    [[VRND32X_F641_I:%.*]] = call <1 x double> @llvm.aarch64.neon.frint32x.v1f64(<1 x double> [[VRND32X_F64_I]])147// CHECK-NEXT:    [[VRND32X_F642_I:%.*]] = bitcast <1 x double> [[VRND32X_F641_I]] to <8 x i8>148// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VRND32X_F642_I]] to i64149// CHECK-NEXT:    [[REF_TMP_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP2]], i32 0150// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[REF_TMP_I_SROA_0_0_VEC_INSERT]] to <1 x double>151// CHECK-NEXT:    ret <1 x double> [[TMP3]]152//153float64x1_t test_vrnd32x_f64(float64x1_t a) {154  return vrnd32x_f64(a);155}156 157// CHECK-LABEL: define dso_local <2 x double> @test_vrnd32xq_f64(158// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {159// CHECK-NEXT:  [[ENTRY:.*:]]160// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>161// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>162// CHECK-NEXT:    [[VRND32XQ_F64_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>163// CHECK-NEXT:    [[VRND32XQ_F641_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frint32x.v2f64(<2 x double> [[VRND32XQ_F64_I]])164// CHECK-NEXT:    [[VRND32XQ_F642_I:%.*]] = bitcast <2 x double> [[VRND32XQ_F641_I]] to <16 x i8>165// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VRND32XQ_F642_I]] to <2 x i64>166// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <2 x i64> [[TMP2]] to <2 x double>167// CHECK-NEXT:    ret <2 x double> [[TMP3]]168//169float64x2_t test_vrnd32xq_f64(float64x2_t a) {170  return vrnd32xq_f64(a);171}172 173// CHECK-LABEL: define dso_local <1 x double> @test_vrnd32z_f64(174// CHECK-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {175// CHECK-NEXT:  [[ENTRY:.*:]]176// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i64177// CHECK-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 0178// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>179// CHECK-NEXT:    [[VRND32Z_F64_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>180// CHECK-NEXT:    [[VRND32Z_F641_I:%.*]] = call <1 x double> @llvm.aarch64.neon.frint32z.v1f64(<1 x double> [[VRND32Z_F64_I]])181// CHECK-NEXT:    [[VRND32Z_F642_I:%.*]] = bitcast <1 x double> [[VRND32Z_F641_I]] to <8 x i8>182// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VRND32Z_F642_I]] to i64183// CHECK-NEXT:    [[REF_TMP_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP2]], i32 0184// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[REF_TMP_I_SROA_0_0_VEC_INSERT]] to <1 x double>185// CHECK-NEXT:    ret <1 x double> [[TMP3]]186//187float64x1_t test_vrnd32z_f64(float64x1_t a) {188  return vrnd32z_f64(a);189}190 191// CHECK-LABEL: define dso_local <2 x double> @test_vrnd32zq_f64(192// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {193// CHECK-NEXT:  [[ENTRY:.*:]]194// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>195// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>196// CHECK-NEXT:    [[VRND32ZQ_F64_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>197// CHECK-NEXT:    [[VRND32ZQ_F641_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frint32z.v2f64(<2 x double> [[VRND32ZQ_F64_I]])198// CHECK-NEXT:    [[VRND32ZQ_F642_I:%.*]] = bitcast <2 x double> [[VRND32ZQ_F641_I]] to <16 x i8>199// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VRND32ZQ_F642_I]] to <2 x i64>200// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <2 x i64> [[TMP2]] to <2 x double>201// CHECK-NEXT:    ret <2 x double> [[TMP3]]202//203float64x2_t test_vrnd32zq_f64(float64x2_t a) {204  return vrnd32zq_f64(a);205}206 207// CHECK-LABEL: define dso_local <1 x double> @test_vrnd64x_f64(208// CHECK-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {209// CHECK-NEXT:  [[ENTRY:.*:]]210// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i64211// CHECK-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 0212// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>213// CHECK-NEXT:    [[VRND64X_F64_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>214// CHECK-NEXT:    [[VRND64X_F641_I:%.*]] = call <1 x double> @llvm.aarch64.neon.frint64x.v1f64(<1 x double> [[VRND64X_F64_I]])215// CHECK-NEXT:    [[VRND64X_F642_I:%.*]] = bitcast <1 x double> [[VRND64X_F641_I]] to <8 x i8>216// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VRND64X_F642_I]] to i64217// CHECK-NEXT:    [[REF_TMP_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP2]], i32 0218// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[REF_TMP_I_SROA_0_0_VEC_INSERT]] to <1 x double>219// CHECK-NEXT:    ret <1 x double> [[TMP3]]220//221float64x1_t test_vrnd64x_f64(float64x1_t a) {222  return vrnd64x_f64(a);223}224 225// CHECK-LABEL: define dso_local <2 x double> @test_vrnd64xq_f64(226// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {227// CHECK-NEXT:  [[ENTRY:.*:]]228// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>229// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>230// CHECK-NEXT:    [[VRND64XQ_F64_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>231// CHECK-NEXT:    [[VRND64XQ_F641_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frint64x.v2f64(<2 x double> [[VRND64XQ_F64_I]])232// CHECK-NEXT:    [[VRND64XQ_F642_I:%.*]] = bitcast <2 x double> [[VRND64XQ_F641_I]] to <16 x i8>233// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VRND64XQ_F642_I]] to <2 x i64>234// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <2 x i64> [[TMP2]] to <2 x double>235// CHECK-NEXT:    ret <2 x double> [[TMP3]]236//237float64x2_t test_vrnd64xq_f64(float64x2_t a) {238  return vrnd64xq_f64(a);239}240 241// CHECK-LABEL: define dso_local <1 x double> @test_vrnd64z_f64(242// CHECK-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {243// CHECK-NEXT:  [[ENTRY:.*:]]244// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i64245// CHECK-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 0246// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>247// CHECK-NEXT:    [[VRND64Z_F64_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>248// CHECK-NEXT:    [[VRND64Z_F641_I:%.*]] = call <1 x double> @llvm.aarch64.neon.frint64z.v1f64(<1 x double> [[VRND64Z_F64_I]])249// CHECK-NEXT:    [[VRND64Z_F642_I:%.*]] = bitcast <1 x double> [[VRND64Z_F641_I]] to <8 x i8>250// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[VRND64Z_F642_I]] to i64251// CHECK-NEXT:    [[REF_TMP_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP2]], i32 0252// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[REF_TMP_I_SROA_0_0_VEC_INSERT]] to <1 x double>253// CHECK-NEXT:    ret <1 x double> [[TMP3]]254//255float64x1_t test_vrnd64z_f64(float64x1_t a) {256  return vrnd64z_f64(a);257}258 259// CHECK-LABEL: define dso_local <2 x double> @test_vrnd64zq_f64(260// CHECK-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {261// CHECK-NEXT:  [[ENTRY:.*:]]262// CHECK-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[A]] to <2 x i64>263// CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>264// CHECK-NEXT:    [[VRND64ZQ_F64_I:%.*]] = bitcast <16 x i8> [[TMP1]] to <2 x double>265// CHECK-NEXT:    [[VRND64ZQ_F641_I:%.*]] = call <2 x double> @llvm.aarch64.neon.frint64z.v2f64(<2 x double> [[VRND64ZQ_F64_I]])266// CHECK-NEXT:    [[VRND64ZQ_F642_I:%.*]] = bitcast <2 x double> [[VRND64ZQ_F641_I]] to <16 x i8>267// CHECK-NEXT:    [[TMP2:%.*]] = bitcast <16 x i8> [[VRND64ZQ_F642_I]] to <2 x i64>268// CHECK-NEXT:    [[TMP3:%.*]] = bitcast <2 x i64> [[TMP2]] to <2 x double>269// CHECK-NEXT:    ret <2 x double> [[TMP3]]270//271float64x2_t test_vrnd64zq_f64(float64x2_t a) {272  return vrnd64zq_f64(a);273}274