brintos

brintos / llvm-project-archived public Read only

0
0
Text · 44.4 KiB · c3da227 Raw
1001 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64 %s -disable-strictnode-mutation -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64 -global-isel=true -global-isel-abort=2 -disable-strictnode-mutation %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5; CHECK-GI:       warning: Instruction selection used fallback path for add_v4f326; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sub_v4f327; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for mul_v4f328; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for div_v4f329; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fma_v4f3210; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_v4i32_v4f3211; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_v4i32_v4f3212; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_v4i64_v4f3213; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_v4i64_v4f3214; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_v4f32_v4i3215; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_v4f32_v4i3216; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_v4f32_v4i6417; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_v4f32_v4i6418; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrt_v4f3219; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for rint_v4f3220; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for nearbyint_v4f3221; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for maxnum_v4f3222; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for minnum_v4f3223; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ceil_v4f3224; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for floor_v4f3225; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for round_v4f3226; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for roundeven_v4f3227; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for trunc_v4f3228; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_v4f3229; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_v4f3230; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for add_v2f6431; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sub_v2f6432; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for mul_v2f6433; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for div_v2f6434; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fma_v2f6435; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_v2i32_v2f6436; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_v2i32_v2f6437; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_v2i64_v2f6438; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_v2i64_v2f6439; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_v2f64_v2i3240; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_v2f64_v2i3241; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_v2f64_v2i6442; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_v2f64_v2i6443; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrt_v2f6444; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for rint_v2f6445; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for nearbyint_v2f6446; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for maxnum_v2f6447; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for minnum_v2f6448; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ceil_v2f6449; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for floor_v2f6450; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for round_v2f6451; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for roundeven_v2f6452; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for trunc_v2f6453; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_v2f6454; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_v2f6455; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for add_v1f6456; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sub_v1f6457; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for mul_v1f6458; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for div_v1f6459; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fma_v1f6460; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_v1i32_v1f6461; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_v1i32_v1f6462; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_v1i64_v1f6463; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_v1i64_v1f6464; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_v1f64_v1i3265; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_v1f64_v1i3266; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_v1f64_v1i6467; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_v1f64_v1i6468; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrt_v1f6469; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for rint_v1f6470; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for nearbyint_v1f6471; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for maxnum_v1f6472; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for minnum_v1f6473; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ceil_v1f6474; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for floor_v1f6475; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for round_v1f6476; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for roundeven_v1f6477; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for trunc_v1f6478; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_v1f6179; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_v1f6180; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptrunc_v2f32_v2f6481; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fpext_v2f64_v2f3282 83; Check that constrained fp vector intrinsics are correctly lowered.84 85; Single-precision intrinsics86 87define <4 x float> @add_v4f32(<4 x float> %x, <4 x float> %y) #0 {88; CHECK-LABEL: add_v4f32:89; CHECK:       // %bb.0:90; CHECK-NEXT:    fadd v0.4s, v0.4s, v1.4s91; CHECK-NEXT:    ret92  %val = call <4 x float> @llvm.experimental.constrained.fadd.v4f32(<4 x float> %x, <4 x float> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #093  ret <4 x float> %val94}95 96define <4 x float> @sub_v4f32(<4 x float> %x, <4 x float> %y) #0 {97; CHECK-LABEL: sub_v4f32:98; CHECK:       // %bb.0:99; CHECK-NEXT:    fsub v0.4s, v0.4s, v1.4s100; CHECK-NEXT:    ret101  %val = call <4 x float> @llvm.experimental.constrained.fsub.v4f32(<4 x float> %x, <4 x float> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0102  ret <4 x float> %val103}104 105define <4 x float> @mul_v4f32(<4 x float> %x, <4 x float> %y) #0 {106; CHECK-LABEL: mul_v4f32:107; CHECK:       // %bb.0:108; CHECK-NEXT:    fmul v0.4s, v0.4s, v1.4s109; CHECK-NEXT:    ret110  %val = call <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float> %x, <4 x float> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0111  ret <4 x float> %val112}113 114define <4 x float> @div_v4f32(<4 x float> %x, <4 x float> %y) #0 {115; CHECK-LABEL: div_v4f32:116; CHECK:       // %bb.0:117; CHECK-NEXT:    fdiv v0.4s, v0.4s, v1.4s118; CHECK-NEXT:    ret119  %val = call <4 x float> @llvm.experimental.constrained.fdiv.v4f32(<4 x float> %x, <4 x float> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0120  ret <4 x float> %val121}122 123define <4 x float> @fma_v4f32(<4 x float> %x, <4 x float> %y, <4 x float> %z) #0 {124; CHECK-LABEL: fma_v4f32:125; CHECK:       // %bb.0:126; CHECK-NEXT:    fmla v2.4s, v1.4s, v0.4s127; CHECK-NEXT:    mov v0.16b, v2.16b128; CHECK-NEXT:    ret129  %val = call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %x, <4 x float> %y, <4 x float> %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0130  ret <4 x float> %val131}132 133define <4 x i32> @fptosi_v4i32_v4f32(<4 x float> %x) #0 {134; CHECK-LABEL: fptosi_v4i32_v4f32:135; CHECK:       // %bb.0:136; CHECK-NEXT:    fcvtzs v0.4s, v0.4s137; CHECK-NEXT:    ret138  %val = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float> %x, metadata !"fpexcept.strict") #0139  ret <4 x i32> %val140}141 142define <4 x i32> @fptoui_v4i32_v4f32(<4 x float> %x) #0 {143; CHECK-LABEL: fptoui_v4i32_v4f32:144; CHECK:       // %bb.0:145; CHECK-NEXT:    fcvtzu v0.4s, v0.4s146; CHECK-NEXT:    ret147  %val = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float> %x, metadata !"fpexcept.strict") #0148  ret <4 x i32> %val149}150 151define <4 x i64> @fptosi_v4i64_v4f32(<4 x float> %x) #0 {152; CHECK-LABEL: fptosi_v4i64_v4f32:153; CHECK:       // %bb.0:154; CHECK-NEXT:    fcvtl2 v1.2d, v0.4s155; CHECK-NEXT:    fcvtl v0.2d, v0.2s156; CHECK-NEXT:    fcvtzs v1.2d, v1.2d157; CHECK-NEXT:    fcvtzs v0.2d, v0.2d158; CHECK-NEXT:    ret159  %val = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float> %x, metadata !"fpexcept.strict") #0160  ret <4 x i64> %val161}162 163define <4 x i64> @fptoui_v4i64_v4f32(<4 x float> %x) #0 {164; CHECK-LABEL: fptoui_v4i64_v4f32:165; CHECK:       // %bb.0:166; CHECK-NEXT:    fcvtl2 v1.2d, v0.4s167; CHECK-NEXT:    fcvtl v0.2d, v0.2s168; CHECK-NEXT:    fcvtzu v1.2d, v1.2d169; CHECK-NEXT:    fcvtzu v0.2d, v0.2d170; CHECK-NEXT:    ret171  %val = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float> %x, metadata !"fpexcept.strict") #0172  ret <4 x i64> %val173}174 175define <4 x float> @sitofp_v4f32_v4i32(<4 x i32> %x) #0 {176; CHECK-LABEL: sitofp_v4f32_v4i32:177; CHECK:       // %bb.0:178; CHECK-NEXT:    scvtf v0.4s, v0.4s179; CHECK-NEXT:    ret180  %val = call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0181  ret <4 x float> %val182}183 184define <4 x float> @uitofp_v4f32_v4i32(<4 x i32> %x) #0 {185; CHECK-LABEL: uitofp_v4f32_v4i32:186; CHECK:       // %bb.0:187; CHECK-NEXT:    ucvtf v0.4s, v0.4s188; CHECK-NEXT:    ret189  %val = call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0190  ret <4 x float> %val191}192 193define <4 x float> @sitofp_v4f32_v4i64(<4 x i64> %x) #0 {194; CHECK-LABEL: sitofp_v4f32_v4i64:195; CHECK:       // %bb.0:196; CHECK-NEXT:    mov x8, v0.d[1]197; CHECK-NEXT:    fmov x9, d0198; CHECK-NEXT:    scvtf s0, x9199; CHECK-NEXT:    mov x9, v1.d[1]200; CHECK-NEXT:    scvtf s2, x8201; CHECK-NEXT:    fmov x8, d1202; CHECK-NEXT:    scvtf s1, x8203; CHECK-NEXT:    mov v0.s[1], v2.s[0]204; CHECK-NEXT:    mov v0.s[2], v1.s[0]205; CHECK-NEXT:    scvtf s1, x9206; CHECK-NEXT:    mov v0.s[3], v1.s[0]207; CHECK-NEXT:    ret208  %val = call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0209  ret <4 x float> %val210}211 212define <4 x float> @uitofp_v4f32_v4i64(<4 x i64> %x) #0 {213; CHECK-LABEL: uitofp_v4f32_v4i64:214; CHECK:       // %bb.0:215; CHECK-NEXT:    movi v2.2d, #0x000000ffffffff216; CHECK-NEXT:    ushr v3.2d, v1.2d, #32217; CHECK-NEXT:    ushr v4.2d, v0.2d, #32218; CHECK-NEXT:    mov x8, v3.d[1]219; CHECK-NEXT:    mov x9, v4.d[1]220; CHECK-NEXT:    fmov x10, d3221; CHECK-NEXT:    and v1.16b, v1.16b, v2.16b222; CHECK-NEXT:    and v0.16b, v0.16b, v2.16b223; CHECK-NEXT:    fmov x11, d4224; CHECK-NEXT:    scvtf s2, x10225; CHECK-NEXT:    mov x10, v1.d[1]226; CHECK-NEXT:    scvtf s3, x8227; CHECK-NEXT:    scvtf s4, x11228; CHECK-NEXT:    mov x8, v0.d[1]229; CHECK-NEXT:    scvtf s5, x9230; CHECK-NEXT:    mov w9, #1333788672 // =0x4f800000231; CHECK-NEXT:    fmov x11, d1232; CHECK-NEXT:    dup v1.2s, w9233; CHECK-NEXT:    fmov x9, d0234; CHECK-NEXT:    scvtf s0, x10235; CHECK-NEXT:    mov v2.s[1], v3.s[0]236; CHECK-NEXT:    scvtf s6, x11237; CHECK-NEXT:    scvtf s3, x8238; CHECK-NEXT:    mov v4.s[1], v5.s[0]239; CHECK-NEXT:    scvtf s5, x9240; CHECK-NEXT:    mov v6.s[1], v0.s[0]241; CHECK-NEXT:    fmul v0.2s, v2.2s, v1.2s242; CHECK-NEXT:    fmul v1.2s, v4.2s, v1.2s243; CHECK-NEXT:    mov v5.s[1], v3.s[0]244; CHECK-NEXT:    fadd v2.2s, v0.2s, v6.2s245; CHECK-NEXT:    fadd v0.2s, v1.2s, v5.2s246; CHECK-NEXT:    mov v0.d[1], v2.d[0]247; CHECK-NEXT:    ret248  %val = call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0249  ret <4 x float> %val250}251 252define <4 x float> @sqrt_v4f32(<4 x float> %x) #0 {253; CHECK-LABEL: sqrt_v4f32:254; CHECK:       // %bb.0:255; CHECK-NEXT:    fsqrt v0.4s, v0.4s256; CHECK-NEXT:    ret257  %val = call <4 x float> @llvm.experimental.constrained.sqrt.v4f32(<4 x float> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0258  ret <4 x float> %val259}260 261define <4 x float> @rint_v4f32(<4 x float> %x) #0 {262; CHECK-LABEL: rint_v4f32:263; CHECK:       // %bb.0:264; CHECK-NEXT:    frintx v0.4s, v0.4s265; CHECK-NEXT:    ret266  %val = call <4 x float> @llvm.experimental.constrained.rint.v4f32(<4 x float> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0267  ret <4 x float> %val268}269 270define <4 x float> @nearbyint_v4f32(<4 x float> %x) #0 {271; CHECK-LABEL: nearbyint_v4f32:272; CHECK:       // %bb.0:273; CHECK-NEXT:    frinti v0.4s, v0.4s274; CHECK-NEXT:    ret275  %val = call <4 x float> @llvm.experimental.constrained.nearbyint.v4f32(<4 x float> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0276  ret <4 x float> %val277}278 279define <4 x float> @maxnum_v4f32(<4 x float> %x, <4 x float> %y) #0 {280; CHECK-LABEL: maxnum_v4f32:281; CHECK:       // %bb.0:282; CHECK-NEXT:    fmaxnm v0.4s, v0.4s, v1.4s283; CHECK-NEXT:    ret284  %val = call <4 x float> @llvm.experimental.constrained.maxnum.v4f32(<4 x float> %x, <4 x float> %y, metadata !"fpexcept.strict") #0285  ret <4 x float> %val286}287 288define <4 x float> @minnum_v4f32(<4 x float> %x, <4 x float> %y) #0 {289; CHECK-LABEL: minnum_v4f32:290; CHECK:       // %bb.0:291; CHECK-NEXT:    fminnm v0.4s, v0.4s, v1.4s292; CHECK-NEXT:    ret293  %val = call <4 x float> @llvm.experimental.constrained.minnum.v4f32(<4 x float> %x, <4 x float> %y, metadata !"fpexcept.strict") #0294  ret <4 x float> %val295}296 297define <4 x float> @ceil_v4f32(<4 x float> %x) #0 {298; CHECK-LABEL: ceil_v4f32:299; CHECK:       // %bb.0:300; CHECK-NEXT:    frintp v0.4s, v0.4s301; CHECK-NEXT:    ret302  %val = call <4 x float> @llvm.experimental.constrained.ceil.v4f32(<4 x float> %x, metadata !"fpexcept.strict") #0303  ret <4 x float> %val304}305 306define <4 x float> @floor_v4f32(<4 x float> %x) #0 {307; CHECK-LABEL: floor_v4f32:308; CHECK:       // %bb.0:309; CHECK-NEXT:    frintm v0.4s, v0.4s310; CHECK-NEXT:    ret311  %val = call <4 x float> @llvm.experimental.constrained.floor.v4f32(<4 x float> %x, metadata !"fpexcept.strict") #0312  ret <4 x float> %val313}314 315define <4 x float> @round_v4f32(<4 x float> %x) #0 {316; CHECK-LABEL: round_v4f32:317; CHECK:       // %bb.0:318; CHECK-NEXT:    frinta v0.4s, v0.4s319; CHECK-NEXT:    ret320  %val = call <4 x float> @llvm.experimental.constrained.round.v4f32(<4 x float> %x, metadata !"fpexcept.strict") #0321  ret <4 x float> %val322}323 324define <4 x float> @roundeven_v4f32(<4 x float> %x) #0 {325; CHECK-LABEL: roundeven_v4f32:326; CHECK:       // %bb.0:327; CHECK-NEXT:    frintn v0.4s, v0.4s328; CHECK-NEXT:    ret329  %val = call <4 x float> @llvm.experimental.constrained.roundeven.v4f32(<4 x float> %x, metadata !"fpexcept.strict") #0330  ret <4 x float> %val331}332 333define <4 x float> @trunc_v4f32(<4 x float> %x) #0 {334; CHECK-LABEL: trunc_v4f32:335; CHECK:       // %bb.0:336; CHECK-NEXT:    frintz v0.4s, v0.4s337; CHECK-NEXT:    ret338  %val = call <4 x float> @llvm.experimental.constrained.trunc.v4f32(<4 x float> %x, metadata !"fpexcept.strict") #0339  ret <4 x float> %val340}341 342define <4 x i1> @fcmp_v4f32(<4 x float> %x, <4 x float> %y) #0 {343; CHECK-LABEL: fcmp_v4f32:344; CHECK:       // %bb.0: // %entry345; CHECK-NEXT:    mov s2, v1.s[1]346; CHECK-NEXT:    mov s3, v0.s[1]347; CHECK-NEXT:    fcmp s0, s1348; CHECK-NEXT:    csetm w8, eq349; CHECK-NEXT:    fcmp s3, s2350; CHECK-NEXT:    mov s2, v1.s[2]351; CHECK-NEXT:    mov s3, v0.s[2]352; CHECK-NEXT:    fmov s4, w8353; CHECK-NEXT:    mov s1, v1.s[3]354; CHECK-NEXT:    mov s0, v0.s[3]355; CHECK-NEXT:    csetm w8, eq356; CHECK-NEXT:    mov v4.s[1], w8357; CHECK-NEXT:    fcmp s3, s2358; CHECK-NEXT:    csetm w8, eq359; CHECK-NEXT:    fcmp s0, s1360; CHECK-NEXT:    mov v4.s[2], w8361; CHECK-NEXT:    csetm w8, eq362; CHECK-NEXT:    mov v4.s[3], w8363; CHECK-NEXT:    xtn v0.4h, v4.4s364; CHECK-NEXT:    ret365entry:366  %val = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x float> %x, <4 x float> %y, metadata !"oeq", metadata !"fpexcept.strict")367  ret <4 x i1> %val368}369 370define <4 x i1> @fcmps_v4f32(<4 x float> %x, <4 x float> %y) #0 {371; CHECK-LABEL: fcmps_v4f32:372; CHECK:       // %bb.0: // %entry373; CHECK-NEXT:    mov s2, v1.s[1]374; CHECK-NEXT:    mov s3, v0.s[1]375; CHECK-NEXT:    fcmpe s0, s1376; CHECK-NEXT:    csetm w8, eq377; CHECK-NEXT:    fcmpe s3, s2378; CHECK-NEXT:    mov s2, v1.s[2]379; CHECK-NEXT:    mov s3, v0.s[2]380; CHECK-NEXT:    fmov s4, w8381; CHECK-NEXT:    mov s1, v1.s[3]382; CHECK-NEXT:    mov s0, v0.s[3]383; CHECK-NEXT:    csetm w8, eq384; CHECK-NEXT:    mov v4.s[1], w8385; CHECK-NEXT:    fcmpe s3, s2386; CHECK-NEXT:    csetm w8, eq387; CHECK-NEXT:    fcmpe s0, s1388; CHECK-NEXT:    mov v4.s[2], w8389; CHECK-NEXT:    csetm w8, eq390; CHECK-NEXT:    mov v4.s[3], w8391; CHECK-NEXT:    xtn v0.4h, v4.4s392; CHECK-NEXT:    ret393entry:394  %val = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float> %x, <4 x float> %y, metadata !"oeq", metadata !"fpexcept.strict")395  ret <4 x i1> %val396}397 398 399; Double-precision intrinsics400 401define <2 x double> @add_v2f64(<2 x double> %x, <2 x double> %y) #0 {402; CHECK-LABEL: add_v2f64:403; CHECK:       // %bb.0:404; CHECK-NEXT:    fadd v0.2d, v0.2d, v1.2d405; CHECK-NEXT:    ret406  %val = call <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double> %x, <2 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0407  ret <2 x double> %val408}409 410define <2 x double> @sub_v2f64(<2 x double> %x, <2 x double> %y) #0 {411; CHECK-LABEL: sub_v2f64:412; CHECK:       // %bb.0:413; CHECK-NEXT:    fsub v0.2d, v0.2d, v1.2d414; CHECK-NEXT:    ret415  %val = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double> %x, <2 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0416  ret <2 x double> %val417}418 419define <2 x double> @mul_v2f64(<2 x double> %x, <2 x double> %y) #0 {420; CHECK-LABEL: mul_v2f64:421; CHECK:       // %bb.0:422; CHECK-NEXT:    fmul v0.2d, v0.2d, v1.2d423; CHECK-NEXT:    ret424  %val = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %x, <2 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0425  ret <2 x double> %val426}427 428define <2 x double> @div_v2f64(<2 x double> %x, <2 x double> %y) #0 {429; CHECK-LABEL: div_v2f64:430; CHECK:       // %bb.0:431; CHECK-NEXT:    fdiv v0.2d, v0.2d, v1.2d432; CHECK-NEXT:    ret433  %val = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double> %x, <2 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0434  ret <2 x double> %val435}436 437define <2 x double> @fma_v2f64(<2 x double> %x, <2 x double> %y, <2 x double> %z) #0 {438; CHECK-LABEL: fma_v2f64:439; CHECK:       // %bb.0:440; CHECK-NEXT:    fmla v2.2d, v1.2d, v0.2d441; CHECK-NEXT:    mov v0.16b, v2.16b442; CHECK-NEXT:    ret443  %val = call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %x, <2 x double> %y, <2 x double> %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0444  ret <2 x double> %val445}446 447define <2 x i32> @fptosi_v2i32_v2f64(<2 x double> %x) #0 {448; CHECK-LABEL: fptosi_v2i32_v2f64:449; CHECK:       // %bb.0:450; CHECK-NEXT:    fcvtzs v0.2d, v0.2d451; CHECK-NEXT:    xtn v0.2s, v0.2d452; CHECK-NEXT:    ret453  %val = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double> %x, metadata !"fpexcept.strict") #0454  ret <2 x i32> %val455}456 457define <2 x i32> @fptoui_v2i32_v2f64(<2 x double> %x) #0 {458; CHECK-LABEL: fptoui_v2i32_v2f64:459; CHECK:       // %bb.0:460; CHECK-NEXT:    fcvtzu v0.2d, v0.2d461; CHECK-NEXT:    xtn v0.2s, v0.2d462; CHECK-NEXT:    ret463  %val = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double> %x, metadata !"fpexcept.strict") #0464  ret <2 x i32> %val465}466 467define <2 x i64> @fptosi_v2i64_v2f64(<2 x double> %x) #0 {468; CHECK-LABEL: fptosi_v2i64_v2f64:469; CHECK:       // %bb.0:470; CHECK-NEXT:    fcvtzs v0.2d, v0.2d471; CHECK-NEXT:    ret472  %val = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double> %x, metadata !"fpexcept.strict") #0473  ret <2 x i64> %val474}475 476define <2 x i64> @fptoui_v2i64_v2f64(<2 x double> %x) #0 {477; CHECK-LABEL: fptoui_v2i64_v2f64:478; CHECK:       // %bb.0:479; CHECK-NEXT:    fcvtzu v0.2d, v0.2d480; CHECK-NEXT:    ret481  %val = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double> %x, metadata !"fpexcept.strict") #0482  ret <2 x i64> %val483}484 485define <2 x double> @sitofp_v2f64_v2i32(<2 x i32> %x) #0 {486; CHECK-LABEL: sitofp_v2f64_v2i32:487; CHECK:       // %bb.0:488; CHECK-NEXT:    sshll v0.2d, v0.2s, #0489; CHECK-NEXT:    scvtf v0.2d, v0.2d490; CHECK-NEXT:    ret491  %val = call <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0492  ret <2 x double> %val493}494 495define <2 x double> @uitofp_v2f64_v2i32(<2 x i32> %x) #0 {496; CHECK-LABEL: uitofp_v2f64_v2i32:497; CHECK:       // %bb.0:498; CHECK-NEXT:    ushll v0.2d, v0.2s, #0499; CHECK-NEXT:    ucvtf v0.2d, v0.2d500; CHECK-NEXT:    ret501  %val = call <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0502  ret <2 x double> %val503}504 505define <2 x double> @sitofp_v2f64_v2i64(<2 x i64> %x) #0 {506; CHECK-LABEL: sitofp_v2f64_v2i64:507; CHECK:       // %bb.0:508; CHECK-NEXT:    scvtf v0.2d, v0.2d509; CHECK-NEXT:    ret510  %val = call <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0511  ret <2 x double> %val512}513 514define <2 x double> @uitofp_v2f64_v2i64(<2 x i64> %x) #0 {515; CHECK-LABEL: uitofp_v2f64_v2i64:516; CHECK:       // %bb.0:517; CHECK-NEXT:    ucvtf v0.2d, v0.2d518; CHECK-NEXT:    ret519  %val = call <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0520  ret <2 x double> %val521}522 523define <2 x double> @sqrt_v2f64(<2 x double> %x) #0 {524; CHECK-LABEL: sqrt_v2f64:525; CHECK:       // %bb.0:526; CHECK-NEXT:    fsqrt v0.2d, v0.2d527; CHECK-NEXT:    ret528  %val = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0529  ret <2 x double> %val530}531 532define <2 x double> @rint_v2f64(<2 x double> %x) #0 {533; CHECK-LABEL: rint_v2f64:534; CHECK:       // %bb.0:535; CHECK-NEXT:    frintx v0.2d, v0.2d536; CHECK-NEXT:    ret537  %val = call <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0538  ret <2 x double> %val539}540 541define <2 x double> @nearbyint_v2f64(<2 x double> %x) #0 {542; CHECK-LABEL: nearbyint_v2f64:543; CHECK:       // %bb.0:544; CHECK-NEXT:    frinti v0.2d, v0.2d545; CHECK-NEXT:    ret546  %val = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0547  ret <2 x double> %val548}549 550define <2 x double> @maxnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {551; CHECK-LABEL: maxnum_v2f64:552; CHECK:       // %bb.0:553; CHECK-NEXT:    fmaxnm v0.2d, v0.2d, v1.2d554; CHECK-NEXT:    ret555  %val = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double> %x, <2 x double> %y, metadata !"fpexcept.strict") #0556  ret <2 x double> %val557}558 559define <2 x double> @minnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {560; CHECK-LABEL: minnum_v2f64:561; CHECK:       // %bb.0:562; CHECK-NEXT:    fminnm v0.2d, v0.2d, v1.2d563; CHECK-NEXT:    ret564  %val = call <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double> %x, <2 x double> %y, metadata !"fpexcept.strict") #0565  ret <2 x double> %val566}567 568define <2 x double> @ceil_v2f64(<2 x double> %x) #0 {569; CHECK-LABEL: ceil_v2f64:570; CHECK:       // %bb.0:571; CHECK-NEXT:    frintp v0.2d, v0.2d572; CHECK-NEXT:    ret573  %val = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double> %x, metadata !"fpexcept.strict") #0574  ret <2 x double> %val575}576 577define <2 x double> @floor_v2f64(<2 x double> %x) #0 {578; CHECK-LABEL: floor_v2f64:579; CHECK:       // %bb.0:580; CHECK-NEXT:    frintm v0.2d, v0.2d581; CHECK-NEXT:    ret582  %val = call <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double> %x, metadata !"fpexcept.strict") #0583  ret <2 x double> %val584}585 586define <2 x double> @round_v2f64(<2 x double> %x) #0 {587; CHECK-LABEL: round_v2f64:588; CHECK:       // %bb.0:589; CHECK-NEXT:    frinta v0.2d, v0.2d590; CHECK-NEXT:    ret591  %val = call <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double> %x, metadata !"fpexcept.strict") #0592  ret <2 x double> %val593}594 595define <2 x double> @roundeven_v2f64(<2 x double> %x) #0 {596; CHECK-LABEL: roundeven_v2f64:597; CHECK:       // %bb.0:598; CHECK-NEXT:    frintn v0.2d, v0.2d599; CHECK-NEXT:    ret600  %val = call <2 x double> @llvm.experimental.constrained.roundeven.v2f64(<2 x double> %x, metadata !"fpexcept.strict") #0601  ret <2 x double> %val602}603 604define <2 x double> @trunc_v2f64(<2 x double> %x) #0 {605; CHECK-LABEL: trunc_v2f64:606; CHECK:       // %bb.0:607; CHECK-NEXT:    frintz v0.2d, v0.2d608; CHECK-NEXT:    ret609  %val = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double> %x, metadata !"fpexcept.strict") #0610  ret <2 x double> %val611}612 613define <2 x i1> @fcmp_v2f64(<2 x double> %x, <2 x double> %y) #0 {614; CHECK-LABEL: fcmp_v2f64:615; CHECK:       // %bb.0: // %entry616; CHECK-NEXT:    mov d2, v1.d[1]617; CHECK-NEXT:    mov d3, v0.d[1]618; CHECK-NEXT:    fcmp d0, d1619; CHECK-NEXT:    csetm x8, eq620; CHECK-NEXT:    fcmp d3, d2621; CHECK-NEXT:    fmov d0, x8622; CHECK-NEXT:    csetm x8, eq623; CHECK-NEXT:    mov v0.d[1], x8624; CHECK-NEXT:    xtn v0.2s, v0.2d625; CHECK-NEXT:    ret626entry:627  %val = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %x, <2 x double> %y, metadata !"oeq", metadata !"fpexcept.strict")628  ret <2 x i1> %val629}630 631define <2 x i1> @fcmps_v2f64(<2 x double> %x, <2 x double> %y) #0 {632; CHECK-LABEL: fcmps_v2f64:633; CHECK:       // %bb.0: // %entry634; CHECK-NEXT:    mov d2, v1.d[1]635; CHECK-NEXT:    mov d3, v0.d[1]636; CHECK-NEXT:    fcmpe d0, d1637; CHECK-NEXT:    csetm x8, eq638; CHECK-NEXT:    fcmpe d3, d2639; CHECK-NEXT:    fmov d0, x8640; CHECK-NEXT:    csetm x8, eq641; CHECK-NEXT:    mov v0.d[1], x8642; CHECK-NEXT:    xtn v0.2s, v0.2d643; CHECK-NEXT:    ret644entry:645  %val = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %x, <2 x double> %y, metadata !"oeq", metadata !"fpexcept.strict")646  ret <2 x i1> %val647}648 649 650; Double-precision single element intrinsics651 652define <1 x double> @add_v1f64(<1 x double> %x, <1 x double> %y) #0 {653; CHECK-LABEL: add_v1f64:654; CHECK:       // %bb.0:655; CHECK-NEXT:    fadd d0, d0, d1656; CHECK-NEXT:    ret657  %val = call <1 x double> @llvm.experimental.constrained.fadd.v1f64(<1 x double> %x, <1 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0658  ret <1 x double> %val659}660 661define <1 x double> @sub_v1f64(<1 x double> %x, <1 x double> %y) #0 {662; CHECK-LABEL: sub_v1f64:663; CHECK:       // %bb.0:664; CHECK-NEXT:    fsub d0, d0, d1665; CHECK-NEXT:    ret666  %val = call <1 x double> @llvm.experimental.constrained.fsub.v1f64(<1 x double> %x, <1 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0667  ret <1 x double> %val668}669 670define <1 x double> @mul_v1f64(<1 x double> %x, <1 x double> %y) #0 {671; CHECK-LABEL: mul_v1f64:672; CHECK:       // %bb.0:673; CHECK-NEXT:    fmul d0, d0, d1674; CHECK-NEXT:    ret675  %val = call <1 x double> @llvm.experimental.constrained.fmul.v1f64(<1 x double> %x, <1 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0676  ret <1 x double> %val677}678 679define <1 x double> @div_v1f64(<1 x double> %x, <1 x double> %y) #0 {680; CHECK-LABEL: div_v1f64:681; CHECK:       // %bb.0:682; CHECK-NEXT:    fdiv d0, d0, d1683; CHECK-NEXT:    ret684  %val = call <1 x double> @llvm.experimental.constrained.fdiv.v1f64(<1 x double> %x, <1 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0685  ret <1 x double> %val686}687 688define <1 x double> @fma_v1f64(<1 x double> %x, <1 x double> %y, <1 x double> %z) #0 {689; CHECK-LABEL: fma_v1f64:690; CHECK:       // %bb.0:691; CHECK-NEXT:    fmadd d0, d0, d1, d2692; CHECK-NEXT:    ret693  %val = call <1 x double> @llvm.experimental.constrained.fma.v1f64(<1 x double> %x, <1 x double> %y, <1 x double> %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0694  ret <1 x double> %val695}696 697define <1 x i32> @fptosi_v1i32_v1f64(<1 x double> %x) #0 {698; CHECK-LABEL: fptosi_v1i32_v1f64:699; CHECK:       // %bb.0:700; CHECK-NEXT:    fcvtzs w8, d0701; CHECK-NEXT:    fmov s0, w8702; CHECK-NEXT:    ret703  %val = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double> %x, metadata !"fpexcept.strict") #0704  ret <1 x i32> %val705}706 707define <1 x i32> @fptoui_v1i32_v1f64(<1 x double> %x) #0 {708; CHECK-LABEL: fptoui_v1i32_v1f64:709; CHECK:       // %bb.0:710; CHECK-NEXT:    fcvtzu w8, d0711; CHECK-NEXT:    fmov s0, w8712; CHECK-NEXT:    ret713  %val = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double> %x, metadata !"fpexcept.strict") #0714  ret <1 x i32> %val715}716 717define <1 x i64> @fptosi_v1i64_v1f64(<1 x double> %x) #0 {718; CHECK-LABEL: fptosi_v1i64_v1f64:719; CHECK:       // %bb.0:720; CHECK-NEXT:    fcvtzs x8, d0721; CHECK-NEXT:    fmov d0, x8722; CHECK-NEXT:    ret723  %val = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double> %x, metadata !"fpexcept.strict") #0724  ret <1 x i64> %val725}726 727define <1 x i64> @fptoui_v1i64_v1f64(<1 x double> %x) #0 {728; CHECK-LABEL: fptoui_v1i64_v1f64:729; CHECK:       // %bb.0:730; CHECK-NEXT:    fcvtzu x8, d0731; CHECK-NEXT:    fmov d0, x8732; CHECK-NEXT:    ret733  %val = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double> %x, metadata !"fpexcept.strict") #0734  ret <1 x i64> %val735}736 737define <1 x double> @sitofp_v1f64_v1i32(<1 x i32> %x) #0 {738; CHECK-LABEL: sitofp_v1f64_v1i32:739; CHECK:       // %bb.0:740; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0741; CHECK-NEXT:    fmov w8, s0742; CHECK-NEXT:    scvtf d0, w8743; CHECK-NEXT:    ret744  %val = call <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0745  ret <1 x double> %val746}747 748define <1 x double> @uitofp_v1f64_v1i32(<1 x i32> %x) #0 {749; CHECK-LABEL: uitofp_v1f64_v1i32:750; CHECK:       // %bb.0:751; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0752; CHECK-NEXT:    fmov w8, s0753; CHECK-NEXT:    ucvtf d0, w8754; CHECK-NEXT:    ret755  %val = call <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0756  ret <1 x double> %val757}758 759define <1 x double> @sitofp_v1f64_v1i64(<1 x i64> %x) #0 {760; CHECK-LABEL: sitofp_v1f64_v1i64:761; CHECK:       // %bb.0:762; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0763; CHECK-NEXT:    fmov x8, d0764; CHECK-NEXT:    scvtf d0, x8765; CHECK-NEXT:    ret766  %val = call <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0767  ret <1 x double> %val768}769 770define <1 x double> @uitofp_v1f64_v1i64(<1 x i64> %x) #0 {771; CHECK-LABEL: uitofp_v1f64_v1i64:772; CHECK:       // %bb.0:773; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0774; CHECK-NEXT:    fmov x8, d0775; CHECK-NEXT:    ucvtf d0, x8776; CHECK-NEXT:    ret777  %val = call <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0778  ret <1 x double> %val779}780 781define <1 x double> @sqrt_v1f64(<1 x double> %x) #0 {782; CHECK-LABEL: sqrt_v1f64:783; CHECK:       // %bb.0:784; CHECK-NEXT:    fsqrt d0, d0785; CHECK-NEXT:    ret786  %val = call <1 x double> @llvm.experimental.constrained.sqrt.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0787  ret <1 x double> %val788}789 790define <1 x double> @rint_v1f64(<1 x double> %x) #0 {791; CHECK-LABEL: rint_v1f64:792; CHECK:       // %bb.0:793; CHECK-NEXT:    frintx d0, d0794; CHECK-NEXT:    ret795  %val = call <1 x double> @llvm.experimental.constrained.rint.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0796  ret <1 x double> %val797}798 799define <1 x double> @nearbyint_v1f64(<1 x double> %x) #0 {800; CHECK-LABEL: nearbyint_v1f64:801; CHECK:       // %bb.0:802; CHECK-NEXT:    frinti d0, d0803; CHECK-NEXT:    ret804  %val = call <1 x double> @llvm.experimental.constrained.nearbyint.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0805  ret <1 x double> %val806}807 808define <1 x double> @maxnum_v1f64(<1 x double> %x, <1 x double> %y) #0 {809; CHECK-LABEL: maxnum_v1f64:810; CHECK:       // %bb.0:811; CHECK-NEXT:    fmaxnm d0, d0, d1812; CHECK-NEXT:    ret813  %val = call <1 x double> @llvm.experimental.constrained.maxnum.v1f64(<1 x double> %x, <1 x double> %y, metadata !"fpexcept.strict") #0814  ret <1 x double> %val815}816 817define <1 x double> @minnum_v1f64(<1 x double> %x, <1 x double> %y) #0 {818; CHECK-LABEL: minnum_v1f64:819; CHECK:       // %bb.0:820; CHECK-NEXT:    fminnm d0, d0, d1821; CHECK-NEXT:    ret822  %val = call <1 x double> @llvm.experimental.constrained.minnum.v1f64(<1 x double> %x, <1 x double> %y, metadata !"fpexcept.strict") #0823  ret <1 x double> %val824}825 826define <1 x double> @ceil_v1f64(<1 x double> %x) #0 {827; CHECK-LABEL: ceil_v1f64:828; CHECK:       // %bb.0:829; CHECK-NEXT:    frintp d0, d0830; CHECK-NEXT:    ret831  %val = call <1 x double> @llvm.experimental.constrained.ceil.v1f64(<1 x double> %x, metadata !"fpexcept.strict") #0832  ret <1 x double> %val833}834 835define <1 x double> @floor_v1f64(<1 x double> %x) #0 {836; CHECK-LABEL: floor_v1f64:837; CHECK:       // %bb.0:838; CHECK-NEXT:    frintm d0, d0839; CHECK-NEXT:    ret840  %val = call <1 x double> @llvm.experimental.constrained.floor.v1f64(<1 x double> %x, metadata !"fpexcept.strict") #0841  ret <1 x double> %val842}843 844define <1 x double> @round_v1f64(<1 x double> %x) #0 {845; CHECK-LABEL: round_v1f64:846; CHECK:       // %bb.0:847; CHECK-NEXT:    frinta d0, d0848; CHECK-NEXT:    ret849  %val = call <1 x double> @llvm.experimental.constrained.round.v1f64(<1 x double> %x, metadata !"fpexcept.strict") #0850  ret <1 x double> %val851}852 853define <1 x double> @roundeven_v1f64(<1 x double> %x) #0 {854; CHECK-LABEL: roundeven_v1f64:855; CHECK:       // %bb.0:856; CHECK-NEXT:    frintn d0, d0857; CHECK-NEXT:    ret858  %val = call <1 x double> @llvm.experimental.constrained.roundeven.v1f64(<1 x double> %x, metadata !"fpexcept.strict") #0859  ret <1 x double> %val860}861 862define <1 x double> @trunc_v1f64(<1 x double> %x) #0 {863; CHECK-LABEL: trunc_v1f64:864; CHECK:       // %bb.0:865; CHECK-NEXT:    frintz d0, d0866; CHECK-NEXT:    ret867  %val = call <1 x double> @llvm.experimental.constrained.trunc.v1f64(<1 x double> %x, metadata !"fpexcept.strict") #0868  ret <1 x double> %val869}870 871define <1 x i1> @fcmp_v1f61(<1 x double> %x, <1 x double> %y) #0 {872; CHECK-LABEL: fcmp_v1f61:873; CHECK:       // %bb.0: // %entry874; CHECK-NEXT:    fcmp d0, d1875; CHECK-NEXT:    cset w0, eq876; CHECK-NEXT:    ret877entry:878  %val = call <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double> %x, <1 x double> %y, metadata !"oeq", metadata !"fpexcept.strict")879  ret <1 x i1> %val880}881 882define <1 x i1> @fcmps_v1f61(<1 x double> %x, <1 x double> %y) #0 {883; CHECK-LABEL: fcmps_v1f61:884; CHECK:       // %bb.0: // %entry885; CHECK-NEXT:    fcmpe d0, d1886; CHECK-NEXT:    cset w0, eq887; CHECK-NEXT:    ret888entry:889  %val = call <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double> %x, <1 x double> %y, metadata !"oeq", metadata !"fpexcept.strict")890  ret <1 x i1> %val891}892 893 894; Intrinsics to convert between floating-point types895 896define <2 x float> @fptrunc_v2f32_v2f64(<2 x double> %x) #0 {897; CHECK-LABEL: fptrunc_v2f32_v2f64:898; CHECK:       // %bb.0:899; CHECK-NEXT:    fcvtn v0.2s, v0.2d900; CHECK-NEXT:    ret901  %val = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0902  ret <2 x float> %val903}904 905define <2 x double> @fpext_v2f64_v2f32(<2 x float> %x) #0 {906; CHECK-LABEL: fpext_v2f64_v2f32:907; CHECK:       // %bb.0:908; CHECK-NEXT:    fcvtl v0.2d, v0.2s909; CHECK-NEXT:    ret910  %val = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float> %x, metadata !"fpexcept.strict") #0911  ret <2 x double> %val912}913 914 915attributes #0 = { strictfp }916 917declare <4 x float> @llvm.experimental.constrained.fadd.v4f32(<4 x float>, <4 x float>, metadata, metadata)918declare <4 x float> @llvm.experimental.constrained.fsub.v4f32(<4 x float>, <4 x float>, metadata, metadata)919declare <4 x float> @llvm.experimental.constrained.fmul.v4f32(<4 x float>, <4 x float>, metadata, metadata)920declare <4 x float> @llvm.experimental.constrained.fdiv.v4f32(<4 x float>, <4 x float>, metadata, metadata)921declare <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float>, <4 x float>, <4 x float>, metadata, metadata)922declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata)923declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata)924declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata)925declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata)926declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)927declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)928declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)929declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)930declare <4 x float> @llvm.experimental.constrained.sqrt.v4f32(<4 x float>, metadata, metadata)931declare <4 x float> @llvm.experimental.constrained.rint.v4f32(<4 x float>, metadata, metadata)932declare <4 x float> @llvm.experimental.constrained.nearbyint.v4f32(<4 x float>, metadata, metadata)933declare <4 x float> @llvm.experimental.constrained.maxnum.v4f32(<4 x float>, <4 x float>, metadata)934declare <4 x float> @llvm.experimental.constrained.minnum.v4f32(<4 x float>, <4 x float>, metadata)935declare <4 x float> @llvm.experimental.constrained.ceil.v4f32(<4 x float>, metadata)936declare <4 x float> @llvm.experimental.constrained.floor.v4f32(<4 x float>, metadata)937declare <4 x float> @llvm.experimental.constrained.round.v4f32(<4 x float>, metadata)938declare <4 x float> @llvm.experimental.constrained.roundeven.v4f32(<4 x float>, metadata)939declare <4 x float> @llvm.experimental.constrained.trunc.v4f32(<4 x float>, metadata)940declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f32(<4 x float>, <4 x float>, metadata, metadata)941declare <4 x i1> @llvm.experimental.constrained.fcmps.v4f32(<4 x float>, <4 x float>, metadata, metadata)942 943declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata)944declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata)945declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)946declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata)947declare <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double>, <2 x double>, <2 x double>, metadata, metadata)948declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata)949declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata)950declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata)951declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata)952declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)953declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)954declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)955declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)956declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)957declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)958declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)959declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata)960declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata)961declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata)962declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata)963declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata)964declare <2 x double> @llvm.experimental.constrained.roundeven.v2f64(<2 x double>, metadata)965declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)966declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double>, <2 x double>, metadata, metadata)967declare <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double>, <2 x double>, metadata, metadata)968 969declare <1 x double> @llvm.experimental.constrained.fadd.v1f64(<1 x double>, <1 x double>, metadata, metadata)970declare <1 x double> @llvm.experimental.constrained.fsub.v1f64(<1 x double>, <1 x double>, metadata, metadata)971declare <1 x double> @llvm.experimental.constrained.fmul.v1f64(<1 x double>, <1 x double>, metadata, metadata)972declare <1 x double> @llvm.experimental.constrained.fdiv.v1f64(<1 x double>, <1 x double>, metadata, metadata)973declare <1 x double> @llvm.experimental.constrained.fma.v1f64(<1 x double>, <1 x double>, <1 x double>, metadata, metadata)974declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata)975declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata)976declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata)977declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata)978declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)979declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)980declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)981declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)982declare <1 x double> @llvm.experimental.constrained.sqrt.v1f64(<1 x double>, metadata, metadata)983declare <1 x double> @llvm.experimental.constrained.rint.v1f64(<1 x double>, metadata, metadata)984declare <1 x double> @llvm.experimental.constrained.nearbyint.v1f64(<1 x double>, metadata, metadata)985declare <1 x double> @llvm.experimental.constrained.maxnum.v1f64(<1 x double>, <1 x double>, metadata)986declare <1 x double> @llvm.experimental.constrained.minnum.v1f64(<1 x double>, <1 x double>, metadata)987declare <1 x double> @llvm.experimental.constrained.ceil.v1f64(<1 x double>, metadata)988declare <1 x double> @llvm.experimental.constrained.floor.v1f64(<1 x double>, metadata)989declare <1 x double> @llvm.experimental.constrained.round.v1f64(<1 x double>, metadata)990declare <1 x double> @llvm.experimental.constrained.roundeven.v1f64(<1 x double>, metadata)991declare <1 x double> @llvm.experimental.constrained.trunc.v1f64(<1 x double>, metadata)992declare <1 x i1> @llvm.experimental.constrained.fcmp.v1f64(<1 x double>, <1 x double>, metadata, metadata)993declare <1 x i1> @llvm.experimental.constrained.fcmps.v1f64(<1 x double>, <1 x double>, metadata, metadata)994 995declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata)996declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata)997 998;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:999; CHECK-GI: {{.*}}1000; CHECK-SD: {{.*}}1001