718 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p1 < %s | FileCheck %s3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2 -force-streaming < %s | FileCheck %s4; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme,+sve2p1 -force-streaming < %s | FileCheck %s5 6;7; WHILEGE8;9 10define target("aarch64.svcount") @whilege_c8_vl2(i64 %a, i64 %b) nounwind {11; CHECK-LABEL: whilege_c8_vl2:12; CHECK: // %bb.0:13; CHECK-NEXT: whilege pn8.b, x0, x1, vlx214; CHECK-NEXT: mov p0.b, p8.b15; CHECK-NEXT: ret16 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c8(i64 %a, i64 %b, i32 2)17 ret target("aarch64.svcount") %out18}19 20define target("aarch64.svcount") @whilege_c8_vl4(i64 %a, i64 %b) nounwind {21; CHECK-LABEL: whilege_c8_vl4:22; CHECK: // %bb.0:23; CHECK-NEXT: whilege pn8.b, x0, x1, vlx424; CHECK-NEXT: mov p0.b, p8.b25; CHECK-NEXT: ret26 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c8(i64 %a, i64 %b, i32 4)27 ret target("aarch64.svcount") %out28}29 30define target("aarch64.svcount") @whilege_c16_vl2(i64 %a, i64 %b) nounwind {31; CHECK-LABEL: whilege_c16_vl2:32; CHECK: // %bb.0:33; CHECK-NEXT: whilege pn8.h, x0, x1, vlx234; CHECK-NEXT: mov p0.b, p8.b35; CHECK-NEXT: ret36 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c16(i64 %a, i64 %b, i32 2)37 ret target("aarch64.svcount") %out38}39 40define target("aarch64.svcount") @whilege_c16_vl4(i64 %a, i64 %b) nounwind {41; CHECK-LABEL: whilege_c16_vl4:42; CHECK: // %bb.0:43; CHECK-NEXT: whilege pn8.h, x0, x1, vlx444; CHECK-NEXT: mov p0.b, p8.b45; CHECK-NEXT: ret46 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c16(i64 %a, i64 %b, i32 4)47 ret target("aarch64.svcount") %out48}49 50define target("aarch64.svcount") @whilege_c32_vl2(i64 %a, i64 %b) nounwind {51; CHECK-LABEL: whilege_c32_vl2:52; CHECK: // %bb.0:53; CHECK-NEXT: whilege pn8.s, x0, x1, vlx254; CHECK-NEXT: mov p0.b, p8.b55; CHECK-NEXT: ret56 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c32(i64 %a, i64 %b, i32 2)57 ret target("aarch64.svcount") %out58}59 60define target("aarch64.svcount") @whilege_c32_vl4(i64 %a, i64 %b) nounwind {61; CHECK-LABEL: whilege_c32_vl4:62; CHECK: // %bb.0:63; CHECK-NEXT: whilege pn8.s, x0, x1, vlx464; CHECK-NEXT: mov p0.b, p8.b65; CHECK-NEXT: ret66 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c32(i64 %a, i64 %b, i32 4)67 ret target("aarch64.svcount") %out68}69 70define target("aarch64.svcount") @whilege_c64_vl2(i64 %a, i64 %b) nounwind {71; CHECK-LABEL: whilege_c64_vl2:72; CHECK: // %bb.0:73; CHECK-NEXT: whilege pn8.d, x0, x1, vlx274; CHECK-NEXT: mov p0.b, p8.b75; CHECK-NEXT: ret76 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c64(i64 %a, i64 %b, i32 2)77 ret target("aarch64.svcount") %out78}79 80define target("aarch64.svcount") @whilege_c64_vl4(i64 %a, i64 %b) nounwind {81; CHECK-LABEL: whilege_c64_vl4:82; CHECK: // %bb.0:83; CHECK-NEXT: whilege pn8.d, x0, x1, vlx484; CHECK-NEXT: mov p0.b, p8.b85; CHECK-NEXT: ret86 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c64(i64 %a, i64 %b, i32 4)87 ret target("aarch64.svcount") %out88}89 90 91;92; WHILEGT93;94 95define target("aarch64.svcount") @whilegt_c8_vl2(i64 %a, i64 %b) nounwind {96; CHECK-LABEL: whilegt_c8_vl2:97; CHECK: // %bb.0:98; CHECK-NEXT: whilegt pn8.b, x0, x1, vlx299; CHECK-NEXT: mov p0.b, p8.b100; CHECK-NEXT: ret101 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c8(i64 %a, i64 %b, i32 2)102 ret target("aarch64.svcount") %out103}104 105define target("aarch64.svcount") @whilegt_c8_vl4(i64 %a, i64 %b) nounwind {106; CHECK-LABEL: whilegt_c8_vl4:107; CHECK: // %bb.0:108; CHECK-NEXT: whilegt pn8.b, x0, x1, vlx4109; CHECK-NEXT: mov p0.b, p8.b110; CHECK-NEXT: ret111 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c8(i64 %a, i64 %b, i32 4)112 ret target("aarch64.svcount") %out113}114 115define target("aarch64.svcount") @whilegt_c16_vl2(i64 %a, i64 %b) nounwind {116; CHECK-LABEL: whilegt_c16_vl2:117; CHECK: // %bb.0:118; CHECK-NEXT: whilegt pn8.h, x0, x1, vlx2119; CHECK-NEXT: mov p0.b, p8.b120; CHECK-NEXT: ret121 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c16(i64 %a, i64 %b, i32 2)122 ret target("aarch64.svcount") %out123}124 125define target("aarch64.svcount") @whilegt_c16_vl4(i64 %a, i64 %b) nounwind {126; CHECK-LABEL: whilegt_c16_vl4:127; CHECK: // %bb.0:128; CHECK-NEXT: whilegt pn8.h, x0, x1, vlx4129; CHECK-NEXT: mov p0.b, p8.b130; CHECK-NEXT: ret131 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c16(i64 %a, i64 %b, i32 4)132 ret target("aarch64.svcount") %out133}134 135define target("aarch64.svcount") @whilegt_c32_vl2(i64 %a, i64 %b) nounwind {136; CHECK-LABEL: whilegt_c32_vl2:137; CHECK: // %bb.0:138; CHECK-NEXT: whilegt pn8.s, x0, x1, vlx2139; CHECK-NEXT: mov p0.b, p8.b140; CHECK-NEXT: ret141 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c32(i64 %a, i64 %b, i32 2)142 ret target("aarch64.svcount") %out143}144 145define target("aarch64.svcount") @whilegt_c32_vl4(i64 %a, i64 %b) nounwind {146; CHECK-LABEL: whilegt_c32_vl4:147; CHECK: // %bb.0:148; CHECK-NEXT: whilegt pn8.s, x0, x1, vlx4149; CHECK-NEXT: mov p0.b, p8.b150; CHECK-NEXT: ret151 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c32(i64 %a, i64 %b, i32 4)152 ret target("aarch64.svcount") %out153}154 155define target("aarch64.svcount") @whilegt_c64_vl2(i64 %a, i64 %b) nounwind {156; CHECK-LABEL: whilegt_c64_vl2:157; CHECK: // %bb.0:158; CHECK-NEXT: whilegt pn8.d, x0, x1, vlx2159; CHECK-NEXT: mov p0.b, p8.b160; CHECK-NEXT: ret161 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c64(i64 %a, i64 %b, i32 2)162 ret target("aarch64.svcount") %out163}164 165define target("aarch64.svcount") @whilegt_c64_vl4(i64 %a, i64 %b) nounwind {166; CHECK-LABEL: whilegt_c64_vl4:167; CHECK: // %bb.0:168; CHECK-NEXT: whilegt pn8.d, x0, x1, vlx4169; CHECK-NEXT: mov p0.b, p8.b170; CHECK-NEXT: ret171 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c64(i64 %a, i64 %b, i32 4)172 ret target("aarch64.svcount") %out173}174 175 176;177; WHILEHI178;179 180define target("aarch64.svcount") @whilehi_c8_vl2(i64 %a, i64 %b) nounwind {181; CHECK-LABEL: whilehi_c8_vl2:182; CHECK: // %bb.0:183; CHECK-NEXT: whilehi pn8.b, x0, x1, vlx2184; CHECK-NEXT: mov p0.b, p8.b185; CHECK-NEXT: ret186 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c8(i64 %a, i64 %b, i32 2)187 ret target("aarch64.svcount") %out188}189 190define target("aarch64.svcount") @whilehi_c8_vl4(i64 %a, i64 %b) nounwind {191; CHECK-LABEL: whilehi_c8_vl4:192; CHECK: // %bb.0:193; CHECK-NEXT: whilehi pn8.b, x0, x1, vlx4194; CHECK-NEXT: mov p0.b, p8.b195; CHECK-NEXT: ret196 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c8(i64 %a, i64 %b, i32 4)197 ret target("aarch64.svcount") %out198}199 200define target("aarch64.svcount") @whilehi_c16_vl2(i64 %a, i64 %b) nounwind {201; CHECK-LABEL: whilehi_c16_vl2:202; CHECK: // %bb.0:203; CHECK-NEXT: whilehi pn8.h, x0, x1, vlx2204; CHECK-NEXT: mov p0.b, p8.b205; CHECK-NEXT: ret206 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c16(i64 %a, i64 %b, i32 2)207 ret target("aarch64.svcount") %out208}209 210define target("aarch64.svcount") @whilehi_c16_vl4(i64 %a, i64 %b) nounwind {211; CHECK-LABEL: whilehi_c16_vl4:212; CHECK: // %bb.0:213; CHECK-NEXT: whilehi pn8.h, x0, x1, vlx4214; CHECK-NEXT: mov p0.b, p8.b215; CHECK-NEXT: ret216 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c16(i64 %a, i64 %b, i32 4)217 ret target("aarch64.svcount") %out218}219 220define target("aarch64.svcount") @whilehi_c32_vl2(i64 %a, i64 %b) nounwind {221; CHECK-LABEL: whilehi_c32_vl2:222; CHECK: // %bb.0:223; CHECK-NEXT: whilehi pn8.s, x0, x1, vlx2224; CHECK-NEXT: mov p0.b, p8.b225; CHECK-NEXT: ret226 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c32(i64 %a, i64 %b, i32 2)227 ret target("aarch64.svcount") %out228}229 230define target("aarch64.svcount") @whilehi_c32_vl4(i64 %a, i64 %b) nounwind {231; CHECK-LABEL: whilehi_c32_vl4:232; CHECK: // %bb.0:233; CHECK-NEXT: whilehi pn8.s, x0, x1, vlx4234; CHECK-NEXT: mov p0.b, p8.b235; CHECK-NEXT: ret236 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c32(i64 %a, i64 %b, i32 4)237 ret target("aarch64.svcount") %out238}239 240define target("aarch64.svcount") @whilehi_c64_vl2(i64 %a, i64 %b) nounwind {241; CHECK-LABEL: whilehi_c64_vl2:242; CHECK: // %bb.0:243; CHECK-NEXT: whilehi pn8.d, x0, x1, vlx2244; CHECK-NEXT: mov p0.b, p8.b245; CHECK-NEXT: ret246 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c64(i64 %a, i64 %b, i32 2)247 ret target("aarch64.svcount") %out248}249 250define target("aarch64.svcount") @whilehi_c64_vl4(i64 %a, i64 %b) nounwind {251; CHECK-LABEL: whilehi_c64_vl4:252; CHECK: // %bb.0:253; CHECK-NEXT: whilehi pn8.d, x0, x1, vlx4254; CHECK-NEXT: mov p0.b, p8.b255; CHECK-NEXT: ret256 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c64(i64 %a, i64 %b, i32 4)257 ret target("aarch64.svcount") %out258}259 260 261;262; WHILEHS263;264 265define target("aarch64.svcount") @whilehs_c8_vl2(i64 %a, i64 %b) nounwind {266; CHECK-LABEL: whilehs_c8_vl2:267; CHECK: // %bb.0:268; CHECK-NEXT: whilehs pn8.b, x0, x1, vlx2269; CHECK-NEXT: mov p0.b, p8.b270; CHECK-NEXT: ret271 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c8(i64 %a, i64 %b, i32 2)272 ret target("aarch64.svcount") %out273}274 275define target("aarch64.svcount") @whilehs_c8_vl4(i64 %a, i64 %b) nounwind {276; CHECK-LABEL: whilehs_c8_vl4:277; CHECK: // %bb.0:278; CHECK-NEXT: whilehs pn8.b, x0, x1, vlx4279; CHECK-NEXT: mov p0.b, p8.b280; CHECK-NEXT: ret281 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c8(i64 %a, i64 %b, i32 4)282 ret target("aarch64.svcount") %out283}284 285define target("aarch64.svcount") @whilehs_c16_vl2(i64 %a, i64 %b) nounwind {286; CHECK-LABEL: whilehs_c16_vl2:287; CHECK: // %bb.0:288; CHECK-NEXT: whilehs pn8.h, x0, x1, vlx2289; CHECK-NEXT: mov p0.b, p8.b290; CHECK-NEXT: ret291 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c16(i64 %a, i64 %b, i32 2)292 ret target("aarch64.svcount") %out293}294 295define target("aarch64.svcount") @whilehs_c16_vl4(i64 %a, i64 %b) nounwind {296; CHECK-LABEL: whilehs_c16_vl4:297; CHECK: // %bb.0:298; CHECK-NEXT: whilehs pn8.h, x0, x1, vlx4299; CHECK-NEXT: mov p0.b, p8.b300; CHECK-NEXT: ret301 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c16(i64 %a, i64 %b, i32 4)302 ret target("aarch64.svcount") %out303}304 305define target("aarch64.svcount") @whilehs_c32_vl2(i64 %a, i64 %b) nounwind {306; CHECK-LABEL: whilehs_c32_vl2:307; CHECK: // %bb.0:308; CHECK-NEXT: whilehs pn8.s, x0, x1, vlx2309; CHECK-NEXT: mov p0.b, p8.b310; CHECK-NEXT: ret311 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c32(i64 %a, i64 %b, i32 2)312 ret target("aarch64.svcount") %out313}314 315define target("aarch64.svcount") @whilehs_c32_vl4(i64 %a, i64 %b) nounwind {316; CHECK-LABEL: whilehs_c32_vl4:317; CHECK: // %bb.0:318; CHECK-NEXT: whilehs pn8.s, x0, x1, vlx4319; CHECK-NEXT: mov p0.b, p8.b320; CHECK-NEXT: ret321 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c32(i64 %a, i64 %b, i32 4)322 ret target("aarch64.svcount") %out323}324 325define target("aarch64.svcount") @whilehs_c64_vl2(i64 %a, i64 %b) nounwind {326; CHECK-LABEL: whilehs_c64_vl2:327; CHECK: // %bb.0:328; CHECK-NEXT: whilehs pn8.d, x0, x1, vlx2329; CHECK-NEXT: mov p0.b, p8.b330; CHECK-NEXT: ret331 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c64(i64 %a, i64 %b, i32 2)332 ret target("aarch64.svcount") %out333}334 335define target("aarch64.svcount") @whilehs_c64_vl4(i64 %a, i64 %b) nounwind {336; CHECK-LABEL: whilehs_c64_vl4:337; CHECK: // %bb.0:338; CHECK-NEXT: whilehs pn8.d, x0, x1, vlx4339; CHECK-NEXT: mov p0.b, p8.b340; CHECK-NEXT: ret341 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c64(i64 %a, i64 %b, i32 4)342 ret target("aarch64.svcount") %out343}344 345 346;347; WHILELE348;349 350define target("aarch64.svcount") @whilele_c8_vl2(i64 %a, i64 %b) nounwind {351; CHECK-LABEL: whilele_c8_vl2:352; CHECK: // %bb.0:353; CHECK-NEXT: whilele pn8.b, x0, x1, vlx2354; CHECK-NEXT: mov p0.b, p8.b355; CHECK-NEXT: ret356 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c8(i64 %a, i64 %b, i32 2)357 ret target("aarch64.svcount") %out358}359 360define target("aarch64.svcount") @whilele_c8_vl4(i64 %a, i64 %b) nounwind {361; CHECK-LABEL: whilele_c8_vl4:362; CHECK: // %bb.0:363; CHECK-NEXT: whilele pn8.b, x0, x1, vlx4364; CHECK-NEXT: mov p0.b, p8.b365; CHECK-NEXT: ret366 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c8(i64 %a, i64 %b, i32 4)367 ret target("aarch64.svcount") %out368}369 370define target("aarch64.svcount") @whilele_c16_vl2(i64 %a, i64 %b) nounwind {371; CHECK-LABEL: whilele_c16_vl2:372; CHECK: // %bb.0:373; CHECK-NEXT: whilele pn8.h, x0, x1, vlx2374; CHECK-NEXT: mov p0.b, p8.b375; CHECK-NEXT: ret376 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c16(i64 %a, i64 %b, i32 2)377 ret target("aarch64.svcount") %out378}379 380define target("aarch64.svcount") @whilele_c16_vl4(i64 %a, i64 %b) nounwind {381; CHECK-LABEL: whilele_c16_vl4:382; CHECK: // %bb.0:383; CHECK-NEXT: whilele pn8.h, x0, x1, vlx4384; CHECK-NEXT: mov p0.b, p8.b385; CHECK-NEXT: ret386 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c16(i64 %a, i64 %b, i32 4)387 ret target("aarch64.svcount") %out388}389 390define target("aarch64.svcount") @whilele_c32_vl2(i64 %a, i64 %b) nounwind {391; CHECK-LABEL: whilele_c32_vl2:392; CHECK: // %bb.0:393; CHECK-NEXT: whilele pn8.s, x0, x1, vlx2394; CHECK-NEXT: mov p0.b, p8.b395; CHECK-NEXT: ret396 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c32(i64 %a, i64 %b, i32 2)397 ret target("aarch64.svcount") %out398}399 400define target("aarch64.svcount") @whilele_c32_vl4(i64 %a, i64 %b) nounwind {401; CHECK-LABEL: whilele_c32_vl4:402; CHECK: // %bb.0:403; CHECK-NEXT: whilele pn8.s, x0, x1, vlx4404; CHECK-NEXT: mov p0.b, p8.b405; CHECK-NEXT: ret406 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c32(i64 %a, i64 %b, i32 4)407 ret target("aarch64.svcount") %out408}409 410define target("aarch64.svcount") @whilele_c64_vl2(i64 %a, i64 %b) nounwind {411; CHECK-LABEL: whilele_c64_vl2:412; CHECK: // %bb.0:413; CHECK-NEXT: whilele pn8.d, x0, x1, vlx2414; CHECK-NEXT: mov p0.b, p8.b415; CHECK-NEXT: ret416 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c64(i64 %a, i64 %b, i32 2)417 ret target("aarch64.svcount") %out418}419 420define target("aarch64.svcount") @whilele_c64_vl4(i64 %a, i64 %b) nounwind {421; CHECK-LABEL: whilele_c64_vl4:422; CHECK: // %bb.0:423; CHECK-NEXT: whilele pn8.d, x0, x1, vlx4424; CHECK-NEXT: mov p0.b, p8.b425; CHECK-NEXT: ret426 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c64(i64 %a, i64 %b, i32 4)427 ret target("aarch64.svcount") %out428}429 430 431;432; WHILELO433;434 435define target("aarch64.svcount") @whilelo_c8_vl2(i64 %a, i64 %b) nounwind {436; CHECK-LABEL: whilelo_c8_vl2:437; CHECK: // %bb.0:438; CHECK-NEXT: whilelo pn8.b, x0, x1, vlx2439; CHECK-NEXT: mov p0.b, p8.b440; CHECK-NEXT: ret441 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c8(i64 %a, i64 %b, i32 2)442 ret target("aarch64.svcount") %out443}444 445define target("aarch64.svcount") @whilelo_c8_vl4(i64 %a, i64 %b) nounwind {446; CHECK-LABEL: whilelo_c8_vl4:447; CHECK: // %bb.0:448; CHECK-NEXT: whilelo pn8.b, x0, x1, vlx4449; CHECK-NEXT: mov p0.b, p8.b450; CHECK-NEXT: ret451 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c8(i64 %a, i64 %b, i32 4)452 ret target("aarch64.svcount") %out453}454 455define target("aarch64.svcount") @whilelo_c16_vl2(i64 %a, i64 %b) nounwind {456; CHECK-LABEL: whilelo_c16_vl2:457; CHECK: // %bb.0:458; CHECK-NEXT: whilelo pn8.h, x0, x1, vlx2459; CHECK-NEXT: mov p0.b, p8.b460; CHECK-NEXT: ret461 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c16(i64 %a, i64 %b, i32 2)462 ret target("aarch64.svcount") %out463}464 465define target("aarch64.svcount") @whilelo_c16_vl4(i64 %a, i64 %b) nounwind {466; CHECK-LABEL: whilelo_c16_vl4:467; CHECK: // %bb.0:468; CHECK-NEXT: whilelo pn8.h, x0, x1, vlx4469; CHECK-NEXT: mov p0.b, p8.b470; CHECK-NEXT: ret471 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c16(i64 %a, i64 %b, i32 4)472 ret target("aarch64.svcount") %out473}474 475define target("aarch64.svcount") @whilelo_c32_vl2(i64 %a, i64 %b) nounwind {476; CHECK-LABEL: whilelo_c32_vl2:477; CHECK: // %bb.0:478; CHECK-NEXT: whilelo pn8.s, x0, x1, vlx2479; CHECK-NEXT: mov p0.b, p8.b480; CHECK-NEXT: ret481 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c32(i64 %a, i64 %b, i32 2)482 ret target("aarch64.svcount") %out483}484 485define target("aarch64.svcount") @whilelo_c32_vl4(i64 %a, i64 %b) nounwind {486; CHECK-LABEL: whilelo_c32_vl4:487; CHECK: // %bb.0:488; CHECK-NEXT: whilelo pn8.s, x0, x1, vlx4489; CHECK-NEXT: mov p0.b, p8.b490; CHECK-NEXT: ret491 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c32(i64 %a, i64 %b, i32 4)492 ret target("aarch64.svcount") %out493}494 495define target("aarch64.svcount") @whilelo_c64_vl2(i64 %a, i64 %b) nounwind {496; CHECK-LABEL: whilelo_c64_vl2:497; CHECK: // %bb.0:498; CHECK-NEXT: whilelo pn8.d, x0, x1, vlx2499; CHECK-NEXT: mov p0.b, p8.b500; CHECK-NEXT: ret501 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c64(i64 %a, i64 %b, i32 2)502 ret target("aarch64.svcount") %out503}504 505define target("aarch64.svcount") @whilelo_c64_vl4(i64 %a, i64 %b) nounwind {506; CHECK-LABEL: whilelo_c64_vl4:507; CHECK: // %bb.0:508; CHECK-NEXT: whilelo pn8.d, x0, x1, vlx4509; CHECK-NEXT: mov p0.b, p8.b510; CHECK-NEXT: ret511 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c64(i64 %a, i64 %b, i32 4)512 ret target("aarch64.svcount") %out513}514 515 516;517; WHILELS518;519 520define target("aarch64.svcount") @whilels_c8_vl2(i64 %a, i64 %b) nounwind {521; CHECK-LABEL: whilels_c8_vl2:522; CHECK: // %bb.0:523; CHECK-NEXT: whilels pn8.b, x0, x1, vlx2524; CHECK-NEXT: mov p0.b, p8.b525; CHECK-NEXT: ret526 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c8(i64 %a, i64 %b, i32 2)527 ret target("aarch64.svcount") %out528}529 530define target("aarch64.svcount") @whilels_c8_vl4(i64 %a, i64 %b) nounwind {531; CHECK-LABEL: whilels_c8_vl4:532; CHECK: // %bb.0:533; CHECK-NEXT: whilels pn8.b, x0, x1, vlx4534; CHECK-NEXT: mov p0.b, p8.b535; CHECK-NEXT: ret536 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c8(i64 %a, i64 %b, i32 4)537 ret target("aarch64.svcount") %out538}539 540define target("aarch64.svcount") @whilels_c16_vl2(i64 %a, i64 %b) nounwind {541; CHECK-LABEL: whilels_c16_vl2:542; CHECK: // %bb.0:543; CHECK-NEXT: whilels pn8.h, x0, x1, vlx2544; CHECK-NEXT: mov p0.b, p8.b545; CHECK-NEXT: ret546 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c16(i64 %a, i64 %b, i32 2)547 ret target("aarch64.svcount") %out548}549 550define target("aarch64.svcount") @whilels_c16_vl4(i64 %a, i64 %b) nounwind {551; CHECK-LABEL: whilels_c16_vl4:552; CHECK: // %bb.0:553; CHECK-NEXT: whilels pn8.h, x0, x1, vlx4554; CHECK-NEXT: mov p0.b, p8.b555; CHECK-NEXT: ret556 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c16(i64 %a, i64 %b, i32 4)557 ret target("aarch64.svcount") %out558}559 560define target("aarch64.svcount") @whilels_c32_vl2(i64 %a, i64 %b) nounwind {561; CHECK-LABEL: whilels_c32_vl2:562; CHECK: // %bb.0:563; CHECK-NEXT: whilels pn8.s, x0, x1, vlx2564; CHECK-NEXT: mov p0.b, p8.b565; CHECK-NEXT: ret566 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c32(i64 %a, i64 %b, i32 2)567 ret target("aarch64.svcount") %out568}569 570define target("aarch64.svcount") @whilels_c32_vl4(i64 %a, i64 %b) nounwind {571; CHECK-LABEL: whilels_c32_vl4:572; CHECK: // %bb.0:573; CHECK-NEXT: whilels pn8.s, x0, x1, vlx4574; CHECK-NEXT: mov p0.b, p8.b575; CHECK-NEXT: ret576 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c32(i64 %a, i64 %b, i32 4)577 ret target("aarch64.svcount") %out578}579 580define target("aarch64.svcount") @whilels_c64_vl2(i64 %a, i64 %b) nounwind {581; CHECK-LABEL: whilels_c64_vl2:582; CHECK: // %bb.0:583; CHECK-NEXT: whilels pn8.d, x0, x1, vlx2584; CHECK-NEXT: mov p0.b, p8.b585; CHECK-NEXT: ret586 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c64(i64 %a, i64 %b, i32 2)587 ret target("aarch64.svcount") %out588}589 590define target("aarch64.svcount") @whilels_c64_vl4(i64 %a, i64 %b) nounwind {591; CHECK-LABEL: whilels_c64_vl4:592; CHECK: // %bb.0:593; CHECK-NEXT: whilels pn8.d, x0, x1, vlx4594; CHECK-NEXT: mov p0.b, p8.b595; CHECK-NEXT: ret596 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c64(i64 %a, i64 %b, i32 4)597 ret target("aarch64.svcount") %out598}599 600 601;602; WHILELT603;604 605define target("aarch64.svcount") @whilelt_c8_vl2(i64 %a, i64 %b) nounwind {606; CHECK-LABEL: whilelt_c8_vl2:607; CHECK: // %bb.0:608; CHECK-NEXT: whilelt pn8.b, x0, x1, vlx2609; CHECK-NEXT: mov p0.b, p8.b610; CHECK-NEXT: ret611 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c8(i64 %a, i64 %b, i32 2)612 ret target("aarch64.svcount") %out613}614 615define target("aarch64.svcount") @whilelt_c8_vl4(i64 %a, i64 %b) nounwind {616; CHECK-LABEL: whilelt_c8_vl4:617; CHECK: // %bb.0:618; CHECK-NEXT: whilelt pn8.b, x0, x1, vlx4619; CHECK-NEXT: mov p0.b, p8.b620; CHECK-NEXT: ret621 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c8(i64 %a, i64 %b, i32 4)622 ret target("aarch64.svcount") %out623}624 625define target("aarch64.svcount") @whilelt_c16_vl2(i64 %a, i64 %b) nounwind {626; CHECK-LABEL: whilelt_c16_vl2:627; CHECK: // %bb.0:628; CHECK-NEXT: whilelt pn8.h, x0, x1, vlx2629; CHECK-NEXT: mov p0.b, p8.b630; CHECK-NEXT: ret631 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c16(i64 %a, i64 %b, i32 2)632 ret target("aarch64.svcount") %out633}634 635define target("aarch64.svcount") @whilelt_c16_vl4(i64 %a, i64 %b) nounwind {636; CHECK-LABEL: whilelt_c16_vl4:637; CHECK: // %bb.0:638; CHECK-NEXT: whilelt pn8.h, x0, x1, vlx4639; CHECK-NEXT: mov p0.b, p8.b640; CHECK-NEXT: ret641 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c16(i64 %a, i64 %b, i32 4)642 ret target("aarch64.svcount") %out643}644 645define target("aarch64.svcount") @whilelt_c32_vl2(i64 %a, i64 %b) nounwind {646; CHECK-LABEL: whilelt_c32_vl2:647; CHECK: // %bb.0:648; CHECK-NEXT: whilelt pn8.s, x0, x1, vlx2649; CHECK-NEXT: mov p0.b, p8.b650; CHECK-NEXT: ret651 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c32(i64 %a, i64 %b, i32 2)652 ret target("aarch64.svcount") %out653}654 655define target("aarch64.svcount") @whilelt_c32_vl4(i64 %a, i64 %b) nounwind {656; CHECK-LABEL: whilelt_c32_vl4:657; CHECK: // %bb.0:658; CHECK-NEXT: whilelt pn8.s, x0, x1, vlx4659; CHECK-NEXT: mov p0.b, p8.b660; CHECK-NEXT: ret661 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c32(i64 %a, i64 %b, i32 4)662 ret target("aarch64.svcount") %out663}664 665define target("aarch64.svcount") @whilelt_c64_vl2(i64 %a, i64 %b) nounwind {666; CHECK-LABEL: whilelt_c64_vl2:667; CHECK: // %bb.0:668; CHECK-NEXT: whilelt pn8.d, x0, x1, vlx2669; CHECK-NEXT: mov p0.b, p8.b670; CHECK-NEXT: ret671 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c64(i64 %a, i64 %b, i32 2)672 ret target("aarch64.svcount") %out673}674 675define target("aarch64.svcount") @whilelt_c64_vl4(i64 %a, i64 %b) nounwind {676; CHECK-LABEL: whilelt_c64_vl4:677; CHECK: // %bb.0:678; CHECK-NEXT: whilelt pn8.d, x0, x1, vlx4679; CHECK-NEXT: mov p0.b, p8.b680; CHECK-NEXT: ret681 %out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c64(i64 %a, i64 %b, i32 4)682 ret target("aarch64.svcount") %out683}684 685 686declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c8(i64, i64, i32)687declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c16(i64, i64, i32)688declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c32(i64, i64, i32)689declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c64(i64, i64, i32)690declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c8(i64, i64, i32)691declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c16(i64, i64, i32)692declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c32(i64, i64, i32)693declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c64(i64, i64, i32)694declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c8(i64, i64, i32)695declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c16(i64, i64, i32)696declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c32(i64, i64, i32)697declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c64(i64, i64, i32)698declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c8(i64, i64, i32)699declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c16(i64, i64, i32)700declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c32(i64, i64, i32)701declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c64(i64, i64, i32)702declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c8(i64, i64, i32)703declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c16(i64, i64, i32)704declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c32(i64, i64, i32)705declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c64(i64, i64, i32)706declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c8(i64, i64, i32)707declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c16(i64, i64, i32)708declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c32(i64, i64, i32)709declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c64(i64, i64, i32)710declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c8(i64, i64, i32)711declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c16(i64, i64, i32)712declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c32(i64, i64, i32)713declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c64(i64, i64, i32)714declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c8(i64, i64, i32)715declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c16(i64, i64, i32)716declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c32(i64, i64, i32)717declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c64(i64, i64, i32)718