brintos

brintos / llvm-project-archived public Read only

0
0
Text · 44.1 KiB · 2f3f99c Raw
1161 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s3 4define <vscale x 8 x half> @fadd_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {5; CHECK-LABEL: fadd_nxv8f16:6; CHECK:       // %bb.0:7; CHECK-NEXT:    fadd z0.h, z0.h, z1.h8; CHECK-NEXT:    ret9  %res = fadd <vscale x 8 x half> %a, %b10  ret <vscale x 8 x half> %res11}12 13define <vscale x 4 x half> @fadd_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {14; CHECK-LABEL: fadd_nxv4f16:15; CHECK:       // %bb.0:16; CHECK-NEXT:    ptrue p0.s17; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, z1.h18; CHECK-NEXT:    ret19  %res = fadd <vscale x 4 x half> %a, %b20  ret <vscale x 4 x half> %res21}22 23define <vscale x 2 x half> @fadd_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {24; CHECK-LABEL: fadd_nxv2f16:25; CHECK:       // %bb.0:26; CHECK-NEXT:    ptrue p0.d27; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, z1.h28; CHECK-NEXT:    ret29  %res = fadd <vscale x 2 x half> %a, %b30  ret <vscale x 2 x half> %res31}32 33define <vscale x 4 x float> @fadd_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {34; CHECK-LABEL: fadd_nxv4f32:35; CHECK:       // %bb.0:36; CHECK-NEXT:    fadd z0.s, z0.s, z1.s37; CHECK-NEXT:    ret38  %res = fadd <vscale x 4 x float> %a, %b39  ret <vscale x 4 x float> %res40}41 42define <vscale x 2 x float> @fadd_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {43; CHECK-LABEL: fadd_nxv2f32:44; CHECK:       // %bb.0:45; CHECK-NEXT:    ptrue p0.d46; CHECK-NEXT:    fadd z0.s, p0/m, z0.s, z1.s47; CHECK-NEXT:    ret48  %res = fadd <vscale x 2 x float> %a, %b49  ret <vscale x 2 x float> %res50}51 52define <vscale x 2 x double> @fadd_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {53; CHECK-LABEL: fadd_nxv2f64:54; CHECK:       // %bb.0:55; CHECK-NEXT:    fadd z0.d, z0.d, z1.d56; CHECK-NEXT:    ret57  %res = fadd <vscale x 2 x double> %a, %b58  ret <vscale x 2 x double> %res59}60 61define <vscale x 8 x half> @fdiv_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {62; CHECK-LABEL: fdiv_nxv8f16:63; CHECK:       // %bb.0:64; CHECK-NEXT:    ptrue p0.h65; CHECK-NEXT:    fdiv z0.h, p0/m, z0.h, z1.h66; CHECK-NEXT:    ret67  %res = fdiv <vscale x 8 x half> %a, %b68  ret <vscale x 8 x half> %res69}70 71define <vscale x 4 x half> @fdiv_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {72; CHECK-LABEL: fdiv_nxv4f16:73; CHECK:       // %bb.0:74; CHECK-NEXT:    ptrue p0.s75; CHECK-NEXT:    fdiv z0.h, p0/m, z0.h, z1.h76; CHECK-NEXT:    ret77  %res = fdiv <vscale x 4 x half> %a, %b78  ret <vscale x 4 x half> %res79}80 81define <vscale x 2 x half> @fdiv_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {82; CHECK-LABEL: fdiv_nxv2f16:83; CHECK:       // %bb.0:84; CHECK-NEXT:    ptrue p0.d85; CHECK-NEXT:    fdiv z0.h, p0/m, z0.h, z1.h86; CHECK-NEXT:    ret87  %res = fdiv <vscale x 2 x half> %a, %b88  ret <vscale x 2 x half> %res89}90 91define <vscale x 4 x float> @fdiv_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {92; CHECK-LABEL: fdiv_nxv4f32:93; CHECK:       // %bb.0:94; CHECK-NEXT:    ptrue p0.s95; CHECK-NEXT:    fdiv z0.s, p0/m, z0.s, z1.s96; CHECK-NEXT:    ret97  %res = fdiv <vscale x 4 x float> %a, %b98  ret <vscale x 4 x float> %res99}100 101define <vscale x 2 x float> @fdiv_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {102; CHECK-LABEL: fdiv_nxv2f32:103; CHECK:       // %bb.0:104; CHECK-NEXT:    ptrue p0.d105; CHECK-NEXT:    fdiv z0.s, p0/m, z0.s, z1.s106; CHECK-NEXT:    ret107  %res = fdiv <vscale x 2 x float> %a, %b108  ret <vscale x 2 x float> %res109}110 111define <vscale x 2 x double> @fdiv_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {112; CHECK-LABEL: fdiv_nxv2f64:113; CHECK:       // %bb.0:114; CHECK-NEXT:    ptrue p0.d115; CHECK-NEXT:    fdiv z0.d, p0/m, z0.d, z1.d116; CHECK-NEXT:    ret117  %res = fdiv <vscale x 2 x double> %a, %b118  ret <vscale x 2 x double> %res119}120 121define <vscale x 8 x half> @fsub_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {122; CHECK-LABEL: fsub_nxv8f16:123; CHECK:       // %bb.0:124; CHECK-NEXT:    fsub z0.h, z0.h, z1.h125; CHECK-NEXT:    ret126  %res = fsub <vscale x 8 x half> %a, %b127  ret <vscale x 8 x half> %res128}129 130define <vscale x 4 x half> @fsub_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {131; CHECK-LABEL: fsub_nxv4f16:132; CHECK:       // %bb.0:133; CHECK-NEXT:    ptrue p0.s134; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, z1.h135; CHECK-NEXT:    ret136  %res = fsub <vscale x 4 x half> %a, %b137  ret <vscale x 4 x half> %res138}139 140define <vscale x 2 x half> @fsub_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {141; CHECK-LABEL: fsub_nxv2f16:142; CHECK:       // %bb.0:143; CHECK-NEXT:    ptrue p0.d144; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, z1.h145; CHECK-NEXT:    ret146  %res = fsub <vscale x 2 x half> %a, %b147  ret <vscale x 2 x half> %res148}149 150define <vscale x 4 x float> @fsub_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {151; CHECK-LABEL: fsub_nxv4f32:152; CHECK:       // %bb.0:153; CHECK-NEXT:    fsub z0.s, z0.s, z1.s154; CHECK-NEXT:    ret155  %res = fsub <vscale x 4 x float> %a, %b156  ret <vscale x 4 x float> %res157}158 159define <vscale x 2 x float> @fsub_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {160; CHECK-LABEL: fsub_nxv2f32:161; CHECK:       // %bb.0:162; CHECK-NEXT:    ptrue p0.d163; CHECK-NEXT:    fsub z0.s, p0/m, z0.s, z1.s164; CHECK-NEXT:    ret165  %res = fsub <vscale x 2 x float> %a, %b166  ret <vscale x 2 x float> %res167}168 169define <vscale x 2 x double> @fsub_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {170; CHECK-LABEL: fsub_nxv2f64:171; CHECK:       // %bb.0:172; CHECK-NEXT:    fsub z0.d, z0.d, z1.d173; CHECK-NEXT:    ret174  %res = fsub <vscale x 2 x double> %a, %b175  ret <vscale x 2 x double> %res176}177 178define <vscale x 8 x half> @fmul_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {179; CHECK-LABEL: fmul_nxv8f16:180; CHECK:       // %bb.0:181; CHECK-NEXT:    fmul z0.h, z0.h, z1.h182; CHECK-NEXT:    ret183  %res = fmul <vscale x 8 x half> %a, %b184  ret <vscale x 8 x half> %res185}186 187define <vscale x 4 x half> @fmul_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {188; CHECK-LABEL: fmul_nxv4f16:189; CHECK:       // %bb.0:190; CHECK-NEXT:    ptrue p0.s191; CHECK-NEXT:    fmul z0.h, p0/m, z0.h, z1.h192; CHECK-NEXT:    ret193  %res = fmul <vscale x 4 x half> %a, %b194  ret <vscale x 4 x half> %res195}196 197define <vscale x 2 x half> @fmul_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {198; CHECK-LABEL: fmul_nxv2f16:199; CHECK:       // %bb.0:200; CHECK-NEXT:    ptrue p0.d201; CHECK-NEXT:    fmul z0.h, p0/m, z0.h, z1.h202; CHECK-NEXT:    ret203  %res = fmul <vscale x 2 x half> %a, %b204  ret <vscale x 2 x half> %res205}206 207define <vscale x 4 x float> @fmul_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {208; CHECK-LABEL: fmul_nxv4f32:209; CHECK:       // %bb.0:210; CHECK-NEXT:    fmul z0.s, z0.s, z1.s211; CHECK-NEXT:    ret212  %res = fmul <vscale x 4 x float> %a, %b213  ret <vscale x 4 x float> %res214}215 216define <vscale x 2 x float> @fmul_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {217; CHECK-LABEL: fmul_nxv2f32:218; CHECK:       // %bb.0:219; CHECK-NEXT:    ptrue p0.d220; CHECK-NEXT:    fmul z0.s, p0/m, z0.s, z1.s221; CHECK-NEXT:    ret222  %res = fmul <vscale x 2 x float> %a, %b223  ret <vscale x 2 x float> %res224}225 226define <vscale x 2 x double> @fmul_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {227; CHECK-LABEL: fmul_nxv2f64:228; CHECK:       // %bb.0:229; CHECK-NEXT:    fmul z0.d, z0.d, z1.d230; CHECK-NEXT:    ret231  %res = fmul <vscale x 2 x double> %a, %b232  ret <vscale x 2 x double> %res233}234 235define <vscale x 8 x half> @fma_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {236; CHECK-LABEL: fma_nxv8f16:237; CHECK:       // %bb.0:238; CHECK-NEXT:    ptrue p0.h239; CHECK-NEXT:    fmad z0.h, p0/m, z1.h, z2.h240; CHECK-NEXT:    ret241  %r = call <vscale x 8 x half> @llvm.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c)242  ret <vscale x 8 x half> %r243}244 245define <vscale x 4 x half> @fma_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c) {246; CHECK-LABEL: fma_nxv4f16:247; CHECK:       // %bb.0:248; CHECK-NEXT:    ptrue p0.s249; CHECK-NEXT:    fmad z0.h, p0/m, z1.h, z2.h250; CHECK-NEXT:    ret251  %r = call <vscale x 4 x half> @llvm.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c)252  ret <vscale x 4 x half> %r253}254 255define <vscale x 2 x half> @fma_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c) {256; CHECK-LABEL: fma_nxv2f16:257; CHECK:       // %bb.0:258; CHECK-NEXT:    ptrue p0.d259; CHECK-NEXT:    fmad z0.h, p0/m, z1.h, z2.h260; CHECK-NEXT:    ret261  %r = call <vscale x 2 x half> @llvm.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c)262  ret <vscale x 2 x half> %r263}264 265define <vscale x 4 x float> @fma_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {266; CHECK-LABEL: fma_nxv4f32:267; CHECK:       // %bb.0:268; CHECK-NEXT:    ptrue p0.s269; CHECK-NEXT:    fmad z0.s, p0/m, z1.s, z2.s270; CHECK-NEXT:    ret271  %r = call <vscale x 4 x float> @llvm.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c)272  ret <vscale x 4 x float> %r273}274 275define <vscale x 2 x float> @fma_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c) {276; CHECK-LABEL: fma_nxv2f32:277; CHECK:       // %bb.0:278; CHECK-NEXT:    ptrue p0.d279; CHECK-NEXT:    fmad z0.s, p0/m, z1.s, z2.s280; CHECK-NEXT:    ret281  %r = call <vscale x 2 x float> @llvm.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c)282  ret <vscale x 2 x float> %r283}284 285define <vscale x 2 x double> @fma_nxv2f64_1(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {286; CHECK-LABEL: fma_nxv2f64_1:287; CHECK:       // %bb.0:288; CHECK-NEXT:    ptrue p0.d289; CHECK-NEXT:    fmad z0.d, p0/m, z1.d, z2.d290; CHECK-NEXT:    ret291  %r = call <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c)292  ret <vscale x 2 x double> %r293}294 295define <vscale x 2 x double> @fma_nxv2f64_2(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {296; CHECK-LABEL: fma_nxv2f64_2:297; CHECK:       // %bb.0:298; CHECK-NEXT:    ptrue p0.d299; CHECK-NEXT:    fmad z0.d, p0/m, z1.d, z2.d300; CHECK-NEXT:    ret301  %r = call <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x double> %a, <vscale x 2 x double> %c)302  ret <vscale x 2 x double> %r303}304 305define <vscale x 2 x double> @fma_nxv2f64_3(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {306; CHECK-LABEL: fma_nxv2f64_3:307; CHECK:       // %bb.0:308; CHECK-NEXT:    ptrue p0.d309; CHECK-NEXT:    fmla z0.d, p0/m, z2.d, z1.d310; CHECK-NEXT:    ret311  %r = call <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x double> %b, <vscale x 2 x double> %a)312  ret <vscale x 2 x double> %r313}314 315define <vscale x 8 x half> @fmls_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {316; CHECK-LABEL: fmls_nxv8f16:317; CHECK:       // %bb.0:318; CHECK-NEXT:    ptrue p0.h319; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h320; CHECK-NEXT:    ret321  %neg = fneg <vscale x 8 x half> %b322  %r = call <vscale x 8 x half> @llvm.fma.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x half> %neg, <vscale x 8 x half> %a)323  ret <vscale x 8 x half> %r324}325 326define <vscale x 4 x half> @fmls_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c) {327; CHECK-LABEL: fmls_nxv4f16:328; CHECK:       // %bb.0:329; CHECK-NEXT:    ptrue p0.s330; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h331; CHECK-NEXT:    ret332  %neg = fneg <vscale x 4 x half> %b333  %r = call <vscale x 4 x half> @llvm.fma.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x half> %neg, <vscale x 4 x half> %a)334  ret <vscale x 4 x half> %r335}336 337define <vscale x 2 x half> @fmls_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c) {338; CHECK-LABEL: fmls_nxv2f16:339; CHECK:       // %bb.0:340; CHECK-NEXT:    ptrue p0.d341; CHECK-NEXT:    fmls z0.h, p0/m, z1.h, z2.h342; CHECK-NEXT:    ret343  %neg = fneg <vscale x 2 x half> %b344  %r = call <vscale x 2 x half> @llvm.fma.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x half> %neg, <vscale x 2 x half> %a)345  ret <vscale x 2 x half> %r346}347 348define <vscale x 4 x float> @fmls_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {349; CHECK-LABEL: fmls_nxv4f32:350; CHECK:       // %bb.0:351; CHECK-NEXT:    ptrue p0.s352; CHECK-NEXT:    fmls z0.s, p0/m, z1.s, z2.s353; CHECK-NEXT:    ret354  %neg = fneg <vscale x 4 x float> %b355  %r = call <vscale x 4 x float> @llvm.fma.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x float> %neg, <vscale x 4 x float> %a)356  ret <vscale x 4 x float> %r357}358 359define <vscale x 2 x float> @fmls_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c) {360; CHECK-LABEL: fmls_nxv2f32:361; CHECK:       // %bb.0:362; CHECK-NEXT:    ptrue p0.d363; CHECK-NEXT:    fmls z0.s, p0/m, z1.s, z2.s364; CHECK-NEXT:    ret365  %neg = fneg <vscale x 2 x float> %b366  %r = call <vscale x 2 x float> @llvm.fma.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x float> %neg, <vscale x 2 x float> %a)367  ret <vscale x 2 x float> %r368}369 370define <vscale x 2 x double> @fmls_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {371; CHECK-LABEL: fmls_nxv2f64:372; CHECK:       // %bb.0:373; CHECK-NEXT:    ptrue p0.d374; CHECK-NEXT:    fmls z0.d, p0/m, z1.d, z2.d375; CHECK-NEXT:    ret376  %neg = fneg <vscale x 2 x double> %b377  %r = call <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x double> %neg, <vscale x 2 x double> %a)378  ret <vscale x 2 x double> %r379}380 381define <vscale x 8 x half> @fneg_nxv8f16(<vscale x 8 x half> %a) {382; CHECK-LABEL: fneg_nxv8f16:383; CHECK:       // %bb.0:384; CHECK-NEXT:    ptrue p0.h385; CHECK-NEXT:    fneg z0.h, p0/m, z0.h386; CHECK-NEXT:    ret387  %res = fneg <vscale x 8 x half> %a388  ret <vscale x 8 x half> %res389}390 391define <vscale x 4 x half> @fneg_nxv4f16(<vscale x 4 x half> %a) {392; CHECK-LABEL: fneg_nxv4f16:393; CHECK:       // %bb.0:394; CHECK-NEXT:    ptrue p0.s395; CHECK-NEXT:    fneg z0.h, p0/m, z0.h396; CHECK-NEXT:    ret397  %res = fneg <vscale x 4 x half> %a398  ret <vscale x 4 x half> %res399}400 401define <vscale x 2 x half> @fneg_nxv2f16(<vscale x 2 x half> %a) {402; CHECK-LABEL: fneg_nxv2f16:403; CHECK:       // %bb.0:404; CHECK-NEXT:    ptrue p0.d405; CHECK-NEXT:    fneg z0.h, p0/m, z0.h406; CHECK-NEXT:    ret407  %res = fneg <vscale x 2 x half> %a408  ret <vscale x 2 x half> %res409}410 411define <vscale x 4 x float> @fneg_nxv4f32(<vscale x 4 x float> %a) {412; CHECK-LABEL: fneg_nxv4f32:413; CHECK:       // %bb.0:414; CHECK-NEXT:    ptrue p0.s415; CHECK-NEXT:    fneg z0.s, p0/m, z0.s416; CHECK-NEXT:    ret417  %res = fneg <vscale x 4 x float> %a418  ret <vscale x 4 x float> %res419}420 421define <vscale x 2 x float> @fneg_nxv2f32(<vscale x 2 x float> %a) {422; CHECK-LABEL: fneg_nxv2f32:423; CHECK:       // %bb.0:424; CHECK-NEXT:    ptrue p0.d425; CHECK-NEXT:    fneg z0.s, p0/m, z0.s426; CHECK-NEXT:    ret427  %res = fneg <vscale x 2 x float> %a428  ret <vscale x 2 x float> %res429}430 431define <vscale x 2 x double> @fneg_nxv2f64(<vscale x 2 x double> %a) {432; CHECK-LABEL: fneg_nxv2f64:433; CHECK:       // %bb.0:434; CHECK-NEXT:    ptrue p0.d435; CHECK-NEXT:    fneg z0.d, p0/m, z0.d436; CHECK-NEXT:    ret437  %res = fneg <vscale x 2 x double> %a438  ret <vscale x 2 x double> %res439}440 441define <vscale x 8 x half> @frecps_h(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {442; CHECK-LABEL: frecps_h:443; CHECK:       // %bb.0:444; CHECK-NEXT:    frecps z0.h, z0.h, z1.h445; CHECK-NEXT:    ret446  %res = call <vscale x 8 x half> @llvm.aarch64.sve.frecps.x.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b)447  ret <vscale x 8 x half> %res448}449 450define <vscale x 4 x float> @frecps_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {451; CHECK-LABEL: frecps_s:452; CHECK:       // %bb.0:453; CHECK-NEXT:    frecps z0.s, z0.s, z1.s454; CHECK-NEXT:    ret455  %res = call <vscale x 4 x float> @llvm.aarch64.sve.frecps.x.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b)456  ret <vscale x 4 x float> %res457}458 459define <vscale x 2 x double> @frecps_d(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {460; CHECK-LABEL: frecps_d:461; CHECK:       // %bb.0:462; CHECK-NEXT:    frecps z0.d, z0.d, z1.d463; CHECK-NEXT:    ret464  %res = call <vscale x 2 x double> @llvm.aarch64.sve.frecps.x.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b)465  ret <vscale x 2 x double> %res466}467 468define <vscale x 8 x half> @frsqrts_h(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {469; CHECK-LABEL: frsqrts_h:470; CHECK:       // %bb.0:471; CHECK-NEXT:    frsqrts z0.h, z0.h, z1.h472; CHECK-NEXT:    ret473  %res = call <vscale x 8 x half> @llvm.aarch64.sve.frsqrts.x.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b)474  ret <vscale x 8 x half> %res475}476 477define <vscale x 4 x float> @frsqrts_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {478; CHECK-LABEL: frsqrts_s:479; CHECK:       // %bb.0:480; CHECK-NEXT:    frsqrts z0.s, z0.s, z1.s481; CHECK-NEXT:    ret482  %res = call <vscale x 4 x float> @llvm.aarch64.sve.frsqrts.x.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b)483  ret <vscale x 4 x float> %res484}485 486define <vscale x 2 x double> @frsqrts_d(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {487; CHECK-LABEL: frsqrts_d:488; CHECK:       // %bb.0:489; CHECK-NEXT:    frsqrts z0.d, z0.d, z1.d490; CHECK-NEXT:    ret491  %res = call <vscale x 2 x double> @llvm.aarch64.sve.frsqrts.x.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b)492  ret <vscale x 2 x double> %res493}494 495%complex = type { { double, double } }496 497define void @scalar_to_vector(ptr %outval, <vscale x 2 x i1> %pred, <vscale x 2 x double> %in1, <vscale x 2 x double> %in2) {498; CHECK-LABEL: scalar_to_vector:499; CHECK:       // %bb.0:500; CHECK-NEXT:    faddv d0, p0, z0.d501; CHECK-NEXT:    faddv d1, p0, z1.d502; CHECK-NEXT:    mov v0.d[1], v1.d[0]503; CHECK-NEXT:    str q0, [x0]504; CHECK-NEXT:    ret505  %imagp = getelementptr inbounds %complex, ptr %outval, i64 0, i32 0, i32 1506  %1 = call double @llvm.aarch64.sve.faddv.nxv2f64(<vscale x 2 x i1> %pred, <vscale x 2 x double> %in1)507  %2 = call double @llvm.aarch64.sve.faddv.nxv2f64(<vscale x 2 x i1> %pred, <vscale x 2 x double> %in2)508  store double %1, ptr %outval, align 8509  store double %2, ptr %imagp, align 8510  ret void511}512 513define void @float_copy(ptr %P1, ptr %P2) {514; CHECK-LABEL: float_copy:515; CHECK:       // %bb.0:516; CHECK-NEXT:    ldr z0, [x0]517; CHECK-NEXT:    str z0, [x1]518; CHECK-NEXT:    ret519  %A = load <vscale x 4 x float>, ptr %P1, align 16520  store <vscale x 4 x float> %A, ptr %P2, align 16521  ret void522}523 524; FSQRT525 526define <vscale x 8 x half> @fsqrt_nxv8f16(<vscale x 8 x half> %a) {527; CHECK-LABEL: fsqrt_nxv8f16:528; CHECK:       // %bb.0:529; CHECK-NEXT:    ptrue p0.h530; CHECK-NEXT:    fsqrt z0.h, p0/m, z0.h531; CHECK-NEXT:    ret532  %res = call <vscale x 8 x half> @llvm.sqrt.nxv8f16(<vscale x 8 x half> %a)533  ret <vscale x 8 x half> %res534}535 536define <vscale x 4 x half> @fsqrt_nxv4f16(<vscale x 4 x half> %a) {537; CHECK-LABEL: fsqrt_nxv4f16:538; CHECK:       // %bb.0:539; CHECK-NEXT:    ptrue p0.s540; CHECK-NEXT:    fsqrt z0.h, p0/m, z0.h541; CHECK-NEXT:    ret542  %res = call <vscale x 4 x half> @llvm.sqrt.nxv4f16(<vscale x 4 x half> %a)543  ret <vscale x 4 x half> %res544}545 546define <vscale x 2 x half> @fsqrt_nxv2f16(<vscale x 2 x half> %a) {547; CHECK-LABEL: fsqrt_nxv2f16:548; CHECK:       // %bb.0:549; CHECK-NEXT:    ptrue p0.d550; CHECK-NEXT:    fsqrt z0.h, p0/m, z0.h551; CHECK-NEXT:    ret552  %res = call <vscale x 2 x half> @llvm.sqrt.nxv2f16(<vscale x 2 x half> %a)553  ret <vscale x 2 x half> %res554}555 556define <vscale x 4 x float> @fsqrt_nxv4f32(<vscale x 4 x float> %a) {557; CHECK-LABEL: fsqrt_nxv4f32:558; CHECK:       // %bb.0:559; CHECK-NEXT:    ptrue p0.s560; CHECK-NEXT:    fsqrt z0.s, p0/m, z0.s561; CHECK-NEXT:    ret562  %res = call <vscale x 4 x float> @llvm.sqrt.nxv4f32(<vscale x 4 x float> %a)563  ret <vscale x 4 x float> %res564}565 566define <vscale x 2 x float> @fsqrt_nxv2f32(<vscale x 2 x float> %a) {567; CHECK-LABEL: fsqrt_nxv2f32:568; CHECK:       // %bb.0:569; CHECK-NEXT:    ptrue p0.d570; CHECK-NEXT:    fsqrt z0.s, p0/m, z0.s571; CHECK-NEXT:    ret572  %res = call <vscale x 2 x float> @llvm.sqrt.nxv2f32(<vscale x 2 x float> %a)573  ret <vscale x 2 x float> %res574}575 576define <vscale x 2 x double> @fsqrt_nxv2f64(<vscale x 2 x double> %a) {577; CHECK-LABEL: fsqrt_nxv2f64:578; CHECK:       // %bb.0:579; CHECK-NEXT:    ptrue p0.d580; CHECK-NEXT:    fsqrt z0.d, p0/m, z0.d581; CHECK-NEXT:    ret582  %res = call <vscale x 2 x double> @llvm.sqrt.nxv2f64(<vscale x 2 x double> %a)583  ret <vscale x 2 x double> %res584}585 586; FABS587 588define <vscale x 8 x half> @fabs_nxv8f16(<vscale x 8 x half> %a) {589; CHECK-LABEL: fabs_nxv8f16:590; CHECK:       // %bb.0:591; CHECK-NEXT:    ptrue p0.h592; CHECK-NEXT:    fabs z0.h, p0/m, z0.h593; CHECK-NEXT:    ret594  %res = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %a)595  ret <vscale x 8 x half> %res596}597 598define <vscale x 4 x half> @fabs_nxv4f16(<vscale x 4 x half> %a) {599; CHECK-LABEL: fabs_nxv4f16:600; CHECK:       // %bb.0:601; CHECK-NEXT:    ptrue p0.s602; CHECK-NEXT:    fabs z0.h, p0/m, z0.h603; CHECK-NEXT:    ret604  %res = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %a)605  ret <vscale x 4 x half> %res606}607 608define <vscale x 2 x half> @fabs_nxv2f16(<vscale x 2 x half> %a) {609; CHECK-LABEL: fabs_nxv2f16:610; CHECK:       // %bb.0:611; CHECK-NEXT:    ptrue p0.d612; CHECK-NEXT:    fabs z0.h, p0/m, z0.h613; CHECK-NEXT:    ret614  %res = call <vscale x 2 x half> @llvm.fabs.nxv2f16(<vscale x 2 x half> %a)615  ret <vscale x 2 x half> %res616}617 618define <vscale x 4 x float> @fabs_nxv4f32(<vscale x 4 x float> %a) {619; CHECK-LABEL: fabs_nxv4f32:620; CHECK:       // %bb.0:621; CHECK-NEXT:    ptrue p0.s622; CHECK-NEXT:    fabs z0.s, p0/m, z0.s623; CHECK-NEXT:    ret624  %res = call <vscale x 4 x float> @llvm.fabs.nxv4f32(<vscale x 4 x float> %a)625  ret <vscale x 4 x float> %res626}627 628define <vscale x 2 x float> @fabs_nxv2f32(<vscale x 2 x float> %a) {629; CHECK-LABEL: fabs_nxv2f32:630; CHECK:       // %bb.0:631; CHECK-NEXT:    ptrue p0.d632; CHECK-NEXT:    fabs z0.s, p0/m, z0.s633; CHECK-NEXT:    ret634  %res = call <vscale x 2 x float> @llvm.fabs.nxv2f32(<vscale x 2 x float> %a)635  ret <vscale x 2 x float> %res636}637 638define <vscale x 2 x double> @fabs_nxv2f64(<vscale x 2 x double> %a) {639; CHECK-LABEL: fabs_nxv2f64:640; CHECK:       // %bb.0:641; CHECK-NEXT:    ptrue p0.d642; CHECK-NEXT:    fabs z0.d, p0/m, z0.d643; CHECK-NEXT:    ret644  %res = call <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double> %a)645  ret <vscale x 2 x double> %res646}647 648; FABD649 650define <vscale x 8 x half> @fabd_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {651; CHECK-LABEL: fabd_nxv8f16:652; CHECK:       // %bb.0:653; CHECK-NEXT:    ptrue p0.h654; CHECK-NEXT:    fabd z0.h, p0/m, z0.h, z1.h655; CHECK-NEXT:    ret656  %sub = fsub <vscale x 8 x half> %a, %b657  %res = call <vscale x 8 x half> @llvm.fabs.nxv8f16(<vscale x 8 x half> %sub)658  ret <vscale x 8 x half> %res659}660 661define <vscale x 4 x half> @fabd_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {662; CHECK-LABEL: fabd_nxv4f16:663; CHECK:       // %bb.0:664; CHECK-NEXT:    ptrue p0.s665; CHECK-NEXT:    fabd z0.h, p0/m, z0.h, z1.h666; CHECK-NEXT:    ret667  %sub = fsub <vscale x 4 x half> %a, %b668  %res = call <vscale x 4 x half> @llvm.fabs.nxv4f16(<vscale x 4 x half> %sub)669  ret <vscale x 4 x half> %res670}671 672define <vscale x 2 x half> @fabd_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {673; CHECK-LABEL: fabd_nxv2f16:674; CHECK:       // %bb.0:675; CHECK-NEXT:    ptrue p0.d676; CHECK-NEXT:    fabd z0.h, p0/m, z0.h, z1.h677; CHECK-NEXT:    ret678  %sub = fsub <vscale x 2 x half> %a, %b679  %res = call <vscale x 2 x half> @llvm.fabs.nxv2f16(<vscale x 2 x half> %sub)680  ret <vscale x 2 x half> %res681}682 683define <vscale x 4 x float> @fabd_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {684; CHECK-LABEL: fabd_nxv4f32:685; CHECK:       // %bb.0:686; CHECK-NEXT:    ptrue p0.s687; CHECK-NEXT:    fabd z0.s, p0/m, z0.s, z1.s688; CHECK-NEXT:    ret689  %sub = fsub <vscale x 4 x float> %a, %b690  %res = call <vscale x 4 x float> @llvm.fabs.nxv4f32(<vscale x 4 x float> %sub)691  ret <vscale x 4 x float> %res692}693 694define <vscale x 2 x float> @fabd_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {695; CHECK-LABEL: fabd_nxv2f32:696; CHECK:       // %bb.0:697; CHECK-NEXT:    ptrue p0.d698; CHECK-NEXT:    fabd z0.s, p0/m, z0.s, z1.s699; CHECK-NEXT:    ret700  %sub = fsub <vscale x 2 x float> %a, %b701  %res = call <vscale x 2 x float> @llvm.fabs.nxv2f32(<vscale x 2 x float> %sub)702  ret <vscale x 2 x float> %res703}704 705define <vscale x 2 x double> @fabd_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {706; CHECK-LABEL: fabd_nxv2f64:707; CHECK:       // %bb.0:708; CHECK-NEXT:    ptrue p0.d709; CHECK-NEXT:    fabd z0.d, p0/m, z0.d, z1.d710; CHECK-NEXT:    ret711  %sub = fsub <vscale x 2 x double> %a, %b712  %res = call <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double> %sub)713  ret <vscale x 2 x double> %res714}715 716; maxnum minnum717 718define <vscale x 16 x half> @maxnum_nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b) {719; CHECK-LABEL: maxnum_nxv16f16:720; CHECK:       // %bb.0:721; CHECK-NEXT:    ptrue p0.h722; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, z2.h723; CHECK-NEXT:    fmaxnm z1.h, p0/m, z1.h, z3.h724; CHECK-NEXT:    ret725  %res = call <vscale x 16 x half> @llvm.maxnum.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b)726  ret <vscale x 16 x half> %res727}728 729define <vscale x 8 x half> @maxnum_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {730; CHECK-LABEL: maxnum_nxv8f16:731; CHECK:       // %bb.0:732; CHECK-NEXT:    ptrue p0.h733; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, z1.h734; CHECK-NEXT:    ret735  %res = call <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b)736  ret <vscale x 8 x half> %res737}738 739define <vscale x 4 x half> @maxnum_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {740; CHECK-LABEL: maxnum_nxv4f16:741; CHECK:       // %bb.0:742; CHECK-NEXT:    ptrue p0.s743; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, z1.h744; CHECK-NEXT:    ret745  %res = call <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b)746  ret <vscale x 4 x half> %res747}748 749define <vscale x 2 x half> @maxnum_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {750; CHECK-LABEL: maxnum_nxv2f16:751; CHECK:       // %bb.0:752; CHECK-NEXT:    ptrue p0.d753; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, z1.h754; CHECK-NEXT:    ret755  %res = call <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b)756  ret <vscale x 2 x half> %res757}758 759define <vscale x 8 x float> @maxnum_nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b) {760; CHECK-LABEL: maxnum_nxv8f32:761; CHECK:       // %bb.0:762; CHECK-NEXT:    ptrue p0.s763; CHECK-NEXT:    fmaxnm z0.s, p0/m, z0.s, z2.s764; CHECK-NEXT:    fmaxnm z1.s, p0/m, z1.s, z3.s765; CHECK-NEXT:    ret766  %res = call <vscale x 8 x float> @llvm.maxnum.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b)767  ret <vscale x 8 x float> %res768}769 770define <vscale x 4 x float> @maxnum_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {771; CHECK-LABEL: maxnum_nxv4f32:772; CHECK:       // %bb.0:773; CHECK-NEXT:    ptrue p0.s774; CHECK-NEXT:    fmaxnm z0.s, p0/m, z0.s, z1.s775; CHECK-NEXT:    ret776  %res = call <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b)777  ret <vscale x 4 x float> %res778}779 780define <vscale x 2 x float> @maxnum_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {781; CHECK-LABEL: maxnum_nxv2f32:782; CHECK:       // %bb.0:783; CHECK-NEXT:    ptrue p0.d784; CHECK-NEXT:    fmaxnm z0.s, p0/m, z0.s, z1.s785; CHECK-NEXT:    ret786  %res = call <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b)787  ret <vscale x 2 x float> %res788}789 790define <vscale x 4 x double> @maxnum_nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b) {791; CHECK-LABEL: maxnum_nxv4f64:792; CHECK:       // %bb.0:793; CHECK-NEXT:    ptrue p0.d794; CHECK-NEXT:    fmaxnm z0.d, p0/m, z0.d, z2.d795; CHECK-NEXT:    fmaxnm z1.d, p0/m, z1.d, z3.d796; CHECK-NEXT:    ret797  %res = call <vscale x 4 x double> @llvm.maxnum.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b)798  ret <vscale x 4 x double> %res799}800 801define <vscale x 2 x double> @maxnum_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {802; CHECK-LABEL: maxnum_nxv2f64:803; CHECK:       // %bb.0:804; CHECK-NEXT:    ptrue p0.d805; CHECK-NEXT:    fmaxnm z0.d, p0/m, z0.d, z1.d806; CHECK-NEXT:    ret807  %res = call <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b)808  ret <vscale x 2 x double> %res809}810 811define <vscale x 16 x half> @minnum_nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b) {812; CHECK-LABEL: minnum_nxv16f16:813; CHECK:       // %bb.0:814; CHECK-NEXT:    ptrue p0.h815; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, z2.h816; CHECK-NEXT:    fminnm z1.h, p0/m, z1.h, z3.h817; CHECK-NEXT:    ret818  %res = call <vscale x 16 x half> @llvm.minnum.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b)819  ret <vscale x 16 x half> %res820}821 822define <vscale x 8 x half> @minnum_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {823; CHECK-LABEL: minnum_nxv8f16:824; CHECK:       // %bb.0:825; CHECK-NEXT:    ptrue p0.h826; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, z1.h827; CHECK-NEXT:    ret828  %res = call <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b)829  ret <vscale x 8 x half> %res830}831 832define <vscale x 4 x half> @minnum_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {833; CHECK-LABEL: minnum_nxv4f16:834; CHECK:       // %bb.0:835; CHECK-NEXT:    ptrue p0.s836; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, z1.h837; CHECK-NEXT:    ret838  %res = call <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b)839  ret <vscale x 4 x half> %res840}841 842define <vscale x 2 x half> @minnum_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {843; CHECK-LABEL: minnum_nxv2f16:844; CHECK:       // %bb.0:845; CHECK-NEXT:    ptrue p0.d846; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, z1.h847; CHECK-NEXT:    ret848  %res = call <vscale x 2 x half> @llvm.minnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b)849  ret <vscale x 2 x half> %res850}851 852define <vscale x 8 x float> @minnum_nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b) {853; CHECK-LABEL: minnum_nxv8f32:854; CHECK:       // %bb.0:855; CHECK-NEXT:    ptrue p0.s856; CHECK-NEXT:    fminnm z0.s, p0/m, z0.s, z2.s857; CHECK-NEXT:    fminnm z1.s, p0/m, z1.s, z3.s858; CHECK-NEXT:    ret859  %res = call <vscale x 8 x float> @llvm.minnum.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b)860  ret <vscale x 8 x float> %res861}862 863define <vscale x 4 x float> @minnum_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {864; CHECK-LABEL: minnum_nxv4f32:865; CHECK:       // %bb.0:866; CHECK-NEXT:    ptrue p0.s867; CHECK-NEXT:    fminnm z0.s, p0/m, z0.s, z1.s868; CHECK-NEXT:    ret869  %res = call <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b)870  ret <vscale x 4 x float> %res871}872 873define <vscale x 2 x float> @minnum_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {874; CHECK-LABEL: minnum_nxv2f32:875; CHECK:       // %bb.0:876; CHECK-NEXT:    ptrue p0.d877; CHECK-NEXT:    fminnm z0.s, p0/m, z0.s, z1.s878; CHECK-NEXT:    ret879  %res = call <vscale x 2 x float> @llvm.minnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b)880  ret <vscale x 2 x float> %res881}882 883define <vscale x 4 x double> @minnum_nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b) {884; CHECK-LABEL: minnum_nxv4f64:885; CHECK:       // %bb.0:886; CHECK-NEXT:    ptrue p0.d887; CHECK-NEXT:    fminnm z0.d, p0/m, z0.d, z2.d888; CHECK-NEXT:    fminnm z1.d, p0/m, z1.d, z3.d889; CHECK-NEXT:    ret890  %res = call <vscale x 4 x double> @llvm.minnum.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b)891  ret <vscale x 4 x double> %res892}893 894define <vscale x 2 x double> @minnum_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {895; CHECK-LABEL: minnum_nxv2f64:896; CHECK:       // %bb.0:897; CHECK-NEXT:    ptrue p0.d898; CHECK-NEXT:    fminnm z0.d, p0/m, z0.d, z1.d899; CHECK-NEXT:    ret900  %res = call <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b)901  ret <vscale x 2 x double> %res902}903 904; maximum minimum905 906define <vscale x 16 x half> @maximum_nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b) {907; CHECK-LABEL: maximum_nxv16f16:908; CHECK:       // %bb.0:909; CHECK-NEXT:    ptrue p0.h910; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, z2.h911; CHECK-NEXT:    fmax z1.h, p0/m, z1.h, z3.h912; CHECK-NEXT:    ret913  %res = call <vscale x 16 x half> @llvm.maximum.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b)914  ret <vscale x 16 x half> %res915}916 917define <vscale x 8 x half> @maximum_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {918; CHECK-LABEL: maximum_nxv8f16:919; CHECK:       // %bb.0:920; CHECK-NEXT:    ptrue p0.h921; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, z1.h922; CHECK-NEXT:    ret923  %res = call <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b)924  ret <vscale x 8 x half> %res925}926 927define <vscale x 4 x half> @maximum_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {928; CHECK-LABEL: maximum_nxv4f16:929; CHECK:       // %bb.0:930; CHECK-NEXT:    ptrue p0.s931; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, z1.h932; CHECK-NEXT:    ret933  %res = call <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b)934  ret <vscale x 4 x half> %res935}936 937define <vscale x 2 x half> @maximum_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {938; CHECK-LABEL: maximum_nxv2f16:939; CHECK:       // %bb.0:940; CHECK-NEXT:    ptrue p0.d941; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, z1.h942; CHECK-NEXT:    ret943  %res = call <vscale x 2 x half> @llvm.maximum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b)944  ret <vscale x 2 x half> %res945}946 947define <vscale x 8 x float> @maximum_nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b) {948; CHECK-LABEL: maximum_nxv8f32:949; CHECK:       // %bb.0:950; CHECK-NEXT:    ptrue p0.s951; CHECK-NEXT:    fmax z0.s, p0/m, z0.s, z2.s952; CHECK-NEXT:    fmax z1.s, p0/m, z1.s, z3.s953; CHECK-NEXT:    ret954  %res = call <vscale x 8 x float> @llvm.maximum.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b)955  ret <vscale x 8 x float> %res956}957 958define <vscale x 4 x float> @maximum_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {959; CHECK-LABEL: maximum_nxv4f32:960; CHECK:       // %bb.0:961; CHECK-NEXT:    ptrue p0.s962; CHECK-NEXT:    fmax z0.s, p0/m, z0.s, z1.s963; CHECK-NEXT:    ret964  %res = call <vscale x 4 x float> @llvm.maximum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b)965  ret <vscale x 4 x float> %res966}967 968define <vscale x 2 x float> @maximum_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {969; CHECK-LABEL: maximum_nxv2f32:970; CHECK:       // %bb.0:971; CHECK-NEXT:    ptrue p0.d972; CHECK-NEXT:    fmax z0.s, p0/m, z0.s, z1.s973; CHECK-NEXT:    ret974  %res = call <vscale x 2 x float> @llvm.maximum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b)975  ret <vscale x 2 x float> %res976}977 978define <vscale x 4 x double> @maximum_nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b) {979; CHECK-LABEL: maximum_nxv4f64:980; CHECK:       // %bb.0:981; CHECK-NEXT:    ptrue p0.d982; CHECK-NEXT:    fmax z0.d, p0/m, z0.d, z2.d983; CHECK-NEXT:    fmax z1.d, p0/m, z1.d, z3.d984; CHECK-NEXT:    ret985  %res = call <vscale x 4 x double> @llvm.maximum.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b)986  ret <vscale x 4 x double> %res987}988 989define <vscale x 2 x double> @maximum_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {990; CHECK-LABEL: maximum_nxv2f64:991; CHECK:       // %bb.0:992; CHECK-NEXT:    ptrue p0.d993; CHECK-NEXT:    fmax z0.d, p0/m, z0.d, z1.d994; CHECK-NEXT:    ret995  %res = call <vscale x 2 x double> @llvm.maximum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b)996  ret <vscale x 2 x double> %res997}998 999define <vscale x 16 x half> @minimum_nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b) {1000; CHECK-LABEL: minimum_nxv16f16:1001; CHECK:       // %bb.0:1002; CHECK-NEXT:    ptrue p0.h1003; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, z2.h1004; CHECK-NEXT:    fmin z1.h, p0/m, z1.h, z3.h1005; CHECK-NEXT:    ret1006  %res = call <vscale x 16 x half> @llvm.minimum.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b)1007  ret <vscale x 16 x half> %res1008}1009 1010define <vscale x 8 x half> @minimum_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {1011; CHECK-LABEL: minimum_nxv8f16:1012; CHECK:       // %bb.0:1013; CHECK-NEXT:    ptrue p0.h1014; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, z1.h1015; CHECK-NEXT:    ret1016  %res = call <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b)1017  ret <vscale x 8 x half> %res1018}1019 1020define <vscale x 4 x half> @minimum_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {1021; CHECK-LABEL: minimum_nxv4f16:1022; CHECK:       // %bb.0:1023; CHECK-NEXT:    ptrue p0.s1024; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, z1.h1025; CHECK-NEXT:    ret1026  %res = call <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b)1027  ret <vscale x 4 x half> %res1028}1029 1030define <vscale x 2 x half> @minimum_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {1031; CHECK-LABEL: minimum_nxv2f16:1032; CHECK:       // %bb.0:1033; CHECK-NEXT:    ptrue p0.d1034; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, z1.h1035; CHECK-NEXT:    ret1036  %res = call <vscale x 2 x half> @llvm.minimum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b)1037  ret <vscale x 2 x half> %res1038}1039 1040define <vscale x 8 x float> @minimum_nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b) {1041; CHECK-LABEL: minimum_nxv8f32:1042; CHECK:       // %bb.0:1043; CHECK-NEXT:    ptrue p0.s1044; CHECK-NEXT:    fmin z0.s, p0/m, z0.s, z2.s1045; CHECK-NEXT:    fmin z1.s, p0/m, z1.s, z3.s1046; CHECK-NEXT:    ret1047  %res = call <vscale x 8 x float> @llvm.minimum.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b)1048  ret <vscale x 8 x float> %res1049}1050 1051define <vscale x 4 x float> @minimum_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {1052; CHECK-LABEL: minimum_nxv4f32:1053; CHECK:       // %bb.0:1054; CHECK-NEXT:    ptrue p0.s1055; CHECK-NEXT:    fmin z0.s, p0/m, z0.s, z1.s1056; CHECK-NEXT:    ret1057  %res = call <vscale x 4 x float> @llvm.minimum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b)1058  ret <vscale x 4 x float> %res1059}1060 1061define <vscale x 2 x float> @minimum_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {1062; CHECK-LABEL: minimum_nxv2f32:1063; CHECK:       // %bb.0:1064; CHECK-NEXT:    ptrue p0.d1065; CHECK-NEXT:    fmin z0.s, p0/m, z0.s, z1.s1066; CHECK-NEXT:    ret1067  %res = call <vscale x 2 x float> @llvm.minimum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b)1068  ret <vscale x 2 x float> %res1069}1070 1071define <vscale x 4 x double> @minimum_nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b) {1072; CHECK-LABEL: minimum_nxv4f64:1073; CHECK:       // %bb.0:1074; CHECK-NEXT:    ptrue p0.d1075; CHECK-NEXT:    fmin z0.d, p0/m, z0.d, z2.d1076; CHECK-NEXT:    fmin z1.d, p0/m, z1.d, z3.d1077; CHECK-NEXT:    ret1078  %res = call <vscale x 4 x double> @llvm.minimum.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b)1079  ret <vscale x 4 x double> %res1080}1081 1082define <vscale x 2 x double> @minimum_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {1083; CHECK-LABEL: minimum_nxv2f64:1084; CHECK:       // %bb.0:1085; CHECK-NEXT:    ptrue p0.d1086; CHECK-NEXT:    fmin z0.d, p0/m, z0.d, z1.d1087; CHECK-NEXT:    ret1088  %res = call <vscale x 2 x double> @llvm.minimum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b)1089  ret <vscale x 2 x double> %res1090}1091 1092declare <vscale x 8 x half> @llvm.aarch64.sve.frecps.x.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)1093declare <vscale x 4 x float>  @llvm.aarch64.sve.frecps.x.nxv4f32(<vscale x 4 x float> , <vscale x 4 x float>)1094declare <vscale x 2 x double> @llvm.aarch64.sve.frecps.x.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1095 1096declare <vscale x 8 x half> @llvm.aarch64.sve.frsqrts.x.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)1097declare <vscale x 4 x float> @llvm.aarch64.sve.frsqrts.x.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)1098declare <vscale x 2 x double> @llvm.aarch64.sve.frsqrts.x.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1099 1100declare <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)1101declare <vscale x 4 x float> @llvm.fma.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)1102declare <vscale x 2 x float> @llvm.fma.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x float>)1103declare <vscale x 8 x half> @llvm.fma.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)1104declare <vscale x 4 x half> @llvm.fma.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x half>)1105declare <vscale x 2 x half> @llvm.fma.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>)1106 1107declare <vscale x 8 x half> @llvm.sqrt.nxv8f16( <vscale x 8 x half>)1108declare <vscale x 4 x half> @llvm.sqrt.nxv4f16( <vscale x 4 x half>)1109declare <vscale x 2 x half> @llvm.sqrt.nxv2f16( <vscale x 2 x half>)1110declare <vscale x 4 x float> @llvm.sqrt.nxv4f32(<vscale x 4 x float>)1111declare <vscale x 2 x float> @llvm.sqrt.nxv2f32(<vscale x 2 x float>)1112declare <vscale x 2 x double> @llvm.sqrt.nxv2f64(<vscale x 2 x double>)1113 1114declare <vscale x 8 x half> @llvm.fabs.nxv8f16( <vscale x 8 x half>)1115declare <vscale x 4 x half> @llvm.fabs.nxv4f16( <vscale x 4 x half>)1116declare <vscale x 2 x half> @llvm.fabs.nxv2f16( <vscale x 2 x half>)1117declare <vscale x 4 x float> @llvm.fabs.nxv4f32(<vscale x 4 x float>)1118declare <vscale x 2 x float> @llvm.fabs.nxv2f32(<vscale x 2 x float>)1119declare <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double>)1120 1121declare <vscale x 16 x half> @llvm.maxnum.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>)1122declare <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)1123declare <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)1124declare <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)1125declare <vscale x 8 x float> @llvm.maxnum.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>)1126declare <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)1127declare <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)1128declare <vscale x 4 x double> @llvm.maxnum.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>)1129declare <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1130declare <vscale x 16 x half> @llvm.minnum.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>)1131declare <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)1132declare <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)1133declare <vscale x 2 x half> @llvm.minnum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)1134declare <vscale x 8 x float> @llvm.minnum.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>)1135declare <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)1136declare <vscale x 2 x float> @llvm.minnum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)1137declare <vscale x 4 x double> @llvm.minnum.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>)1138declare <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1139 1140declare <vscale x 16 x half> @llvm.maximum.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>)1141declare <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)1142declare <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)1143declare <vscale x 2 x half> @llvm.maximum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)1144declare <vscale x 8 x float> @llvm.maximum.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>)1145declare <vscale x 4 x float> @llvm.maximum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)1146declare <vscale x 2 x float> @llvm.maximum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)1147declare <vscale x 4 x double> @llvm.maximum.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>)1148declare <vscale x 2 x double> @llvm.maximum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1149declare <vscale x 16 x half> @llvm.minimum.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>)1150declare <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)1151declare <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)1152declare <vscale x 2 x half> @llvm.minimum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)1153declare <vscale x 8 x float> @llvm.minimum.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>)1154declare <vscale x 4 x float> @llvm.minimum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)1155declare <vscale x 2 x float> @llvm.minimum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)1156declare <vscale x 4 x double> @llvm.minimum.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>)1157declare <vscale x 2 x double> @llvm.minimum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)1158 1159; Function Attrs: nounwind readnone1160declare double @llvm.aarch64.sve.faddv.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>) #21161