brintos

brintos / llvm-project-archived public Read only

0
0
Text · 104.7 KiB · ba32cfb Raw
1774 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 \4// RUN:  -flax-vector-conversions=none -emit-llvm -o - %s | opt -S -passes=mem2reg,sroa \5// RUN: | FileCheck --check-prefixes=UNCONSTRAINED %s6// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \7// RUN:     -disable-O0-optnone \8// RUN:  -ffp-exception-behavior=strict \9// RUN:  -flax-vector-conversions=none -emit-llvm -o - %s | opt -S -passes=mem2reg,sroa \10// RUN: | FileCheck --check-prefixes=CONSTRAINED %s11 12// REQUIRES: aarch64-registered-target13 14// Test new aarch64 intrinsics and types but constrained15 16#include <arm_neon.h>17 18// UNCONSTRAINED-LABEL: define dso_local <2 x float> @test_vadd_f32(19// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0:[0-9]+]] {20// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]21// UNCONSTRAINED-NEXT:    [[ADD_I:%.*]] = fadd <2 x float> [[V1]], [[V2]]22// UNCONSTRAINED-NEXT:    ret <2 x float> [[ADD_I]]23//24// CONSTRAINED-LABEL: define dso_local <2 x float> @test_vadd_f32(25// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0:[0-9]+]] {26// CONSTRAINED-NEXT:  [[ENTRY:.*:]]27// CONSTRAINED-NEXT:    [[ADD_I:%.*]] = call <2 x float> @llvm.experimental.constrained.fadd.v2f32(<2 x float> [[V1]], <2 x float> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3:[0-9]+]]28// CONSTRAINED-NEXT:    ret <2 x float> [[ADD_I]]29//30float32x2_t test_vadd_f32(float32x2_t v1, float32x2_t v2) {31  return vadd_f32(v1, v2);32}33 34// UNCONSTRAINED-LABEL: define dso_local <4 x float> @test_vaddq_f32(35// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {36// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]37// UNCONSTRAINED-NEXT:    [[ADD_I:%.*]] = fadd <4 x float> [[V1]], [[V2]]38// UNCONSTRAINED-NEXT:    ret <4 x float> [[ADD_I]]39//40// CONSTRAINED-LABEL: define dso_local <4 x float> @test_vaddq_f32(41// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {42// CONSTRAINED-NEXT:  [[ENTRY:.*:]]43// CONSTRAINED-NEXT:    [[ADD_I:%.*]] = call <4 x float> @llvm.experimental.constrained.fadd.v4f32(<4 x float> [[V1]], <4 x float> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]44// CONSTRAINED-NEXT:    ret <4 x float> [[ADD_I]]45//46float32x4_t test_vaddq_f32(float32x4_t v1, float32x4_t v2) {47  return vaddq_f32(v1, v2);48}49 50// UNCONSTRAINED-LABEL: define dso_local <2 x float> @test_vsub_f32(51// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {52// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]53// UNCONSTRAINED-NEXT:    [[SUB_I:%.*]] = fsub <2 x float> [[V1]], [[V2]]54// UNCONSTRAINED-NEXT:    ret <2 x float> [[SUB_I]]55//56// CONSTRAINED-LABEL: define dso_local <2 x float> @test_vsub_f32(57// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {58// CONSTRAINED-NEXT:  [[ENTRY:.*:]]59// CONSTRAINED-NEXT:    [[SUB_I:%.*]] = call <2 x float> @llvm.experimental.constrained.fsub.v2f32(<2 x float> [[V1]], <2 x float> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]60// CONSTRAINED-NEXT:    ret <2 x float> [[SUB_I]]61//62float32x2_t test_vsub_f32(float32x2_t v1, float32x2_t v2) {63  return vsub_f32(v1, v2);64}65 66// UNCONSTRAINED-LABEL: define dso_local <4 x float> @test_vsubq_f32(67// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {68// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]69// UNCONSTRAINED-NEXT:    [[SUB_I:%.*]] = fsub <4 x float> [[V1]], [[V2]]70// UNCONSTRAINED-NEXT:    ret <4 x float> [[SUB_I]]71//72// CONSTRAINED-LABEL: define dso_local <4 x float> @test_vsubq_f32(73// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {74// CONSTRAINED-NEXT:  [[ENTRY:.*:]]75// CONSTRAINED-NEXT:    [[SUB_I:%.*]] = call <4 x float> @llvm.experimental.constrained.fsub.v4f32(<4 x float> [[V1]], <4 x float> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]76// CONSTRAINED-NEXT:    ret <4 x float> [[SUB_I]]77//78float32x4_t test_vsubq_f32(float32x4_t v1, float32x4_t v2) {79  return vsubq_f32(v1, v2);80}81 82// UNCONSTRAINED-LABEL: define dso_local <2 x double> @test_vsubq_f64(83// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {84// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]85// UNCONSTRAINED-NEXT:    [[SUB_I:%.*]] = fsub <2 x double> [[V1]], [[V2]]86// UNCONSTRAINED-NEXT:    ret <2 x double> [[SUB_I]]87//88// CONSTRAINED-LABEL: define dso_local <2 x double> @test_vsubq_f64(89// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {90// CONSTRAINED-NEXT:  [[ENTRY:.*:]]91// CONSTRAINED-NEXT:    [[SUB_I:%.*]] = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double> [[V1]], <2 x double> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]92// CONSTRAINED-NEXT:    ret <2 x double> [[SUB_I]]93//94float64x2_t test_vsubq_f64(float64x2_t v1, float64x2_t v2) {95  return vsubq_f64(v1, v2);96}97 98// UNCONSTRAINED-LABEL: define dso_local <2 x float> @test_vmul_f32(99// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {100// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]101// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <2 x float> [[V1]], [[V2]]102// UNCONSTRAINED-NEXT:    ret <2 x float> [[MUL_I]]103//104// CONSTRAINED-LABEL: define dso_local <2 x float> @test_vmul_f32(105// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {106// CONSTRAINED-NEXT:  [[ENTRY:.*:]]107// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <2 x float> @llvm.experimental.constrained.fmul.v2f32(<2 x float> [[V1]], <2 x float> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]108// CONSTRAINED-NEXT:    ret <2 x float> [[MUL_I]]109//110float32x2_t test_vmul_f32(float32x2_t v1, float32x2_t v2) {111  return vmul_f32(v1, v2);112}113 114// UNCONSTRAINED-LABEL: define dso_local <4 x float> @test_vmulq_f32(115// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {116// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]117// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <4 x float> [[V1]], [[V2]]118// UNCONSTRAINED-NEXT:    ret <4 x float> [[MUL_I]]119//120// CONSTRAINED-LABEL: define dso_local <4 x float> @test_vmulq_f32(121// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {122// CONSTRAINED-NEXT:  [[ENTRY:.*:]]123// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float> [[V1]], <4 x float> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]124// CONSTRAINED-NEXT:    ret <4 x float> [[MUL_I]]125//126float32x4_t test_vmulq_f32(float32x4_t v1, float32x4_t v2) {127  return vmulq_f32(v1, v2);128}129 130// UNCONSTRAINED-LABEL: define dso_local <2 x double> @test_vmulq_f64(131// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {132// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]133// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <2 x double> [[V1]], [[V2]]134// UNCONSTRAINED-NEXT:    ret <2 x double> [[MUL_I]]135//136// CONSTRAINED-LABEL: define dso_local <2 x double> @test_vmulq_f64(137// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {138// CONSTRAINED-NEXT:  [[ENTRY:.*:]]139// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> [[V1]], <2 x double> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]140// CONSTRAINED-NEXT:    ret <2 x double> [[MUL_I]]141//142float64x2_t test_vmulq_f64(float64x2_t v1, float64x2_t v2) {143  return vmulq_f64(v1, v2);144}145 146// UNCONSTRAINED-LABEL: define dso_local <2 x float> @test_vmla_f32(147// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]], <2 x float> noundef [[V3:%.*]]) #[[ATTR0]] {148// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]149// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <2 x float> [[V2]], [[V3]]150// UNCONSTRAINED-NEXT:    [[ADD_I:%.*]] = fadd <2 x float> [[V1]], [[MUL_I]]151// UNCONSTRAINED-NEXT:    ret <2 x float> [[ADD_I]]152//153// CONSTRAINED-LABEL: define dso_local <2 x float> @test_vmla_f32(154// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]], <2 x float> noundef [[V3:%.*]]) #[[ATTR0]] {155// CONSTRAINED-NEXT:  [[ENTRY:.*:]]156// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <2 x float> @llvm.experimental.constrained.fmul.v2f32(<2 x float> [[V2]], <2 x float> [[V3]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]157// CONSTRAINED-NEXT:    [[ADD_I:%.*]] = call <2 x float> @llvm.experimental.constrained.fadd.v2f32(<2 x float> [[V1]], <2 x float> [[MUL_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]158// CONSTRAINED-NEXT:    ret <2 x float> [[ADD_I]]159//160float32x2_t test_vmla_f32(float32x2_t v1, float32x2_t v2, float32x2_t v3) {161  return vmla_f32(v1, v2, v3);162}163 164// UNCONSTRAINED-LABEL: define dso_local <4 x float> @test_vmlaq_f32(165// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]], <4 x float> noundef [[V3:%.*]]) #[[ATTR0]] {166// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]167// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <4 x float> [[V2]], [[V3]]168// UNCONSTRAINED-NEXT:    [[ADD_I:%.*]] = fadd <4 x float> [[V1]], [[MUL_I]]169// UNCONSTRAINED-NEXT:    ret <4 x float> [[ADD_I]]170//171// CONSTRAINED-LABEL: define dso_local <4 x float> @test_vmlaq_f32(172// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]], <4 x float> noundef [[V3:%.*]]) #[[ATTR0]] {173// CONSTRAINED-NEXT:  [[ENTRY:.*:]]174// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float> [[V2]], <4 x float> [[V3]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]175// CONSTRAINED-NEXT:    [[ADD_I:%.*]] = call <4 x float> @llvm.experimental.constrained.fadd.v4f32(<4 x float> [[V1]], <4 x float> [[MUL_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]176// CONSTRAINED-NEXT:    ret <4 x float> [[ADD_I]]177//178float32x4_t test_vmlaq_f32(float32x4_t v1, float32x4_t v2, float32x4_t v3) {179  return vmlaq_f32(v1, v2, v3);180}181 182// UNCONSTRAINED-LABEL: define dso_local <2 x double> @test_vmlaq_f64(183// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]], <2 x double> noundef [[V3:%.*]]) #[[ATTR0]] {184// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]185// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <2 x double> [[V2]], [[V3]]186// UNCONSTRAINED-NEXT:    [[ADD_I:%.*]] = fadd <2 x double> [[V1]], [[MUL_I]]187// UNCONSTRAINED-NEXT:    ret <2 x double> [[ADD_I]]188//189// CONSTRAINED-LABEL: define dso_local <2 x double> @test_vmlaq_f64(190// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]], <2 x double> noundef [[V3:%.*]]) #[[ATTR0]] {191// CONSTRAINED-NEXT:  [[ENTRY:.*:]]192// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> [[V2]], <2 x double> [[V3]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]193// CONSTRAINED-NEXT:    [[ADD_I:%.*]] = call <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double> [[V1]], <2 x double> [[MUL_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]194// CONSTRAINED-NEXT:    ret <2 x double> [[ADD_I]]195//196float64x2_t test_vmlaq_f64(float64x2_t v1, float64x2_t v2, float64x2_t v3) {197  return vmlaq_f64(v1, v2, v3);198}199 200// UNCONSTRAINED-LABEL: define dso_local <2 x float> @test_vmls_f32(201// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]], <2 x float> noundef [[V3:%.*]]) #[[ATTR0]] {202// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]203// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <2 x float> [[V2]], [[V3]]204// UNCONSTRAINED-NEXT:    [[SUB_I:%.*]] = fsub <2 x float> [[V1]], [[MUL_I]]205// UNCONSTRAINED-NEXT:    ret <2 x float> [[SUB_I]]206//207// CONSTRAINED-LABEL: define dso_local <2 x float> @test_vmls_f32(208// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]], <2 x float> noundef [[V3:%.*]]) #[[ATTR0]] {209// CONSTRAINED-NEXT:  [[ENTRY:.*:]]210// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <2 x float> @llvm.experimental.constrained.fmul.v2f32(<2 x float> [[V2]], <2 x float> [[V3]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]211// CONSTRAINED-NEXT:    [[SUB_I:%.*]] = call <2 x float> @llvm.experimental.constrained.fsub.v2f32(<2 x float> [[V1]], <2 x float> [[MUL_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]212// CONSTRAINED-NEXT:    ret <2 x float> [[SUB_I]]213//214float32x2_t test_vmls_f32(float32x2_t v1, float32x2_t v2, float32x2_t v3) {215  return vmls_f32(v1, v2, v3);216}217 218// UNCONSTRAINED-LABEL: define dso_local <4 x float> @test_vmlsq_f32(219// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]], <4 x float> noundef [[V3:%.*]]) #[[ATTR0]] {220// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]221// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <4 x float> [[V2]], [[V3]]222// UNCONSTRAINED-NEXT:    [[SUB_I:%.*]] = fsub <4 x float> [[V1]], [[MUL_I]]223// UNCONSTRAINED-NEXT:    ret <4 x float> [[SUB_I]]224//225// CONSTRAINED-LABEL: define dso_local <4 x float> @test_vmlsq_f32(226// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]], <4 x float> noundef [[V3:%.*]]) #[[ATTR0]] {227// CONSTRAINED-NEXT:  [[ENTRY:.*:]]228// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float> [[V2]], <4 x float> [[V3]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]229// CONSTRAINED-NEXT:    [[SUB_I:%.*]] = call <4 x float> @llvm.experimental.constrained.fsub.v4f32(<4 x float> [[V1]], <4 x float> [[MUL_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]230// CONSTRAINED-NEXT:    ret <4 x float> [[SUB_I]]231//232float32x4_t test_vmlsq_f32(float32x4_t v1, float32x4_t v2, float32x4_t v3) {233  return vmlsq_f32(v1, v2, v3);234}235 236// UNCONSTRAINED-LABEL: define dso_local <2 x double> @test_vmlsq_f64(237// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]], <2 x double> noundef [[V3:%.*]]) #[[ATTR0]] {238// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]239// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <2 x double> [[V2]], [[V3]]240// UNCONSTRAINED-NEXT:    [[SUB_I:%.*]] = fsub <2 x double> [[V1]], [[MUL_I]]241// UNCONSTRAINED-NEXT:    ret <2 x double> [[SUB_I]]242//243// CONSTRAINED-LABEL: define dso_local <2 x double> @test_vmlsq_f64(244// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]], <2 x double> noundef [[V3:%.*]]) #[[ATTR0]] {245// CONSTRAINED-NEXT:  [[ENTRY:.*:]]246// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> [[V2]], <2 x double> [[V3]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]247// CONSTRAINED-NEXT:    [[SUB_I:%.*]] = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double> [[V1]], <2 x double> [[MUL_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]248// CONSTRAINED-NEXT:    ret <2 x double> [[SUB_I]]249//250float64x2_t test_vmlsq_f64(float64x2_t v1, float64x2_t v2, float64x2_t v3) {251  return vmlsq_f64(v1, v2, v3);252}253 254// UNCONSTRAINED-LABEL: define dso_local <2 x float> @test_vfma_f32(255// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]], <2 x float> noundef [[V3:%.*]]) #[[ATTR0]] {256// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]257// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[V1]] to <2 x i32>258// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <2 x float> [[V2]] to <2 x i32>259// UNCONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <2 x float> [[V3]] to <2 x i32>260// UNCONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>261// UNCONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP1]] to <8 x i8>262// UNCONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <2 x i32> [[TMP2]] to <8 x i8>263// UNCONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP3]] to <2 x float>264// UNCONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP4]] to <2 x float>265// UNCONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP5]] to <2 x float>266// UNCONSTRAINED-NEXT:    [[TMP9:%.*]] = call <2 x float> @llvm.fma.v2f32(<2 x float> [[TMP7]], <2 x float> [[TMP8]], <2 x float> [[TMP6]])267// UNCONSTRAINED-NEXT:    ret <2 x float> [[TMP9]]268//269// CONSTRAINED-LABEL: define dso_local <2 x float> @test_vfma_f32(270// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]], <2 x float> noundef [[V3:%.*]]) #[[ATTR0]] {271// CONSTRAINED-NEXT:  [[ENTRY:.*:]]272// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[V1]] to <2 x i32>273// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <2 x float> [[V2]] to <2 x i32>274// CONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <2 x float> [[V3]] to <2 x i32>275// CONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>276// CONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP1]] to <8 x i8>277// CONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <2 x i32> [[TMP2]] to <8 x i8>278// CONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP3]] to <2 x float>279// CONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP4]] to <2 x float>280// CONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP5]] to <2 x float>281// CONSTRAINED-NEXT:    [[TMP9:%.*]] = call <2 x float> @llvm.experimental.constrained.fma.v2f32(<2 x float> [[TMP7]], <2 x float> [[TMP8]], <2 x float> [[TMP6]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]282// CONSTRAINED-NEXT:    ret <2 x float> [[TMP9]]283//284float32x2_t test_vfma_f32(float32x2_t v1, float32x2_t v2, float32x2_t v3) {285  return vfma_f32(v1, v2, v3);286}287 288// UNCONSTRAINED-LABEL: define dso_local <4 x float> @test_vfmaq_f32(289// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]], <4 x float> noundef [[V3:%.*]]) #[[ATTR0]] {290// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]291// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[V1]] to <4 x i32>292// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <4 x float> [[V2]] to <4 x i32>293// UNCONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <4 x float> [[V3]] to <4 x i32>294// UNCONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>295// UNCONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <4 x i32> [[TMP1]] to <16 x i8>296// UNCONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <4 x i32> [[TMP2]] to <16 x i8>297// UNCONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <16 x i8> [[TMP3]] to <4 x float>298// UNCONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <16 x i8> [[TMP4]] to <4 x float>299// UNCONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <16 x i8> [[TMP5]] to <4 x float>300// UNCONSTRAINED-NEXT:    [[TMP9:%.*]] = call <4 x float> @llvm.fma.v4f32(<4 x float> [[TMP7]], <4 x float> [[TMP8]], <4 x float> [[TMP6]])301// UNCONSTRAINED-NEXT:    ret <4 x float> [[TMP9]]302//303// CONSTRAINED-LABEL: define dso_local <4 x float> @test_vfmaq_f32(304// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]], <4 x float> noundef [[V3:%.*]]) #[[ATTR0]] {305// CONSTRAINED-NEXT:  [[ENTRY:.*:]]306// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[V1]] to <4 x i32>307// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <4 x float> [[V2]] to <4 x i32>308// CONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <4 x float> [[V3]] to <4 x i32>309// CONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>310// CONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <4 x i32> [[TMP1]] to <16 x i8>311// CONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <4 x i32> [[TMP2]] to <16 x i8>312// CONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <16 x i8> [[TMP3]] to <4 x float>313// CONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <16 x i8> [[TMP4]] to <4 x float>314// CONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <16 x i8> [[TMP5]] to <4 x float>315// CONSTRAINED-NEXT:    [[TMP9:%.*]] = call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> [[TMP7]], <4 x float> [[TMP8]], <4 x float> [[TMP6]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]316// CONSTRAINED-NEXT:    ret <4 x float> [[TMP9]]317//318float32x4_t test_vfmaq_f32(float32x4_t v1, float32x4_t v2, float32x4_t v3) {319  return vfmaq_f32(v1, v2, v3);320}321 322// UNCONSTRAINED-LABEL: define dso_local <2 x double> @test_vfmaq_f64(323// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]], <2 x double> noundef [[V3:%.*]]) #[[ATTR0]] {324// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]325// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[V1]] to <2 x i64>326// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <2 x double> [[V2]] to <2 x i64>327// UNCONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <2 x double> [[V3]] to <2 x i64>328// UNCONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>329// UNCONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <2 x i64> [[TMP1]] to <16 x i8>330// UNCONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <2 x i64> [[TMP2]] to <16 x i8>331// UNCONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <16 x i8> [[TMP3]] to <2 x double>332// UNCONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <16 x i8> [[TMP4]] to <2 x double>333// UNCONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <16 x i8> [[TMP5]] to <2 x double>334// UNCONSTRAINED-NEXT:    [[TMP9:%.*]] = call <2 x double> @llvm.fma.v2f64(<2 x double> [[TMP7]], <2 x double> [[TMP8]], <2 x double> [[TMP6]])335// UNCONSTRAINED-NEXT:    ret <2 x double> [[TMP9]]336//337// CONSTRAINED-LABEL: define dso_local <2 x double> @test_vfmaq_f64(338// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]], <2 x double> noundef [[V3:%.*]]) #[[ATTR0]] {339// CONSTRAINED-NEXT:  [[ENTRY:.*:]]340// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[V1]] to <2 x i64>341// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <2 x double> [[V2]] to <2 x i64>342// CONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <2 x double> [[V3]] to <2 x i64>343// CONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>344// CONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <2 x i64> [[TMP1]] to <16 x i8>345// CONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <2 x i64> [[TMP2]] to <16 x i8>346// CONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <16 x i8> [[TMP3]] to <2 x double>347// CONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <16 x i8> [[TMP4]] to <2 x double>348// CONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <16 x i8> [[TMP5]] to <2 x double>349// CONSTRAINED-NEXT:    [[TMP9:%.*]] = call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> [[TMP7]], <2 x double> [[TMP8]], <2 x double> [[TMP6]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]350// CONSTRAINED-NEXT:    ret <2 x double> [[TMP9]]351//352float64x2_t test_vfmaq_f64(float64x2_t v1, float64x2_t v2, float64x2_t v3) {353  return vfmaq_f64(v1, v2, v3);354}355 356// UNCONSTRAINED-LABEL: define dso_local <2 x float> @test_vfms_f32(357// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]], <2 x float> noundef [[V3:%.*]]) #[[ATTR0]] {358// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]359// UNCONSTRAINED-NEXT:    [[FNEG_I:%.*]] = fneg <2 x float> [[V2]]360// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[V1]] to <2 x i32>361// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <2 x float> [[FNEG_I]] to <2 x i32>362// UNCONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <2 x float> [[V3]] to <2 x i32>363// UNCONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>364// UNCONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP1]] to <8 x i8>365// UNCONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <2 x i32> [[TMP2]] to <8 x i8>366// UNCONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP3]] to <2 x float>367// UNCONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP4]] to <2 x float>368// UNCONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP5]] to <2 x float>369// UNCONSTRAINED-NEXT:    [[TMP9:%.*]] = call <2 x float> @llvm.fma.v2f32(<2 x float> [[TMP7]], <2 x float> [[TMP8]], <2 x float> [[TMP6]])370// UNCONSTRAINED-NEXT:    ret <2 x float> [[TMP9]]371//372// CONSTRAINED-LABEL: define dso_local <2 x float> @test_vfms_f32(373// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]], <2 x float> noundef [[V3:%.*]]) #[[ATTR0]] {374// CONSTRAINED-NEXT:  [[ENTRY:.*:]]375// CONSTRAINED-NEXT:    [[FNEG_I:%.*]] = fneg <2 x float> [[V2]]376// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <2 x float> [[V1]] to <2 x i32>377// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <2 x float> [[FNEG_I]] to <2 x i32>378// CONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <2 x float> [[V3]] to <2 x i32>379// CONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <2 x i32> [[TMP0]] to <8 x i8>380// CONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP1]] to <8 x i8>381// CONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <2 x i32> [[TMP2]] to <8 x i8>382// CONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP3]] to <2 x float>383// CONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP4]] to <2 x float>384// CONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP5]] to <2 x float>385// CONSTRAINED-NEXT:    [[TMP9:%.*]] = call <2 x float> @llvm.experimental.constrained.fma.v2f32(<2 x float> [[TMP7]], <2 x float> [[TMP8]], <2 x float> [[TMP6]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]386// CONSTRAINED-NEXT:    ret <2 x float> [[TMP9]]387//388float32x2_t test_vfms_f32(float32x2_t v1, float32x2_t v2, float32x2_t v3) {389  return vfms_f32(v1, v2, v3);390}391 392// UNCONSTRAINED-LABEL: define dso_local <4 x float> @test_vfmsq_f32(393// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]], <4 x float> noundef [[V3:%.*]]) #[[ATTR0]] {394// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]395// UNCONSTRAINED-NEXT:    [[FNEG_I:%.*]] = fneg <4 x float> [[V2]]396// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[V1]] to <4 x i32>397// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <4 x float> [[FNEG_I]] to <4 x i32>398// UNCONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <4 x float> [[V3]] to <4 x i32>399// UNCONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>400// UNCONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <4 x i32> [[TMP1]] to <16 x i8>401// UNCONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <4 x i32> [[TMP2]] to <16 x i8>402// UNCONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <16 x i8> [[TMP3]] to <4 x float>403// UNCONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <16 x i8> [[TMP4]] to <4 x float>404// UNCONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <16 x i8> [[TMP5]] to <4 x float>405// UNCONSTRAINED-NEXT:    [[TMP9:%.*]] = call <4 x float> @llvm.fma.v4f32(<4 x float> [[TMP7]], <4 x float> [[TMP8]], <4 x float> [[TMP6]])406// UNCONSTRAINED-NEXT:    ret <4 x float> [[TMP9]]407//408// CONSTRAINED-LABEL: define dso_local <4 x float> @test_vfmsq_f32(409// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]], <4 x float> noundef [[V3:%.*]]) #[[ATTR0]] {410// CONSTRAINED-NEXT:  [[ENTRY:.*:]]411// CONSTRAINED-NEXT:    [[FNEG_I:%.*]] = fneg <4 x float> [[V2]]412// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <4 x float> [[V1]] to <4 x i32>413// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <4 x float> [[FNEG_I]] to <4 x i32>414// CONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <4 x float> [[V3]] to <4 x i32>415// CONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP0]] to <16 x i8>416// CONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <4 x i32> [[TMP1]] to <16 x i8>417// CONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <4 x i32> [[TMP2]] to <16 x i8>418// CONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <16 x i8> [[TMP3]] to <4 x float>419// CONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <16 x i8> [[TMP4]] to <4 x float>420// CONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <16 x i8> [[TMP5]] to <4 x float>421// CONSTRAINED-NEXT:    [[TMP9:%.*]] = call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> [[TMP7]], <4 x float> [[TMP8]], <4 x float> [[TMP6]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]422// CONSTRAINED-NEXT:    ret <4 x float> [[TMP9]]423//424float32x4_t test_vfmsq_f32(float32x4_t v1, float32x4_t v2, float32x4_t v3) {425  return vfmsq_f32(v1, v2, v3);426}427 428// UNCONSTRAINED-LABEL: define dso_local <2 x double> @test_vfmsq_f64(429// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]], <2 x double> noundef [[V3:%.*]]) #[[ATTR0]] {430// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]431// UNCONSTRAINED-NEXT:    [[FNEG_I:%.*]] = fneg <2 x double> [[V2]]432// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[V1]] to <2 x i64>433// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <2 x double> [[FNEG_I]] to <2 x i64>434// UNCONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <2 x double> [[V3]] to <2 x i64>435// UNCONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>436// UNCONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <2 x i64> [[TMP1]] to <16 x i8>437// UNCONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <2 x i64> [[TMP2]] to <16 x i8>438// UNCONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <16 x i8> [[TMP3]] to <2 x double>439// UNCONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <16 x i8> [[TMP4]] to <2 x double>440// UNCONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <16 x i8> [[TMP5]] to <2 x double>441// UNCONSTRAINED-NEXT:    [[TMP9:%.*]] = call <2 x double> @llvm.fma.v2f64(<2 x double> [[TMP7]], <2 x double> [[TMP8]], <2 x double> [[TMP6]])442// UNCONSTRAINED-NEXT:    ret <2 x double> [[TMP9]]443//444// CONSTRAINED-LABEL: define dso_local <2 x double> @test_vfmsq_f64(445// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]], <2 x double> noundef [[V3:%.*]]) #[[ATTR0]] {446// CONSTRAINED-NEXT:  [[ENTRY:.*:]]447// CONSTRAINED-NEXT:    [[FNEG_I:%.*]] = fneg <2 x double> [[V2]]448// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <2 x double> [[V1]] to <2 x i64>449// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <2 x double> [[FNEG_I]] to <2 x i64>450// CONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <2 x double> [[V3]] to <2 x i64>451// CONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <2 x i64> [[TMP0]] to <16 x i8>452// CONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <2 x i64> [[TMP1]] to <16 x i8>453// CONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <2 x i64> [[TMP2]] to <16 x i8>454// CONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <16 x i8> [[TMP3]] to <2 x double>455// CONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <16 x i8> [[TMP4]] to <2 x double>456// CONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <16 x i8> [[TMP5]] to <2 x double>457// CONSTRAINED-NEXT:    [[TMP9:%.*]] = call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> [[TMP7]], <2 x double> [[TMP8]], <2 x double> [[TMP6]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]458// CONSTRAINED-NEXT:    ret <2 x double> [[TMP9]]459//460float64x2_t test_vfmsq_f64(float64x2_t v1, float64x2_t v2, float64x2_t v3) {461  return vfmsq_f64(v1, v2, v3);462}463 464// UNCONSTRAINED-LABEL: define dso_local <2 x double> @test_vdivq_f64(465// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {466// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]467// UNCONSTRAINED-NEXT:    [[DIV_I:%.*]] = fdiv <2 x double> [[V1]], [[V2]]468// UNCONSTRAINED-NEXT:    ret <2 x double> [[DIV_I]]469//470// CONSTRAINED-LABEL: define dso_local <2 x double> @test_vdivq_f64(471// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {472// CONSTRAINED-NEXT:  [[ENTRY:.*:]]473// CONSTRAINED-NEXT:    [[DIV_I:%.*]] = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double> [[V1]], <2 x double> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]474// CONSTRAINED-NEXT:    ret <2 x double> [[DIV_I]]475//476float64x2_t test_vdivq_f64(float64x2_t v1, float64x2_t v2) {477  return vdivq_f64(v1, v2);478}479 480// UNCONSTRAINED-LABEL: define dso_local <4 x float> @test_vdivq_f32(481// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {482// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]483// UNCONSTRAINED-NEXT:    [[DIV_I:%.*]] = fdiv <4 x float> [[V1]], [[V2]]484// UNCONSTRAINED-NEXT:    ret <4 x float> [[DIV_I]]485//486// CONSTRAINED-LABEL: define dso_local <4 x float> @test_vdivq_f32(487// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {488// CONSTRAINED-NEXT:  [[ENTRY:.*:]]489// CONSTRAINED-NEXT:    [[DIV_I:%.*]] = call <4 x float> @llvm.experimental.constrained.fdiv.v4f32(<4 x float> [[V1]], <4 x float> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]490// CONSTRAINED-NEXT:    ret <4 x float> [[DIV_I]]491//492float32x4_t test_vdivq_f32(float32x4_t v1, float32x4_t v2) {493  return vdivq_f32(v1, v2);494}495 496// UNCONSTRAINED-LABEL: define dso_local <2 x float> @test_vdiv_f32(497// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {498// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]499// UNCONSTRAINED-NEXT:    [[DIV_I:%.*]] = fdiv <2 x float> [[V1]], [[V2]]500// UNCONSTRAINED-NEXT:    ret <2 x float> [[DIV_I]]501//502// CONSTRAINED-LABEL: define dso_local <2 x float> @test_vdiv_f32(503// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {504// CONSTRAINED-NEXT:  [[ENTRY:.*:]]505// CONSTRAINED-NEXT:    [[DIV_I:%.*]] = call <2 x float> @llvm.experimental.constrained.fdiv.v2f32(<2 x float> [[V1]], <2 x float> [[V2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]506// CONSTRAINED-NEXT:    ret <2 x float> [[DIV_I]]507//508float32x2_t test_vdiv_f32(float32x2_t v1, float32x2_t v2) {509  return vdiv_f32(v1, v2);510}511 512// UNCONSTRAINED-LABEL: define dso_local <2 x i32> @test_vceq_f32(513// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {514// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]515// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp oeq <2 x float> [[V1]], [[V2]]516// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>517// UNCONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]518//519// CONSTRAINED-LABEL: define dso_local <2 x i32> @test_vceq_f32(520// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {521// CONSTRAINED-NEXT:  [[ENTRY:.*:]]522// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f32(<2 x float> [[V1]], <2 x float> [[V2]], metadata !"oeq", metadata !"fpexcept.strict") #[[ATTR3]]523// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>524// CONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]525//526uint32x2_t test_vceq_f32(float32x2_t v1, float32x2_t v2) {527  return vceq_f32(v1, v2);528}529 530// UNCONSTRAINED-LABEL: define dso_local <1 x i64> @test_vceq_f64(531// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {532// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]533// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp oeq <1 x double> [[A]], [[B]]534// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>535// UNCONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]536//537// CONSTRAINED-LABEL: define dso_local <1 x i64> @test_vceq_f64(538// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {539// CONSTRAINED-NEXT:  [[ENTRY:.*:]]540// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> [[A]], <1 x double> [[B]], metadata !"oeq", metadata !"fpexcept.strict") #[[ATTR3]]541// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>542// CONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]543//544uint64x1_t test_vceq_f64(float64x1_t a, float64x1_t b) {545  return vceq_f64(a, b);546}547 548// UNCONSTRAINED-LABEL: define dso_local <4 x i32> @test_vceqq_f32(549// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {550// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]551// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp oeq <4 x float> [[V1]], [[V2]]552// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>553// UNCONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]554//555// CONSTRAINED-LABEL: define dso_local <4 x i32> @test_vceqq_f32(556// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {557// CONSTRAINED-NEXT:  [[ENTRY:.*:]]558// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float> [[V1]], <4 x float> [[V2]], metadata !"oeq", metadata !"fpexcept.strict") #[[ATTR3]]559// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>560// CONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]561//562uint32x4_t test_vceqq_f32(float32x4_t v1, float32x4_t v2) {563  return vceqq_f32(v1, v2);564}565 566// UNCONSTRAINED-LABEL: define dso_local <2 x i64> @test_vceqq_f64(567// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {568// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]569// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp oeq <2 x double> [[V1]], [[V2]]570// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>571// UNCONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]572//573// CONSTRAINED-LABEL: define dso_local <2 x i64> @test_vceqq_f64(574// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {575// CONSTRAINED-NEXT:  [[ENTRY:.*:]]576// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> [[V1]], <2 x double> [[V2]], metadata !"oeq", metadata !"fpexcept.strict") #[[ATTR3]]577// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>578// CONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]579//580uint64x2_t test_vceqq_f64(float64x2_t v1, float64x2_t v2) {581  return vceqq_f64(v1, v2);582}583 584// UNCONSTRAINED-LABEL: define dso_local <2 x i32> @test_vcge_f32(585// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {586// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]587// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp oge <2 x float> [[V1]], [[V2]]588// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>589// UNCONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]590//591// CONSTRAINED-LABEL: define dso_local <2 x i32> @test_vcge_f32(592// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {593// CONSTRAINED-NEXT:  [[ENTRY:.*:]]594// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> [[V1]], <2 x float> [[V2]], metadata !"oge", metadata !"fpexcept.strict") #[[ATTR3]]595// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>596// CONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]597//598uint32x2_t test_vcge_f32(float32x2_t v1, float32x2_t v2) {599  return vcge_f32(v1, v2);600}601 602// UNCONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcge_f64(603// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {604// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]605// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp oge <1 x double> [[A]], [[B]]606// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>607// UNCONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]608//609// CONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcge_f64(610// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {611// CONSTRAINED-NEXT:  [[ENTRY:.*:]]612// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> [[A]], <1 x double> [[B]], metadata !"oge", metadata !"fpexcept.strict") #[[ATTR3]]613// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>614// CONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]615//616uint64x1_t test_vcge_f64(float64x1_t a, float64x1_t b) {617  return vcge_f64(a, b);618}619 620// UNCONSTRAINED-LABEL: define dso_local <4 x i32> @test_vcgeq_f32(621// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {622// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]623// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp oge <4 x float> [[V1]], [[V2]]624// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>625// UNCONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]626//627// CONSTRAINED-LABEL: define dso_local <4 x i32> @test_vcgeq_f32(628// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {629// CONSTRAINED-NEXT:  [[ENTRY:.*:]]630// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> [[V1]], <4 x float> [[V2]], metadata !"oge", metadata !"fpexcept.strict") #[[ATTR3]]631// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>632// CONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]633//634uint32x4_t test_vcgeq_f32(float32x4_t v1, float32x4_t v2) {635  return vcgeq_f32(v1, v2);636}637 638// UNCONSTRAINED-LABEL: define dso_local <2 x i64> @test_vcgeq_f64(639// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {640// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]641// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp oge <2 x double> [[V1]], [[V2]]642// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>643// UNCONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]644//645// CONSTRAINED-LABEL: define dso_local <2 x i64> @test_vcgeq_f64(646// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {647// CONSTRAINED-NEXT:  [[ENTRY:.*:]]648// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> [[V1]], <2 x double> [[V2]], metadata !"oge", metadata !"fpexcept.strict") #[[ATTR3]]649// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>650// CONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]651//652uint64x2_t test_vcgeq_f64(float64x2_t v1, float64x2_t v2) {653  return vcgeq_f64(v1, v2);654}655 656// UNCONSTRAINED-LABEL: define dso_local <2 x i32> @test_vcle_f32(657// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {658// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]659// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp ole <2 x float> [[V1]], [[V2]]660// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>661// UNCONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]662//663// CONSTRAINED-LABEL: define dso_local <2 x i32> @test_vcle_f32(664// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {665// CONSTRAINED-NEXT:  [[ENTRY:.*:]]666// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> [[V1]], <2 x float> [[V2]], metadata !"ole", metadata !"fpexcept.strict") #[[ATTR3]]667// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>668// CONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]669//670uint32x2_t test_vcle_f32(float32x2_t v1, float32x2_t v2) {671  return vcle_f32(v1, v2);672}673 674// UNCONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcle_f64(675// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {676// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]677// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp ole <1 x double> [[A]], [[B]]678// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>679// UNCONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]680//681// CONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcle_f64(682// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {683// CONSTRAINED-NEXT:  [[ENTRY:.*:]]684// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> [[A]], <1 x double> [[B]], metadata !"ole", metadata !"fpexcept.strict") #[[ATTR3]]685// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>686// CONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]687//688uint64x1_t test_vcle_f64(float64x1_t a, float64x1_t b) {689  return vcle_f64(a, b);690}691 692// UNCONSTRAINED-LABEL: define dso_local <4 x i32> @test_vcleq_f32(693// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {694// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]695// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp ole <4 x float> [[V1]], [[V2]]696// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>697// UNCONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]698//699// CONSTRAINED-LABEL: define dso_local <4 x i32> @test_vcleq_f32(700// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {701// CONSTRAINED-NEXT:  [[ENTRY:.*:]]702// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> [[V1]], <4 x float> [[V2]], metadata !"ole", metadata !"fpexcept.strict") #[[ATTR3]]703// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>704// CONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]705//706uint32x4_t test_vcleq_f32(float32x4_t v1, float32x4_t v2) {707  return vcleq_f32(v1, v2);708}709 710// UNCONSTRAINED-LABEL: define dso_local <2 x i64> @test_vcleq_f64(711// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {712// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]713// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp ole <2 x double> [[V1]], [[V2]]714// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>715// UNCONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]716//717// CONSTRAINED-LABEL: define dso_local <2 x i64> @test_vcleq_f64(718// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {719// CONSTRAINED-NEXT:  [[ENTRY:.*:]]720// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> [[V1]], <2 x double> [[V2]], metadata !"ole", metadata !"fpexcept.strict") #[[ATTR3]]721// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>722// CONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]723//724uint64x2_t test_vcleq_f64(float64x2_t v1, float64x2_t v2) {725  return vcleq_f64(v1, v2);726}727 728// UNCONSTRAINED-LABEL: define dso_local <2 x i32> @test_vcgt_f32(729// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {730// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]731// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp ogt <2 x float> [[V1]], [[V2]]732// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>733// UNCONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]734//735// CONSTRAINED-LABEL: define dso_local <2 x i32> @test_vcgt_f32(736// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {737// CONSTRAINED-NEXT:  [[ENTRY:.*:]]738// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> [[V1]], <2 x float> [[V2]], metadata !"ogt", metadata !"fpexcept.strict") #[[ATTR3]]739// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>740// CONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]741//742uint32x2_t test_vcgt_f32(float32x2_t v1, float32x2_t v2) {743  return vcgt_f32(v1, v2);744}745 746// UNCONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcgt_f64(747// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {748// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]749// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp ogt <1 x double> [[A]], [[B]]750// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>751// UNCONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]752//753// CONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcgt_f64(754// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {755// CONSTRAINED-NEXT:  [[ENTRY:.*:]]756// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> [[A]], <1 x double> [[B]], metadata !"ogt", metadata !"fpexcept.strict") #[[ATTR3]]757// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>758// CONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]759//760uint64x1_t test_vcgt_f64(float64x1_t a, float64x1_t b) {761  return vcgt_f64(a, b);762}763 764// UNCONSTRAINED-LABEL: define dso_local <4 x i32> @test_vcgtq_f32(765// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {766// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]767// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp ogt <4 x float> [[V1]], [[V2]]768// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>769// UNCONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]770//771// CONSTRAINED-LABEL: define dso_local <4 x i32> @test_vcgtq_f32(772// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {773// CONSTRAINED-NEXT:  [[ENTRY:.*:]]774// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> [[V1]], <4 x float> [[V2]], metadata !"ogt", metadata !"fpexcept.strict") #[[ATTR3]]775// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>776// CONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]777//778uint32x4_t test_vcgtq_f32(float32x4_t v1, float32x4_t v2) {779  return vcgtq_f32(v1, v2);780}781 782// UNCONSTRAINED-LABEL: define dso_local <2 x i64> @test_vcgtq_f64(783// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {784// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]785// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp ogt <2 x double> [[V1]], [[V2]]786// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>787// UNCONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]788//789// CONSTRAINED-LABEL: define dso_local <2 x i64> @test_vcgtq_f64(790// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {791// CONSTRAINED-NEXT:  [[ENTRY:.*:]]792// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> [[V1]], <2 x double> [[V2]], metadata !"ogt", metadata !"fpexcept.strict") #[[ATTR3]]793// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>794// CONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]795//796uint64x2_t test_vcgtq_f64(float64x2_t v1, float64x2_t v2) {797  return vcgtq_f64(v1, v2);798}799 800// UNCONSTRAINED-LABEL: define dso_local <2 x i32> @test_vclt_f32(801// UNCONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {802// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]803// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp olt <2 x float> [[V1]], [[V2]]804// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>805// UNCONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]806//807// CONSTRAINED-LABEL: define dso_local <2 x i32> @test_vclt_f32(808// CONSTRAINED-SAME: <2 x float> noundef [[V1:%.*]], <2 x float> noundef [[V2:%.*]]) #[[ATTR0]] {809// CONSTRAINED-NEXT:  [[ENTRY:.*:]]810// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f32(<2 x float> [[V1]], <2 x float> [[V2]], metadata !"olt", metadata !"fpexcept.strict") #[[ATTR3]]811// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i32>812// CONSTRAINED-NEXT:    ret <2 x i32> [[SEXT_I]]813//814uint32x2_t test_vclt_f32(float32x2_t v1, float32x2_t v2) {815  return vclt_f32(v1, v2);816}817 818// UNCONSTRAINED-LABEL: define dso_local <1 x i64> @test_vclt_f64(819// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {820// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]821// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp olt <1 x double> [[A]], [[B]]822// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>823// UNCONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]824//825// CONSTRAINED-LABEL: define dso_local <1 x i64> @test_vclt_f64(826// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {827// CONSTRAINED-NEXT:  [[ENTRY:.*:]]828// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> [[A]], <1 x double> [[B]], metadata !"olt", metadata !"fpexcept.strict") #[[ATTR3]]829// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <1 x i1> [[CMP_I]] to <1 x i64>830// CONSTRAINED-NEXT:    ret <1 x i64> [[SEXT_I]]831//832uint64x1_t test_vclt_f64(float64x1_t a, float64x1_t b) {833  return vclt_f64(a, b);834}835 836// UNCONSTRAINED-LABEL: define dso_local <4 x i32> @test_vcltq_f32(837// UNCONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {838// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]839// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp olt <4 x float> [[V1]], [[V2]]840// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>841// UNCONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]842//843// CONSTRAINED-LABEL: define dso_local <4 x i32> @test_vcltq_f32(844// CONSTRAINED-SAME: <4 x float> noundef [[V1:%.*]], <4 x float> noundef [[V2:%.*]]) #[[ATTR0]] {845// CONSTRAINED-NEXT:  [[ENTRY:.*:]]846// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> [[V1]], <4 x float> [[V2]], metadata !"olt", metadata !"fpexcept.strict") #[[ATTR3]]847// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <4 x i1> [[CMP_I]] to <4 x i32>848// CONSTRAINED-NEXT:    ret <4 x i32> [[SEXT_I]]849//850uint32x4_t test_vcltq_f32(float32x4_t v1, float32x4_t v2) {851  return vcltq_f32(v1, v2);852}853 854// UNCONSTRAINED-LABEL: define dso_local <2 x i64> @test_vcltq_f64(855// UNCONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {856// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]857// UNCONSTRAINED-NEXT:    [[CMP_I:%.*]] = fcmp olt <2 x double> [[V1]], [[V2]]858// UNCONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>859// UNCONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]860//861// CONSTRAINED-LABEL: define dso_local <2 x i64> @test_vcltq_f64(862// CONSTRAINED-SAME: <2 x double> noundef [[V1:%.*]], <2 x double> noundef [[V2:%.*]]) #[[ATTR0]] {863// CONSTRAINED-NEXT:  [[ENTRY:.*:]]864// CONSTRAINED-NEXT:    [[CMP_I:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> [[V1]], <2 x double> [[V2]], metadata !"olt", metadata !"fpexcept.strict") #[[ATTR3]]865// CONSTRAINED-NEXT:    [[SEXT_I:%.*]] = sext <2 x i1> [[CMP_I]] to <2 x i64>866// CONSTRAINED-NEXT:    ret <2 x i64> [[SEXT_I]]867//868uint64x2_t test_vcltq_f64(float64x2_t v1, float64x2_t v2) {869  return vcltq_f64(v1, v2);870}871 872// UNCONSTRAINED-LABEL: define dso_local float @test_vpadds_f32(873// UNCONSTRAINED-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {874// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]875// UNCONSTRAINED-NEXT:    [[LANE0_I:%.*]] = extractelement <2 x float> [[A]], i64 0876// UNCONSTRAINED-NEXT:    [[LANE1_I:%.*]] = extractelement <2 x float> [[A]], i64 1877// UNCONSTRAINED-NEXT:    [[VPADDD_I:%.*]] = fadd float [[LANE0_I]], [[LANE1_I]]878// UNCONSTRAINED-NEXT:    ret float [[VPADDD_I]]879//880// CONSTRAINED-LABEL: define dso_local float @test_vpadds_f32(881// CONSTRAINED-SAME: <2 x float> noundef [[A:%.*]]) #[[ATTR0]] {882// CONSTRAINED-NEXT:  [[ENTRY:.*:]]883// CONSTRAINED-NEXT:    [[LANE0_I:%.*]] = extractelement <2 x float> [[A]], i64 0884// CONSTRAINED-NEXT:    [[LANE1_I:%.*]] = extractelement <2 x float> [[A]], i64 1885// CONSTRAINED-NEXT:    [[VPADDD_I:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float [[LANE0_I]], float [[LANE1_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]886// CONSTRAINED-NEXT:    ret float [[VPADDD_I]]887//888float32_t test_vpadds_f32(float32x2_t a) {889  return vpadds_f32(a);890}891 892// UNCONSTRAINED-LABEL: define dso_local double @test_vpaddd_f64(893// UNCONSTRAINED-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {894// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]895// UNCONSTRAINED-NEXT:    [[LANE0_I:%.*]] = extractelement <2 x double> [[A]], i64 0896// UNCONSTRAINED-NEXT:    [[LANE1_I:%.*]] = extractelement <2 x double> [[A]], i64 1897// UNCONSTRAINED-NEXT:    [[VPADDD_I:%.*]] = fadd double [[LANE0_I]], [[LANE1_I]]898// UNCONSTRAINED-NEXT:    ret double [[VPADDD_I]]899//900// CONSTRAINED-LABEL: define dso_local double @test_vpaddd_f64(901// CONSTRAINED-SAME: <2 x double> noundef [[A:%.*]]) #[[ATTR0]] {902// CONSTRAINED-NEXT:  [[ENTRY:.*:]]903// CONSTRAINED-NEXT:    [[LANE0_I:%.*]] = extractelement <2 x double> [[A]], i64 0904// CONSTRAINED-NEXT:    [[LANE1_I:%.*]] = extractelement <2 x double> [[A]], i64 1905// CONSTRAINED-NEXT:    [[VPADDD_I:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[LANE0_I]], double [[LANE1_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]906// CONSTRAINED-NEXT:    ret double [[VPADDD_I]]907//908float64_t test_vpaddd_f64(float64x2_t a) {909  return vpaddd_f64(a);910}911 912// UNCONSTRAINED-LABEL: define dso_local float @test_vcvts_f32_s32(913// UNCONSTRAINED-SAME: i32 noundef [[A:%.*]]) #[[ATTR0]] {914// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]915// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = sitofp i32 [[A]] to float916// UNCONSTRAINED-NEXT:    ret float [[TMP0]]917//918// CONSTRAINED-LABEL: define dso_local float @test_vcvts_f32_s32(919// CONSTRAINED-SAME: i32 noundef [[A:%.*]]) #[[ATTR0]] {920// CONSTRAINED-NEXT:  [[ENTRY:.*:]]921// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 [[A]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]922// CONSTRAINED-NEXT:    ret float [[TMP0]]923//924float32_t test_vcvts_f32_s32(int32_t a) {925  return vcvts_f32_s32(a);926}927 928// UNCONSTRAINED-LABEL: define dso_local double @test_vcvtd_f64_s64(929// UNCONSTRAINED-SAME: i64 noundef [[A:%.*]]) #[[ATTR0]] {930// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]931// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = sitofp i64 [[A]] to double932// UNCONSTRAINED-NEXT:    ret double [[TMP0]]933//934// CONSTRAINED-LABEL: define dso_local double @test_vcvtd_f64_s64(935// CONSTRAINED-SAME: i64 noundef [[A:%.*]]) #[[ATTR0]] {936// CONSTRAINED-NEXT:  [[ENTRY:.*:]]937// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call double @llvm.experimental.constrained.sitofp.f64.i64(i64 [[A]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]938// CONSTRAINED-NEXT:    ret double [[TMP0]]939//940float64_t test_vcvtd_f64_s64(int64_t a) {941  return vcvtd_f64_s64(a);942}943 944// UNCONSTRAINED-LABEL: define dso_local float @test_vcvts_f32_u32(945// UNCONSTRAINED-SAME: i32 noundef [[A:%.*]]) #[[ATTR0]] {946// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]947// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = uitofp i32 [[A]] to float948// UNCONSTRAINED-NEXT:    ret float [[TMP0]]949//950// CONSTRAINED-LABEL: define dso_local float @test_vcvts_f32_u32(951// CONSTRAINED-SAME: i32 noundef [[A:%.*]]) #[[ATTR0]] {952// CONSTRAINED-NEXT:  [[ENTRY:.*:]]953// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 [[A]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]954// CONSTRAINED-NEXT:    ret float [[TMP0]]955//956float32_t test_vcvts_f32_u32(uint32_t a) {957  return vcvts_f32_u32(a);958}959 960// XXX should verify the type of registers961// UNCONSTRAINED-LABEL: define dso_local double @test_vcvtd_f64_u64(962// UNCONSTRAINED-SAME: i64 noundef [[A:%.*]]) #[[ATTR0]] {963// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]964// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = uitofp i64 [[A]] to double965// UNCONSTRAINED-NEXT:    ret double [[TMP0]]966//967// CONSTRAINED-LABEL: define dso_local double @test_vcvtd_f64_u64(968// CONSTRAINED-SAME: i64 noundef [[A:%.*]]) #[[ATTR0]] {969// CONSTRAINED-NEXT:  [[ENTRY:.*:]]970// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call double @llvm.experimental.constrained.uitofp.f64.i64(i64 [[A]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]971// CONSTRAINED-NEXT:    ret double [[TMP0]]972//973float64_t test_vcvtd_f64_u64(uint64_t a) {974  return vcvtd_f64_u64(a);975}976 977// UNCONSTRAINED-LABEL: define dso_local i32 @test_vceqs_f32(978// UNCONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {979// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]980// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp oeq float [[A]], [[B]]981// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i32982// UNCONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]983//984// CONSTRAINED-LABEL: define dso_local i32 @test_vceqs_f32(985// CONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {986// CONSTRAINED-NEXT:  [[ENTRY:.*:]]987// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[A]], float [[B]], metadata !"oeq", metadata !"fpexcept.strict") #[[ATTR3]]988// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i32989// CONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]990//991uint32_t test_vceqs_f32(float32_t a, float32_t b) {992  return (uint32_t)vceqs_f32(a, b);993}994 995// UNCONSTRAINED-LABEL: define dso_local i64 @test_vceqd_f64(996// UNCONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {997// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]998// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp oeq double [[A]], [[B]]999// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641000// UNCONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1001//1002// CONSTRAINED-LABEL: define dso_local i64 @test_vceqd_f64(1003// CONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {1004// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1005// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f64(double [[A]], double [[B]], metadata !"oeq", metadata !"fpexcept.strict") #[[ATTR3]]1006// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641007// CONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1008//1009uint64_t test_vceqd_f64(float64_t a, float64_t b) {1010  return (uint64_t)vceqd_f64(a, b);1011}1012 1013// UNCONSTRAINED-LABEL: define dso_local i32 @test_vceqzs_f32(1014// UNCONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1015// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1016// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp oeq float [[A]], 0.000000e+001017// UNCONSTRAINED-NEXT:    [[VCEQZ_I:%.*]] = sext i1 [[TMP0]] to i321018// UNCONSTRAINED-NEXT:    ret i32 [[VCEQZ_I]]1019//1020// CONSTRAINED-LABEL: define dso_local i32 @test_vceqzs_f32(1021// CONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1022// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1023// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f32(float [[A]], float 0.000000e+00, metadata !"oeq", metadata !"fpexcept.strict") #[[ATTR3]]1024// CONSTRAINED-NEXT:    [[VCEQZ_I:%.*]] = sext i1 [[TMP0]] to i321025// CONSTRAINED-NEXT:    ret i32 [[VCEQZ_I]]1026//1027uint32_t test_vceqzs_f32(float32_t a) {1028  return (uint32_t)vceqzs_f32(a);1029}1030 1031// UNCONSTRAINED-LABEL: define dso_local i64 @test_vceqzd_f64(1032// UNCONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1033// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1034// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp oeq double [[A]], 0.000000e+001035// UNCONSTRAINED-NEXT:    [[VCEQZ_I:%.*]] = sext i1 [[TMP0]] to i641036// UNCONSTRAINED-NEXT:    ret i64 [[VCEQZ_I]]1037//1038// CONSTRAINED-LABEL: define dso_local i64 @test_vceqzd_f64(1039// CONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1040// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1041// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmp.f64(double [[A]], double 0.000000e+00, metadata !"oeq", metadata !"fpexcept.strict") #[[ATTR3]]1042// CONSTRAINED-NEXT:    [[VCEQZ_I:%.*]] = sext i1 [[TMP0]] to i641043// CONSTRAINED-NEXT:    ret i64 [[VCEQZ_I]]1044//1045uint64_t test_vceqzd_f64(float64_t a) {1046  return (uint64_t)vceqzd_f64(a);1047}1048 1049// UNCONSTRAINED-LABEL: define dso_local i32 @test_vcges_f32(1050// UNCONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {1051// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1052// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp oge float [[A]], [[B]]1053// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i321054// UNCONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]1055//1056// CONSTRAINED-LABEL: define dso_local i32 @test_vcges_f32(1057// CONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {1058// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1059// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[A]], float [[B]], metadata !"oge", metadata !"fpexcept.strict") #[[ATTR3]]1060// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i321061// CONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]1062//1063uint32_t test_vcges_f32(float32_t a, float32_t b) {1064  return (uint32_t)vcges_f32(a, b);1065}1066 1067// UNCONSTRAINED-LABEL: define dso_local i64 @test_vcged_f64(1068// UNCONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {1069// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1070// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp oge double [[A]], [[B]]1071// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641072// UNCONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1073//1074// CONSTRAINED-LABEL: define dso_local i64 @test_vcged_f64(1075// CONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {1076// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1077// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A]], double [[B]], metadata !"oge", metadata !"fpexcept.strict") #[[ATTR3]]1078// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641079// CONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1080//1081uint64_t test_vcged_f64(float64_t a, float64_t b) {1082  return (uint64_t)vcged_f64(a, b);1083}1084 1085// UNCONSTRAINED-LABEL: define dso_local i32 @test_vcgezs_f32(1086// UNCONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1087// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1088// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp oge float [[A]], 0.000000e+001089// UNCONSTRAINED-NEXT:    [[VCGEZ_I:%.*]] = sext i1 [[TMP0]] to i321090// UNCONSTRAINED-NEXT:    ret i32 [[VCGEZ_I]]1091//1092// CONSTRAINED-LABEL: define dso_local i32 @test_vcgezs_f32(1093// CONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1094// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1095// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[A]], float 0.000000e+00, metadata !"oge", metadata !"fpexcept.strict") #[[ATTR3]]1096// CONSTRAINED-NEXT:    [[VCGEZ_I:%.*]] = sext i1 [[TMP0]] to i321097// CONSTRAINED-NEXT:    ret i32 [[VCGEZ_I]]1098//1099uint32_t test_vcgezs_f32(float32_t a) {1100  return (uint32_t)vcgezs_f32(a);1101}1102 1103// UNCONSTRAINED-LABEL: define dso_local i64 @test_vcgezd_f64(1104// UNCONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1105// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1106// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp oge double [[A]], 0.000000e+001107// UNCONSTRAINED-NEXT:    [[VCGEZ_I:%.*]] = sext i1 [[TMP0]] to i641108// UNCONSTRAINED-NEXT:    ret i64 [[VCGEZ_I]]1109//1110// CONSTRAINED-LABEL: define dso_local i64 @test_vcgezd_f64(1111// CONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1112// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1113// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A]], double 0.000000e+00, metadata !"oge", metadata !"fpexcept.strict") #[[ATTR3]]1114// CONSTRAINED-NEXT:    [[VCGEZ_I:%.*]] = sext i1 [[TMP0]] to i641115// CONSTRAINED-NEXT:    ret i64 [[VCGEZ_I]]1116//1117uint64_t test_vcgezd_f64(float64_t a) {1118  return (uint64_t)vcgezd_f64(a);1119}1120 1121// UNCONSTRAINED-LABEL: define dso_local i32 @test_vcgts_f32(1122// UNCONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {1123// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1124// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp ogt float [[A]], [[B]]1125// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i321126// UNCONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]1127//1128// CONSTRAINED-LABEL: define dso_local i32 @test_vcgts_f32(1129// CONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {1130// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1131// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[A]], float [[B]], metadata !"ogt", metadata !"fpexcept.strict") #[[ATTR3]]1132// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i321133// CONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]1134//1135uint32_t test_vcgts_f32(float32_t a, float32_t b) {1136  return (uint32_t)vcgts_f32(a, b);1137}1138 1139// UNCONSTRAINED-LABEL: define dso_local i64 @test_vcgtd_f64(1140// UNCONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {1141// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1142// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp ogt double [[A]], [[B]]1143// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641144// UNCONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1145//1146// CONSTRAINED-LABEL: define dso_local i64 @test_vcgtd_f64(1147// CONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {1148// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1149// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A]], double [[B]], metadata !"ogt", metadata !"fpexcept.strict") #[[ATTR3]]1150// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641151// CONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1152//1153uint64_t test_vcgtd_f64(float64_t a, float64_t b) {1154  return (uint64_t)vcgtd_f64(a, b);1155}1156 1157// UNCONSTRAINED-LABEL: define dso_local i32 @test_vcgtzs_f32(1158// UNCONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1159// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1160// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp ogt float [[A]], 0.000000e+001161// UNCONSTRAINED-NEXT:    [[VCGTZ_I:%.*]] = sext i1 [[TMP0]] to i321162// UNCONSTRAINED-NEXT:    ret i32 [[VCGTZ_I]]1163//1164// CONSTRAINED-LABEL: define dso_local i32 @test_vcgtzs_f32(1165// CONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1166// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1167// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[A]], float 0.000000e+00, metadata !"ogt", metadata !"fpexcept.strict") #[[ATTR3]]1168// CONSTRAINED-NEXT:    [[VCGTZ_I:%.*]] = sext i1 [[TMP0]] to i321169// CONSTRAINED-NEXT:    ret i32 [[VCGTZ_I]]1170//1171uint32_t test_vcgtzs_f32(float32_t a) {1172  return (uint32_t)vcgtzs_f32(a);1173}1174 1175// UNCONSTRAINED-LABEL: define dso_local i64 @test_vcgtzd_f64(1176// UNCONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1177// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1178// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp ogt double [[A]], 0.000000e+001179// UNCONSTRAINED-NEXT:    [[VCGTZ_I:%.*]] = sext i1 [[TMP0]] to i641180// UNCONSTRAINED-NEXT:    ret i64 [[VCGTZ_I]]1181//1182// CONSTRAINED-LABEL: define dso_local i64 @test_vcgtzd_f64(1183// CONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1184// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1185// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A]], double 0.000000e+00, metadata !"ogt", metadata !"fpexcept.strict") #[[ATTR3]]1186// CONSTRAINED-NEXT:    [[VCGTZ_I:%.*]] = sext i1 [[TMP0]] to i641187// CONSTRAINED-NEXT:    ret i64 [[VCGTZ_I]]1188//1189uint64_t test_vcgtzd_f64(float64_t a) {1190  return (uint64_t)vcgtzd_f64(a);1191}1192 1193// UNCONSTRAINED-LABEL: define dso_local i32 @test_vcles_f32(1194// UNCONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {1195// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1196// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp ole float [[A]], [[B]]1197// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i321198// UNCONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]1199//1200// CONSTRAINED-LABEL: define dso_local i32 @test_vcles_f32(1201// CONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {1202// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1203// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[A]], float [[B]], metadata !"ole", metadata !"fpexcept.strict") #[[ATTR3]]1204// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i321205// CONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]1206//1207uint32_t test_vcles_f32(float32_t a, float32_t b) {1208  return (uint32_t)vcles_f32(a, b);1209}1210 1211// UNCONSTRAINED-LABEL: define dso_local i64 @test_vcled_f64(1212// UNCONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {1213// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1214// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp ole double [[A]], [[B]]1215// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641216// UNCONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1217//1218// CONSTRAINED-LABEL: define dso_local i64 @test_vcled_f64(1219// CONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {1220// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1221// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A]], double [[B]], metadata !"ole", metadata !"fpexcept.strict") #[[ATTR3]]1222// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641223// CONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1224//1225uint64_t test_vcled_f64(float64_t a, float64_t b) {1226  return (uint64_t)vcled_f64(a, b);1227}1228 1229// UNCONSTRAINED-LABEL: define dso_local i32 @test_vclezs_f32(1230// UNCONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1231// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1232// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp ole float [[A]], 0.000000e+001233// UNCONSTRAINED-NEXT:    [[VCLEZ_I:%.*]] = sext i1 [[TMP0]] to i321234// UNCONSTRAINED-NEXT:    ret i32 [[VCLEZ_I]]1235//1236// CONSTRAINED-LABEL: define dso_local i32 @test_vclezs_f32(1237// CONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1238// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1239// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[A]], float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict") #[[ATTR3]]1240// CONSTRAINED-NEXT:    [[VCLEZ_I:%.*]] = sext i1 [[TMP0]] to i321241// CONSTRAINED-NEXT:    ret i32 [[VCLEZ_I]]1242//1243uint32_t test_vclezs_f32(float32_t a) {1244  return (uint32_t)vclezs_f32(a);1245}1246 1247// UNCONSTRAINED-LABEL: define dso_local i64 @test_vclezd_f64(1248// UNCONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1249// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1250// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp ole double [[A]], 0.000000e+001251// UNCONSTRAINED-NEXT:    [[VCLEZ_I:%.*]] = sext i1 [[TMP0]] to i641252// UNCONSTRAINED-NEXT:    ret i64 [[VCLEZ_I]]1253//1254// CONSTRAINED-LABEL: define dso_local i64 @test_vclezd_f64(1255// CONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1256// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1257// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A]], double 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict") #[[ATTR3]]1258// CONSTRAINED-NEXT:    [[VCLEZ_I:%.*]] = sext i1 [[TMP0]] to i641259// CONSTRAINED-NEXT:    ret i64 [[VCLEZ_I]]1260//1261uint64_t test_vclezd_f64(float64_t a) {1262  return (uint64_t)vclezd_f64(a);1263}1264 1265// UNCONSTRAINED-LABEL: define dso_local i32 @test_vclts_f32(1266// UNCONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {1267// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1268// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp olt float [[A]], [[B]]1269// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i321270// UNCONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]1271//1272// CONSTRAINED-LABEL: define dso_local i32 @test_vclts_f32(1273// CONSTRAINED-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {1274// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1275// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[A]], float [[B]], metadata !"olt", metadata !"fpexcept.strict") #[[ATTR3]]1276// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i321277// CONSTRAINED-NEXT:    ret i32 [[VCMPD_I]]1278//1279uint32_t test_vclts_f32(float32_t a, float32_t b) {1280  return (uint32_t)vclts_f32(a, b);1281}1282 1283// UNCONSTRAINED-LABEL: define dso_local i64 @test_vcltd_f64(1284// UNCONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {1285// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1286// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp olt double [[A]], [[B]]1287// UNCONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641288// UNCONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1289//1290// CONSTRAINED-LABEL: define dso_local i64 @test_vcltd_f64(1291// CONSTRAINED-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {1292// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1293// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A]], double [[B]], metadata !"olt", metadata !"fpexcept.strict") #[[ATTR3]]1294// CONSTRAINED-NEXT:    [[VCMPD_I:%.*]] = sext i1 [[TMP0]] to i641295// CONSTRAINED-NEXT:    ret i64 [[VCMPD_I]]1296//1297uint64_t test_vcltd_f64(float64_t a, float64_t b) {1298  return (uint64_t)vcltd_f64(a, b);1299}1300 1301// UNCONSTRAINED-LABEL: define dso_local i32 @test_vcltzs_f32(1302// UNCONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1303// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1304// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp olt float [[A]], 0.000000e+001305// UNCONSTRAINED-NEXT:    [[VCLTZ_I:%.*]] = sext i1 [[TMP0]] to i321306// UNCONSTRAINED-NEXT:    ret i32 [[VCLTZ_I]]1307//1308// CONSTRAINED-LABEL: define dso_local i32 @test_vcltzs_f32(1309// CONSTRAINED-SAME: float noundef [[A:%.*]]) #[[ATTR0]] {1310// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1311// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f32(float [[A]], float 0.000000e+00, metadata !"olt", metadata !"fpexcept.strict") #[[ATTR3]]1312// CONSTRAINED-NEXT:    [[VCLTZ_I:%.*]] = sext i1 [[TMP0]] to i321313// CONSTRAINED-NEXT:    ret i32 [[VCLTZ_I]]1314//1315uint32_t test_vcltzs_f32(float32_t a) {1316  return (uint32_t)vcltzs_f32(a);1317}1318 1319// UNCONSTRAINED-LABEL: define dso_local i64 @test_vcltzd_f64(1320// UNCONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1321// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1322// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = fcmp olt double [[A]], 0.000000e+001323// UNCONSTRAINED-NEXT:    [[VCLTZ_I:%.*]] = sext i1 [[TMP0]] to i641324// UNCONSTRAINED-NEXT:    ret i64 [[VCLTZ_I]]1325//1326// CONSTRAINED-LABEL: define dso_local i64 @test_vcltzd_f64(1327// CONSTRAINED-SAME: double noundef [[A:%.*]]) #[[ATTR0]] {1328// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1329// CONSTRAINED-NEXT:    [[TMP0:%.*]] = call i1 @llvm.experimental.constrained.fcmps.f64(double [[A]], double 0.000000e+00, metadata !"olt", metadata !"fpexcept.strict") #[[ATTR3]]1330// CONSTRAINED-NEXT:    [[VCLTZ_I:%.*]] = sext i1 [[TMP0]] to i641331// CONSTRAINED-NEXT:    ret i64 [[VCLTZ_I]]1332//1333uint64_t test_vcltzd_f64(float64_t a) {1334  return (uint64_t)vcltzd_f64(a);1335}1336 1337// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vadd_f64(1338// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {1339// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1340// UNCONSTRAINED-NEXT:    [[ADD_I:%.*]] = fadd <1 x double> [[A]], [[B]]1341// UNCONSTRAINED-NEXT:    ret <1 x double> [[ADD_I]]1342//1343// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vadd_f64(1344// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {1345// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1346// CONSTRAINED-NEXT:    [[ADD_I:%.*]] = call <1 x double> @llvm.experimental.constrained.fadd.v1f64(<1 x double> [[A]], <1 x double> [[B]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1347// CONSTRAINED-NEXT:    ret <1 x double> [[ADD_I]]1348//1349float64x1_t test_vadd_f64(float64x1_t a, float64x1_t b) {1350  return vadd_f64(a, b);1351}1352 1353// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vmul_f64(1354// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {1355// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1356// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <1 x double> [[A]], [[B]]1357// UNCONSTRAINED-NEXT:    ret <1 x double> [[MUL_I]]1358//1359// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vmul_f64(1360// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {1361// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1362// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <1 x double> @llvm.experimental.constrained.fmul.v1f64(<1 x double> [[A]], <1 x double> [[B]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1363// CONSTRAINED-NEXT:    ret <1 x double> [[MUL_I]]1364//1365float64x1_t test_vmul_f64(float64x1_t a, float64x1_t b) {1366  return vmul_f64(a, b);1367}1368 1369// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vdiv_f64(1370// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {1371// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1372// UNCONSTRAINED-NEXT:    [[DIV_I:%.*]] = fdiv <1 x double> [[A]], [[B]]1373// UNCONSTRAINED-NEXT:    ret <1 x double> [[DIV_I]]1374//1375// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vdiv_f64(1376// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {1377// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1378// CONSTRAINED-NEXT:    [[DIV_I:%.*]] = call <1 x double> @llvm.experimental.constrained.fdiv.v1f64(<1 x double> [[A]], <1 x double> [[B]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1379// CONSTRAINED-NEXT:    ret <1 x double> [[DIV_I]]1380//1381float64x1_t test_vdiv_f64(float64x1_t a, float64x1_t b) {1382  return vdiv_f64(a, b);1383}1384 1385// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vmla_f64(1386// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]], <1 x double> noundef [[C:%.*]]) #[[ATTR0]] {1387// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1388// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <1 x double> [[B]], [[C]]1389// UNCONSTRAINED-NEXT:    [[ADD_I:%.*]] = fadd <1 x double> [[A]], [[MUL_I]]1390// UNCONSTRAINED-NEXT:    ret <1 x double> [[ADD_I]]1391//1392// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vmla_f64(1393// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]], <1 x double> noundef [[C:%.*]]) #[[ATTR0]] {1394// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1395// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <1 x double> @llvm.experimental.constrained.fmul.v1f64(<1 x double> [[B]], <1 x double> [[C]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1396// CONSTRAINED-NEXT:    [[ADD_I:%.*]] = call <1 x double> @llvm.experimental.constrained.fadd.v1f64(<1 x double> [[A]], <1 x double> [[MUL_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1397// CONSTRAINED-NEXT:    ret <1 x double> [[ADD_I]]1398//1399float64x1_t test_vmla_f64(float64x1_t a, float64x1_t b, float64x1_t c) {1400  return vmla_f64(a, b, c);1401}1402 1403// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vmls_f64(1404// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]], <1 x double> noundef [[C:%.*]]) #[[ATTR0]] {1405// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1406// UNCONSTRAINED-NEXT:    [[MUL_I:%.*]] = fmul <1 x double> [[B]], [[C]]1407// UNCONSTRAINED-NEXT:    [[SUB_I:%.*]] = fsub <1 x double> [[A]], [[MUL_I]]1408// UNCONSTRAINED-NEXT:    ret <1 x double> [[SUB_I]]1409//1410// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vmls_f64(1411// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]], <1 x double> noundef [[C:%.*]]) #[[ATTR0]] {1412// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1413// CONSTRAINED-NEXT:    [[MUL_I:%.*]] = call <1 x double> @llvm.experimental.constrained.fmul.v1f64(<1 x double> [[B]], <1 x double> [[C]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1414// CONSTRAINED-NEXT:    [[SUB_I:%.*]] = call <1 x double> @llvm.experimental.constrained.fsub.v1f64(<1 x double> [[A]], <1 x double> [[MUL_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1415// CONSTRAINED-NEXT:    ret <1 x double> [[SUB_I]]1416//1417float64x1_t test_vmls_f64(float64x1_t a, float64x1_t b, float64x1_t c) {1418  return vmls_f64(a, b, c);1419}1420 1421// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vfma_f64(1422// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]], <1 x double> noundef [[C:%.*]]) #[[ATTR0]] {1423// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1424// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641425// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01426// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x double> [[B]] to i641427// UNCONSTRAINED-NEXT:    [[__P1_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP1]], i32 01428// UNCONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <1 x double> [[C]] to i641429// UNCONSTRAINED-NEXT:    [[__P2_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP2]], i32 01430// UNCONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1431// UNCONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[__P1_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1432// UNCONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[__P2_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1433// UNCONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP3]] to <1 x double>1434// UNCONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x double>1435// UNCONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP5]] to <1 x double>1436// UNCONSTRAINED-NEXT:    [[TMP9:%.*]] = call <1 x double> @llvm.fma.v1f64(<1 x double> [[TMP7]], <1 x double> [[TMP8]], <1 x double> [[TMP6]])1437// UNCONSTRAINED-NEXT:    ret <1 x double> [[TMP9]]1438//1439// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vfma_f64(1440// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]], <1 x double> noundef [[C:%.*]]) #[[ATTR0]] {1441// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1442// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641443// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01444// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x double> [[B]] to i641445// CONSTRAINED-NEXT:    [[__P1_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP1]], i32 01446// CONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <1 x double> [[C]] to i641447// CONSTRAINED-NEXT:    [[__P2_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP2]], i32 01448// CONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1449// CONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[__P1_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1450// CONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[__P2_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1451// CONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP3]] to <1 x double>1452// CONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x double>1453// CONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP5]] to <1 x double>1454// CONSTRAINED-NEXT:    [[TMP9:%.*]] = call <1 x double> @llvm.experimental.constrained.fma.v1f64(<1 x double> [[TMP7]], <1 x double> [[TMP8]], <1 x double> [[TMP6]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1455// CONSTRAINED-NEXT:    ret <1 x double> [[TMP9]]1456//1457float64x1_t test_vfma_f64(float64x1_t a, float64x1_t b, float64x1_t c) {1458  return vfma_f64(a, b, c);1459}1460 1461// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vfms_f64(1462// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]], <1 x double> noundef [[C:%.*]]) #[[ATTR0]] {1463// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1464// UNCONSTRAINED-NEXT:    [[FNEG_I:%.*]] = fneg <1 x double> [[B]]1465// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641466// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01467// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x double> [[FNEG_I]] to i641468// UNCONSTRAINED-NEXT:    [[__P1_ADDR_I_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP1]], i32 01469// UNCONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <1 x double> [[C]] to i641470// UNCONSTRAINED-NEXT:    [[__P2_ADDR_I_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP2]], i32 01471// UNCONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1472// UNCONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[__P1_ADDR_I_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1473// UNCONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[__P2_ADDR_I_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1474// UNCONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP3]] to <1 x double>1475// UNCONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x double>1476// UNCONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP5]] to <1 x double>1477// UNCONSTRAINED-NEXT:    [[TMP9:%.*]] = call <1 x double> @llvm.fma.v1f64(<1 x double> [[TMP7]], <1 x double> [[TMP8]], <1 x double> [[TMP6]])1478// UNCONSTRAINED-NEXT:    ret <1 x double> [[TMP9]]1479//1480// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vfms_f64(1481// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]], <1 x double> noundef [[C:%.*]]) #[[ATTR0]] {1482// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1483// CONSTRAINED-NEXT:    [[FNEG_I:%.*]] = fneg <1 x double> [[B]]1484// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641485// CONSTRAINED-NEXT:    [[__P0_ADDR_I_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01486// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x double> [[FNEG_I]] to i641487// CONSTRAINED-NEXT:    [[__P1_ADDR_I_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP1]], i32 01488// CONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <1 x double> [[C]] to i641489// CONSTRAINED-NEXT:    [[__P2_ADDR_I_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP2]], i32 01490// CONSTRAINED-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1491// CONSTRAINED-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[__P1_ADDR_I_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1492// CONSTRAINED-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[__P2_ADDR_I_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1493// CONSTRAINED-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP3]] to <1 x double>1494// CONSTRAINED-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x double>1495// CONSTRAINED-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP5]] to <1 x double>1496// CONSTRAINED-NEXT:    [[TMP9:%.*]] = call <1 x double> @llvm.experimental.constrained.fma.v1f64(<1 x double> [[TMP7]], <1 x double> [[TMP8]], <1 x double> [[TMP6]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1497// CONSTRAINED-NEXT:    ret <1 x double> [[TMP9]]1498//1499float64x1_t test_vfms_f64(float64x1_t a, float64x1_t b, float64x1_t c) {1500  return vfms_f64(a, b, c);1501}1502 1503// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vsub_f64(1504// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {1505// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1506// UNCONSTRAINED-NEXT:    [[SUB_I:%.*]] = fsub <1 x double> [[A]], [[B]]1507// UNCONSTRAINED-NEXT:    ret <1 x double> [[SUB_I]]1508//1509// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vsub_f64(1510// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]], <1 x double> noundef [[B:%.*]]) #[[ATTR0]] {1511// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1512// CONSTRAINED-NEXT:    [[SUB_I:%.*]] = call <1 x double> @llvm.experimental.constrained.fsub.v1f64(<1 x double> [[A]], <1 x double> [[B]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1513// CONSTRAINED-NEXT:    ret <1 x double> [[SUB_I]]1514//1515float64x1_t test_vsub_f64(float64x1_t a, float64x1_t b) {1516  return vsub_f64(a, b);1517}1518 1519// UNCONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcvt_s64_f64(1520// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1521// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1522// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641523// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01524// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1525// UNCONSTRAINED-NEXT:    [[VCVTZ_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1526// UNCONSTRAINED-NEXT:    [[VCVTZ1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.fcvtzs.v1i64.v1f64(<1 x double> [[VCVTZ_I]])1527// UNCONSTRAINED-NEXT:    ret <1 x i64> [[VCVTZ1_I]]1528//1529// CONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcvt_s64_f64(1530// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1531// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1532// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641533// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01534// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1535// CONSTRAINED-NEXT:    [[VCVTZ_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1536// CONSTRAINED-NEXT:    [[VCVTZ1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.fcvtzs.v1i64.v1f64(<1 x double> [[VCVTZ_I]]) #[[ATTR3]]1537// CONSTRAINED-NEXT:    ret <1 x i64> [[VCVTZ1_I]]1538//1539int64x1_t test_vcvt_s64_f64(float64x1_t a) {1540  return vcvt_s64_f64(a);1541}1542 1543// UNCONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcvt_u64_f64(1544// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1545// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1546// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641547// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01548// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1549// UNCONSTRAINED-NEXT:    [[VCVTZ_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1550// UNCONSTRAINED-NEXT:    [[VCVTZ1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.fcvtzu.v1i64.v1f64(<1 x double> [[VCVTZ_I]])1551// UNCONSTRAINED-NEXT:    ret <1 x i64> [[VCVTZ1_I]]1552//1553// CONSTRAINED-LABEL: define dso_local <1 x i64> @test_vcvt_u64_f64(1554// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1555// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1556// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641557// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01558// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1559// CONSTRAINED-NEXT:    [[VCVTZ_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1560// CONSTRAINED-NEXT:    [[VCVTZ1_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.fcvtzu.v1i64.v1f64(<1 x double> [[VCVTZ_I]]) #[[ATTR3]]1561// CONSTRAINED-NEXT:    ret <1 x i64> [[VCVTZ1_I]]1562//1563uint64x1_t test_vcvt_u64_f64(float64x1_t a) {1564  return vcvt_u64_f64(a);1565}1566 1567// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vcvt_f64_s64(1568// UNCONSTRAINED-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {1569// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1570// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>1571// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>1572// UNCONSTRAINED-NEXT:    [[VCVT_I:%.*]] = sitofp <1 x i64> [[TMP1]] to <1 x double>1573// UNCONSTRAINED-NEXT:    ret <1 x double> [[VCVT_I]]1574//1575// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vcvt_f64_s64(1576// CONSTRAINED-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {1577// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1578// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>1579// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>1580// CONSTRAINED-NEXT:    [[VCVT_I:%.*]] = call <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> [[TMP1]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1581// CONSTRAINED-NEXT:    ret <1 x double> [[VCVT_I]]1582//1583float64x1_t test_vcvt_f64_s64(int64x1_t a) {1584  return vcvt_f64_s64(a);1585}1586 1587// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vcvt_f64_u64(1588// UNCONSTRAINED-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {1589// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1590// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>1591// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>1592// UNCONSTRAINED-NEXT:    [[VCVT_I:%.*]] = uitofp <1 x i64> [[TMP1]] to <1 x double>1593// UNCONSTRAINED-NEXT:    ret <1 x double> [[VCVT_I]]1594//1595// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vcvt_f64_u64(1596// CONSTRAINED-SAME: <1 x i64> noundef [[A:%.*]]) #[[ATTR0]] {1597// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1598// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>1599// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>1600// CONSTRAINED-NEXT:    [[VCVT_I:%.*]] = call <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> [[TMP1]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1601// CONSTRAINED-NEXT:    ret <1 x double> [[VCVT_I]]1602//1603float64x1_t test_vcvt_f64_u64(uint64x1_t a) {1604  return vcvt_f64_u64(a);1605}1606 1607// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vrnda_f64(1608// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1609// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1610// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641611// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01612// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1613// UNCONSTRAINED-NEXT:    [[VRNDA_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1614// UNCONSTRAINED-NEXT:    [[VRNDA1_I:%.*]] = call <1 x double> @llvm.round.v1f64(<1 x double> [[VRNDA_I]])1615// UNCONSTRAINED-NEXT:    ret <1 x double> [[VRNDA1_I]]1616//1617// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vrnda_f64(1618// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1619// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1620// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641621// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01622// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1623// CONSTRAINED-NEXT:    [[VRNDA_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1624// CONSTRAINED-NEXT:    [[VRNDA1_I:%.*]] = call <1 x double> @llvm.experimental.constrained.round.v1f64(<1 x double> [[VRNDA_I]], metadata !"fpexcept.strict") #[[ATTR3]]1625// CONSTRAINED-NEXT:    ret <1 x double> [[VRNDA1_I]]1626//1627float64x1_t test_vrnda_f64(float64x1_t a) {1628  return vrnda_f64(a);1629}1630 1631// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vrndp_f64(1632// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1633// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1634// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641635// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01636// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1637// UNCONSTRAINED-NEXT:    [[VRNDP_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1638// UNCONSTRAINED-NEXT:    [[VRNDP1_I:%.*]] = call <1 x double> @llvm.ceil.v1f64(<1 x double> [[VRNDP_I]])1639// UNCONSTRAINED-NEXT:    ret <1 x double> [[VRNDP1_I]]1640//1641// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vrndp_f64(1642// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1643// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1644// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641645// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01646// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1647// CONSTRAINED-NEXT:    [[VRNDP_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1648// CONSTRAINED-NEXT:    [[VRNDP1_I:%.*]] = call <1 x double> @llvm.experimental.constrained.ceil.v1f64(<1 x double> [[VRNDP_I]], metadata !"fpexcept.strict") #[[ATTR3]]1649// CONSTRAINED-NEXT:    ret <1 x double> [[VRNDP1_I]]1650//1651float64x1_t test_vrndp_f64(float64x1_t a) {1652  return vrndp_f64(a);1653}1654 1655// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vrndm_f64(1656// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1657// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1658// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641659// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01660// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1661// UNCONSTRAINED-NEXT:    [[VRNDM_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1662// UNCONSTRAINED-NEXT:    [[VRNDM1_I:%.*]] = call <1 x double> @llvm.floor.v1f64(<1 x double> [[VRNDM_I]])1663// UNCONSTRAINED-NEXT:    ret <1 x double> [[VRNDM1_I]]1664//1665// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vrndm_f64(1666// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1667// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1668// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641669// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01670// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1671// CONSTRAINED-NEXT:    [[VRNDM_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1672// CONSTRAINED-NEXT:    [[VRNDM1_I:%.*]] = call <1 x double> @llvm.experimental.constrained.floor.v1f64(<1 x double> [[VRNDM_I]], metadata !"fpexcept.strict") #[[ATTR3]]1673// CONSTRAINED-NEXT:    ret <1 x double> [[VRNDM1_I]]1674//1675float64x1_t test_vrndm_f64(float64x1_t a) {1676  return vrndm_f64(a);1677}1678 1679// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vrndx_f64(1680// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1681// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1682// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641683// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01684// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1685// UNCONSTRAINED-NEXT:    [[VRNDX_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1686// UNCONSTRAINED-NEXT:    [[VRNDX1_I:%.*]] = call <1 x double> @llvm.rint.v1f64(<1 x double> [[VRNDX_I]])1687// UNCONSTRAINED-NEXT:    ret <1 x double> [[VRNDX1_I]]1688//1689// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vrndx_f64(1690// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1691// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1692// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641693// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01694// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1695// CONSTRAINED-NEXT:    [[VRNDX_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1696// CONSTRAINED-NEXT:    [[VRNDX1_I:%.*]] = call <1 x double> @llvm.experimental.constrained.rint.v1f64(<1 x double> [[VRNDX_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1697// CONSTRAINED-NEXT:    ret <1 x double> [[VRNDX1_I]]1698//1699float64x1_t test_vrndx_f64(float64x1_t a) {1700  return vrndx_f64(a);1701}1702 1703// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vrnd_f64(1704// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1705// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1706// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641707// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01708// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1709// UNCONSTRAINED-NEXT:    [[VRNDZ_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1710// UNCONSTRAINED-NEXT:    [[VRNDZ1_I:%.*]] = call <1 x double> @llvm.trunc.v1f64(<1 x double> [[VRNDZ_I]])1711// UNCONSTRAINED-NEXT:    ret <1 x double> [[VRNDZ1_I]]1712//1713// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vrnd_f64(1714// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1715// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1716// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641717// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01718// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1719// CONSTRAINED-NEXT:    [[VRNDZ_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1720// CONSTRAINED-NEXT:    [[VRNDZ1_I:%.*]] = call <1 x double> @llvm.experimental.constrained.trunc.v1f64(<1 x double> [[VRNDZ_I]], metadata !"fpexcept.strict") #[[ATTR3]]1721// CONSTRAINED-NEXT:    ret <1 x double> [[VRNDZ1_I]]1722//1723float64x1_t test_vrnd_f64(float64x1_t a) {1724  return vrnd_f64(a);1725}1726 1727// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vrndi_f64(1728// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1729// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1730// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641731// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01732// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1733// UNCONSTRAINED-NEXT:    [[VRNDI_V_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1734// UNCONSTRAINED-NEXT:    [[VRNDI_V1_I:%.*]] = call <1 x double> @llvm.nearbyint.v1f64(<1 x double> [[VRNDI_V_I]])1735// UNCONSTRAINED-NEXT:    ret <1 x double> [[VRNDI_V1_I]]1736//1737// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vrndi_f64(1738// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1739// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1740// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641741// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01742// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1743// CONSTRAINED-NEXT:    [[VRNDI_V_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1744// CONSTRAINED-NEXT:    [[VRNDI_V1_I:%.*]] = call <1 x double> @llvm.experimental.constrained.nearbyint.v1f64(<1 x double> [[VRNDI_V_I]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1745// CONSTRAINED-NEXT:    ret <1 x double> [[VRNDI_V1_I]]1746//1747float64x1_t test_vrndi_f64(float64x1_t a) {1748  return vrndi_f64(a);1749}1750 1751// UNCONSTRAINED-LABEL: define dso_local <1 x double> @test_vsqrt_f64(1752// UNCONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1753// UNCONSTRAINED-NEXT:  [[ENTRY:.*:]]1754// UNCONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641755// UNCONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01756// UNCONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1757// UNCONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1758// UNCONSTRAINED-NEXT:    [[VSQRT_I:%.*]] = call <1 x double> @llvm.sqrt.v1f64(<1 x double> [[TMP2]])1759// UNCONSTRAINED-NEXT:    ret <1 x double> [[VSQRT_I]]1760//1761// CONSTRAINED-LABEL: define dso_local <1 x double> @test_vsqrt_f64(1762// CONSTRAINED-SAME: <1 x double> noundef [[A:%.*]]) #[[ATTR0]] {1763// CONSTRAINED-NEXT:  [[ENTRY:.*:]]1764// CONSTRAINED-NEXT:    [[TMP0:%.*]] = bitcast <1 x double> [[A]] to i641765// CONSTRAINED-NEXT:    [[__P0_ADDR_I_SROA_0_0_VEC_INSERT:%.*]] = insertelement <1 x i64> undef, i64 [[TMP0]], i32 01766// CONSTRAINED-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[__P0_ADDR_I_SROA_0_0_VEC_INSERT]] to <8 x i8>1767// CONSTRAINED-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x double>1768// CONSTRAINED-NEXT:    [[VSQRT_I:%.*]] = call <1 x double> @llvm.experimental.constrained.sqrt.v1f64(<1 x double> [[TMP2]], metadata !"round.tonearest", metadata !"fpexcept.strict") #[[ATTR3]]1769// CONSTRAINED-NEXT:    ret <1 x double> [[VSQRT_I]]1770//1771float64x1_t test_vsqrt_f64(float64x1_t a) {1772  return vsqrt_f64(a);1773}1774