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