560 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; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -force-streaming < %s | FileCheck %s4 5;6; WHILELE7;8 9define <vscale x 16 x i1> @whilele_b_ww(i32 %a, i32 %b) {10; CHECK-LABEL: whilele_b_ww:11; CHECK: // %bb.0:12; CHECK-NEXT: whilele p0.b, w0, w113; CHECK-NEXT: ret14 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32 %a, i32 %b)15 ret <vscale x 16 x i1> %out16}17 18define <vscale x 16 x i1> @whilele_b_xx(i64 %a, i64 %b) {19; CHECK-LABEL: whilele_b_xx:20; CHECK: // %bb.0:21; CHECK-NEXT: whilele p0.b, x0, x122; CHECK-NEXT: ret23 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 %a, i64 %b)24 ret <vscale x 16 x i1> %out25}26 27define <vscale x 8 x i1> @whilele_h_ww(i32 %a, i32 %b) {28; CHECK-LABEL: whilele_h_ww:29; CHECK: // %bb.0:30; CHECK-NEXT: whilele p0.h, w0, w131; CHECK-NEXT: ret32 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i32(i32 %a, i32 %b)33 ret <vscale x 8 x i1> %out34}35 36define <vscale x 8 x i1> @whilele_h_xx(i64 %a, i64 %b) {37; CHECK-LABEL: whilele_h_xx:38; CHECK: // %bb.0:39; CHECK-NEXT: whilele p0.h, x0, x140; CHECK-NEXT: ret41 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i64(i64 %a, i64 %b)42 ret <vscale x 8 x i1> %out43}44 45define <vscale x 4 x i1> @whilele_s_ww(i32 %a, i32 %b) {46; CHECK-LABEL: whilele_s_ww:47; CHECK: // %bb.0:48; CHECK-NEXT: whilele p0.s, w0, w149; CHECK-NEXT: ret50 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i32(i32 %a, i32 %b)51 ret <vscale x 4 x i1> %out52}53 54define <vscale x 4 x i1> @whilele_s_xx(i64 %a, i64 %b) {55; CHECK-LABEL: whilele_s_xx:56; CHECK: // %bb.0:57; CHECK-NEXT: whilele p0.s, x0, x158; CHECK-NEXT: ret59 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i64(i64 %a, i64 %b)60 ret <vscale x 4 x i1> %out61}62 63define <vscale x 2 x i1> @whilele_d_ww(i32 %a, i32 %b) {64; CHECK-LABEL: whilele_d_ww:65; CHECK: // %bb.0:66; CHECK-NEXT: whilele p0.d, w0, w167; CHECK-NEXT: ret68 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i32(i32 %a, i32 %b)69 ret <vscale x 2 x i1> %out70}71 72define <vscale x 2 x i1> @whilele_d_xx(i64 %a, i64 %b) {73; CHECK-LABEL: whilele_d_xx:74; CHECK: // %bb.0:75; CHECK-NEXT: whilele p0.d, x0, x176; CHECK-NEXT: ret77 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i64(i64 %a, i64 %b)78 ret <vscale x 2 x i1> %out79}80 81define <vscale x 2 x i1> @whilele_d_ii_dont_fold_to_ptrue_larger_than_minvec() {82; CHECK-LABEL: whilele_d_ii_dont_fold_to_ptrue_larger_than_minvec:83; CHECK: // %bb.0:84; CHECK-NEXT: mov w8, #3 // =0x385; CHECK-NEXT: whilele p0.d, xzr, x886; CHECK-NEXT: ret87 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i64(i64 0, i64 3)88 ret <vscale x 2 x i1> %out89}90 91define <vscale x 16 x i1> @whilele_b_ii() {92; CHECK-LABEL: whilele_b_ii:93; CHECK: // %bb.0:94; CHECK-NEXT: ptrue p0.b, vl695; CHECK-NEXT: ret96 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 -2, i64 3)97 ret <vscale x 16 x i1> %out98}99 100define <vscale x 16 x i1> @whilele_b_ii_dont_fold_to_ptrue_nonexistent_vl9() {101; CHECK-LABEL: whilele_b_ii_dont_fold_to_ptrue_nonexistent_vl9:102; CHECK: // %bb.0:103; CHECK-NEXT: mov w8, #9 // =0x9104; CHECK-NEXT: whilele p0.b, xzr, x8105; CHECK-NEXT: ret106 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 0, i64 9)107 ret <vscale x 16 x i1> %out108}109 110define <vscale x 16 x i1> @whilele_b_vl_maximum() vscale_range(16, 16) {111; CHECK-LABEL: whilele_b_vl_maximum:112; CHECK: // %bb.0:113; CHECK-NEXT: ptrue p0.b, vl256114; CHECK-NEXT: ret115 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 0, i64 255)116 ret <vscale x 16 x i1> %out117}118 119define <vscale x 16 x i1> @whilele_b_ii_dont_fold_to_ptrue_overflow() {120; CHECK-LABEL: whilele_b_ii_dont_fold_to_ptrue_overflow:121; CHECK: // %bb.0:122; CHECK-NEXT: mov w8, #2 // =0x2123; CHECK-NEXT: mov w9, #2147483647 // =0x7fffffff124; CHECK-NEXT: movk w8, #32768, lsl #16125; CHECK-NEXT: whilele p0.b, w9, w8126; CHECK-NEXT: ret127 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32 2147483647, i32 -2147483646)128 ret <vscale x 16 x i1> %out129}130 131define <vscale x 16 x i1> @whilele_b_ii_known_always_true(i32 %a) {132; CHECK-LABEL: whilele_b_ii_known_always_true:133; CHECK: // %bb.0:134; CHECK-NEXT: ptrue p0.b135; CHECK-NEXT: ret136 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32 %a, i32 2147483647)137 ret <vscale x 16 x i1> %out138}139 140;141; WHILELO142;143 144define <vscale x 16 x i1> @whilelo_b_ww(i32 %a, i32 %b) {145; CHECK-LABEL: whilelo_b_ww:146; CHECK: // %bb.0:147; CHECK-NEXT: whilelo p0.b, w0, w1148; CHECK-NEXT: ret149 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32 %a, i32 %b)150 ret <vscale x 16 x i1> %out151}152 153define <vscale x 16 x i1> @whilelo_b_xx(i64 %a, i64 %b) {154; CHECK-LABEL: whilelo_b_xx:155; CHECK: // %bb.0:156; CHECK-NEXT: whilelo p0.b, x0, x1157; CHECK-NEXT: ret158 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 %a, i64 %b)159 ret <vscale x 16 x i1> %out160}161 162define <vscale x 8 x i1> @whilelo_h_ww(i32 %a, i32 %b) {163; CHECK-LABEL: whilelo_h_ww:164; CHECK: // %bb.0:165; CHECK-NEXT: whilelo p0.h, w0, w1166; CHECK-NEXT: ret167 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i32(i32 %a, i32 %b)168 ret <vscale x 8 x i1> %out169}170 171define <vscale x 8 x i1> @whilelo_h_xx(i64 %a, i64 %b) {172; CHECK-LABEL: whilelo_h_xx:173; CHECK: // %bb.0:174; CHECK-NEXT: whilelo p0.h, x0, x1175; CHECK-NEXT: ret176 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i64(i64 %a, i64 %b)177 ret <vscale x 8 x i1> %out178}179 180define <vscale x 4 x i1> @whilelo_s_ww(i32 %a, i32 %b) {181; CHECK-LABEL: whilelo_s_ww:182; CHECK: // %bb.0:183; CHECK-NEXT: whilelo p0.s, w0, w1184; CHECK-NEXT: ret185 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i32(i32 %a, i32 %b)186 ret <vscale x 4 x i1> %out187}188 189define <vscale x 4 x i1> @whilelo_s_xx(i64 %a, i64 %b) {190; CHECK-LABEL: whilelo_s_xx:191; CHECK: // %bb.0:192; CHECK-NEXT: whilelo p0.s, x0, x1193; CHECK-NEXT: ret194 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i64(i64 %a, i64 %b)195 ret <vscale x 4 x i1> %out196}197 198define <vscale x 2 x i1> @whilelo_d_ww(i32 %a, i32 %b) {199; CHECK-LABEL: whilelo_d_ww:200; CHECK: // %bb.0:201; CHECK-NEXT: whilelo p0.d, w0, w1202; CHECK-NEXT: ret203 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i32(i32 %a, i32 %b)204 ret <vscale x 2 x i1> %out205}206 207define <vscale x 2 x i1> @whilelo_d_xx(i64 %a, i64 %b) {208; CHECK-LABEL: whilelo_d_xx:209; CHECK: // %bb.0:210; CHECK-NEXT: whilelo p0.d, x0, x1211; CHECK-NEXT: ret212 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64 %a, i64 %b)213 ret <vscale x 2 x i1> %out214}215 216define <vscale x 2 x i1> @whilelo_d_ii_dont_fold_to_ptrue_larger_than_minvec() {217; CHECK-LABEL: whilelo_d_ii_dont_fold_to_ptrue_larger_than_minvec:218; CHECK: // %bb.0:219; CHECK-NEXT: mov w8, #3 // =0x3220; CHECK-NEXT: whilelo p0.d, xzr, x8221; CHECK-NEXT: ret222 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64 0, i64 3)223 ret <vscale x 2 x i1> %out224}225 226define <vscale x 16 x i1> @whilelo_b_ii() {227; CHECK-LABEL: whilelo_b_ii:228; CHECK: // %bb.0:229; CHECK-NEXT: ptrue p0.b, vl6230; CHECK-NEXT: ret231 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 2, i64 8)232 ret <vscale x 16 x i1> %out233}234 235define <vscale x 16 x i1> @whilelo_b_ii_dont_fold_to_ptrue_nonexistent_vl9() {236; CHECK-LABEL: whilelo_b_ii_dont_fold_to_ptrue_nonexistent_vl9:237; CHECK: // %bb.0:238; CHECK-NEXT: mov w8, #9 // =0x9239; CHECK-NEXT: whilelo p0.b, xzr, x8240; CHECK-NEXT: ret241 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 0, i64 9)242 ret <vscale x 16 x i1> %out243}244 245define <vscale x 16 x i1> @whilelo_b_vl_maximum() vscale_range(16, 16) {246; CHECK-LABEL: whilelo_b_vl_maximum:247; CHECK: // %bb.0:248; CHECK-NEXT: ptrue p0.b, vl256249; CHECK-NEXT: ret250 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 0, i64 256)251 ret <vscale x 16 x i1> %out252}253 254define <vscale x 16 x i1> @whilelo_b_ii_dont_fold_to_ptrue_overflow() {255; CHECK-LABEL: whilelo_b_ii_dont_fold_to_ptrue_overflow:256; CHECK: // %bb.0:257; CHECK-NEXT: mov w8, #6 // =0x6258; CHECK-NEXT: mov w9, #-1 // =0xffffffff259; CHECK-NEXT: whilelo p0.b, w9, w8260; CHECK-NEXT: ret261 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32 4294967295, i32 6)262 ret <vscale x 16 x i1> %out263}264 265;266; WHILELS267;268 269define <vscale x 16 x i1> @whilels_b_ww(i32 %a, i32 %b) {270; CHECK-LABEL: whilels_b_ww:271; CHECK: // %bb.0:272; CHECK-NEXT: whilels p0.b, w0, w1273; CHECK-NEXT: ret274 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32 %a, i32 %b)275 ret <vscale x 16 x i1> %out276}277 278define <vscale x 16 x i1> @whilels_b_xx(i64 %a, i64 %b) {279; CHECK-LABEL: whilels_b_xx:280; CHECK: // %bb.0:281; CHECK-NEXT: whilels p0.b, x0, x1282; CHECK-NEXT: ret283 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 %a, i64 %b)284 ret <vscale x 16 x i1> %out285}286 287define <vscale x 8 x i1> @whilels_h_ww(i32 %a, i32 %b) {288; CHECK-LABEL: whilels_h_ww:289; CHECK: // %bb.0:290; CHECK-NEXT: whilels p0.h, w0, w1291; CHECK-NEXT: ret292 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i32(i32 %a, i32 %b)293 ret <vscale x 8 x i1> %out294}295 296define <vscale x 8 x i1> @whilels_h_xx(i64 %a, i64 %b) {297; CHECK-LABEL: whilels_h_xx:298; CHECK: // %bb.0:299; CHECK-NEXT: whilels p0.h, x0, x1300; CHECK-NEXT: ret301 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i64(i64 %a, i64 %b)302 ret <vscale x 8 x i1> %out303}304 305define <vscale x 4 x i1> @whilels_s_ww(i32 %a, i32 %b) {306; CHECK-LABEL: whilels_s_ww:307; CHECK: // %bb.0:308; CHECK-NEXT: whilels p0.s, w0, w1309; CHECK-NEXT: ret310 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i32(i32 %a, i32 %b)311 ret <vscale x 4 x i1> %out312}313 314define <vscale x 4 x i1> @whilels_s_xx(i64 %a, i64 %b) {315; CHECK-LABEL: whilels_s_xx:316; CHECK: // %bb.0:317; CHECK-NEXT: whilels p0.s, x0, x1318; CHECK-NEXT: ret319 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i64(i64 %a, i64 %b)320 ret <vscale x 4 x i1> %out321}322 323define <vscale x 2 x i1> @whilels_d_ww(i32 %a, i32 %b) {324; CHECK-LABEL: whilels_d_ww:325; CHECK: // %bb.0:326; CHECK-NEXT: whilels p0.d, w0, w1327; CHECK-NEXT: ret328 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i32(i32 %a, i32 %b)329 ret <vscale x 2 x i1> %out330}331 332define <vscale x 2 x i1> @whilels_d_xx(i64 %a, i64 %b) {333; CHECK-LABEL: whilels_d_xx:334; CHECK: // %bb.0:335; CHECK-NEXT: whilels p0.d, x0, x1336; CHECK-NEXT: ret337 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i64(i64 %a, i64 %b)338 ret <vscale x 2 x i1> %out339}340 341define <vscale x 2 x i1> @whilels_d_ii_dont_fold_to_ptrue_larger_than_minvec() {342; CHECK-LABEL: whilels_d_ii_dont_fold_to_ptrue_larger_than_minvec:343; CHECK: // %bb.0:344; CHECK-NEXT: mov w8, #3 // =0x3345; CHECK-NEXT: whilels p0.d, xzr, x8346; CHECK-NEXT: ret347 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i64(i64 0, i64 3)348 ret <vscale x 2 x i1> %out349}350 351define <vscale x 16 x i1> @whilels_b_ii() {352; CHECK-LABEL: whilels_b_ii:353; CHECK: // %bb.0:354; CHECK-NEXT: ptrue p0.b, vl7355; CHECK-NEXT: ret356 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 2, i64 8)357 ret <vscale x 16 x i1> %out358}359 360define <vscale x 16 x i1> @whilels_b_ii_dont_fold_to_ptrue_nonexistent_vl9() {361; CHECK-LABEL: whilels_b_ii_dont_fold_to_ptrue_nonexistent_vl9:362; CHECK: // %bb.0:363; CHECK-NEXT: mov w8, #9 // =0x9364; CHECK-NEXT: whilels p0.b, xzr, x8365; CHECK-NEXT: ret366 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 0, i64 9)367 ret <vscale x 16 x i1> %out368}369 370define <vscale x 16 x i1> @whilels_b_ii_vl_maximum() vscale_range(16, 16) {371; CHECK-LABEL: whilels_b_ii_vl_maximum:372; CHECK: // %bb.0:373; CHECK-NEXT: ptrue p0.b, vl256374; CHECK-NEXT: ret375 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 0, i64 255)376 ret <vscale x 16 x i1> %out377}378 379define <vscale x 16 x i1> @whilels_b_ii_dont_fold_to_ptrue_overflow() {380; CHECK-LABEL: whilels_b_ii_dont_fold_to_ptrue_overflow:381; CHECK: // %bb.0:382; CHECK-NEXT: mov w8, #6 // =0x6383; CHECK-NEXT: mov w9, #-1 // =0xffffffff384; CHECK-NEXT: whilels p0.b, w9, w8385; CHECK-NEXT: ret386 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32 4294967295, i32 6)387 ret <vscale x 16 x i1> %out388}389 390define <vscale x 16 x i1> @whilels_b_ii_known_always_true(i32 %a) {391; CHECK-LABEL: whilels_b_ii_known_always_true:392; CHECK: // %bb.0:393; CHECK-NEXT: ptrue p0.b394; CHECK-NEXT: ret395 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32 %a, i32 4294967295)396 ret <vscale x 16 x i1> %out397}398 399;400; WHILELT401;402 403define <vscale x 16 x i1> @whilelt_b_ww(i32 %a, i32 %b) {404; CHECK-LABEL: whilelt_b_ww:405; CHECK: // %bb.0:406; CHECK-NEXT: whilelt p0.b, w0, w1407; CHECK-NEXT: ret408 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i32(i32 %a, i32 %b)409 ret <vscale x 16 x i1> %out410}411 412define <vscale x 16 x i1> @whilelt_b_xx(i64 %a, i64 %b) {413; CHECK-LABEL: whilelt_b_xx:414; CHECK: // %bb.0:415; CHECK-NEXT: whilelt p0.b, x0, x1416; CHECK-NEXT: ret417 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 %a, i64 %b)418 ret <vscale x 16 x i1> %out419}420 421define <vscale x 8 x i1> @whilelt_h_ww(i32 %a, i32 %b) {422; CHECK-LABEL: whilelt_h_ww:423; CHECK: // %bb.0:424; CHECK-NEXT: whilelt p0.h, w0, w1425; CHECK-NEXT: ret426 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i32(i32 %a, i32 %b)427 ret <vscale x 8 x i1> %out428}429 430define <vscale x 8 x i1> @whilelt_h_xx(i64 %a, i64 %b) {431; CHECK-LABEL: whilelt_h_xx:432; CHECK: // %bb.0:433; CHECK-NEXT: whilelt p0.h, x0, x1434; CHECK-NEXT: ret435 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i64(i64 %a, i64 %b)436 ret <vscale x 8 x i1> %out437}438 439define <vscale x 4 x i1> @whilelt_s_ww(i32 %a, i32 %b) {440; CHECK-LABEL: whilelt_s_ww:441; CHECK: // %bb.0:442; CHECK-NEXT: whilelt p0.s, w0, w1443; CHECK-NEXT: ret444 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i32(i32 %a, i32 %b)445 ret <vscale x 4 x i1> %out446}447 448define <vscale x 4 x i1> @whilelt_s_xx(i64 %a, i64 %b) {449; CHECK-LABEL: whilelt_s_xx:450; CHECK: // %bb.0:451; CHECK-NEXT: whilelt p0.s, x0, x1452; CHECK-NEXT: ret453 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i64(i64 %a, i64 %b)454 ret <vscale x 4 x i1> %out455}456 457define <vscale x 2 x i1> @whilelt_d_ww(i32 %a, i32 %b) {458; CHECK-LABEL: whilelt_d_ww:459; CHECK: // %bb.0:460; CHECK-NEXT: whilelt p0.d, w0, w1461; CHECK-NEXT: ret462 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i32(i32 %a, i32 %b)463 ret <vscale x 2 x i1> %out464}465 466define <vscale x 2 x i1> @whilelt_d_xx(i64 %a, i64 %b) {467; CHECK-LABEL: whilelt_d_xx:468; CHECK: // %bb.0:469; CHECK-NEXT: whilelt p0.d, x0, x1470; CHECK-NEXT: ret471 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i64(i64 %a, i64 %b)472 ret <vscale x 2 x i1> %out473}474 475define <vscale x 2 x i1> @whilelt_d_ii_dont_fold_to_ptrue_larger_than_minvec() {476; CHECK-LABEL: whilelt_d_ii_dont_fold_to_ptrue_larger_than_minvec:477; CHECK: // %bb.0:478; CHECK-NEXT: mov w8, #3 // =0x3479; CHECK-NEXT: whilelt p0.d, xzr, x8480; CHECK-NEXT: ret481 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i64(i64 0, i64 3)482 ret <vscale x 2 x i1> %out483}484 485define <vscale x 16 x i1> @whilelt_b_ii() {486; CHECK-LABEL: whilelt_b_ii:487; CHECK: // %bb.0:488; CHECK-NEXT: ptrue p0.b, vl5489; CHECK-NEXT: ret490 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 -2, i64 3)491 ret <vscale x 16 x i1> %out492}493 494define <vscale x 16 x i1> @whilelt_b_ii_dont_fold_to_ptrue_nonexistent_vl9() {495; CHECK-LABEL: whilelt_b_ii_dont_fold_to_ptrue_nonexistent_vl9:496; CHECK: // %bb.0:497; CHECK-NEXT: mov w8, #9 // =0x9498; CHECK-NEXT: whilelt p0.b, xzr, x8499; CHECK-NEXT: ret500 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 0, i64 9)501 ret <vscale x 16 x i1> %out502}503 504define <vscale x 16 x i1> @whilelt_b_ii_vl_maximum() vscale_range(16, 16) {505; CHECK-LABEL: whilelt_b_ii_vl_maximum:506; CHECK: // %bb.0:507; CHECK-NEXT: ptrue p0.b, vl256508; CHECK-NEXT: ret509 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 0, i64 256)510 ret <vscale x 16 x i1> %out511}512 513define <vscale x 16 x i1> @whilelt_b_ii_dont_fold_to_ptrue_overflow() {514; CHECK-LABEL: whilelt_b_ii_dont_fold_to_ptrue_overflow:515; CHECK: // %bb.0:516; CHECK-NEXT: mov w8, #2 // =0x2517; CHECK-NEXT: mov w9, #2147483647 // =0x7fffffff518; CHECK-NEXT: movk w8, #32768, lsl #16519; CHECK-NEXT: whilelt p0.b, w9, w8520; CHECK-NEXT: ret521 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i32(i32 2147483647, i32 -2147483646)522 ret <vscale x 16 x i1> %out523}524 525declare <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32, i32)526declare <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64, i64)527declare <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i32(i32, i32)528declare <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i64(i64, i64)529declare <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i32(i32, i32)530declare <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i64(i64, i64)531declare <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i32(i32, i32)532declare <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i64(i64, i64)533 534declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32, i32)535declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64, i64)536declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i32(i32, i32)537declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i64(i64, i64)538declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i32(i32, i32)539declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i64(i64, i64)540declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i32(i32, i32)541declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64, i64)542 543declare <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32, i32)544declare <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64, i64)545declare <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i32(i32, i32)546declare <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i64(i64, i64)547declare <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i32(i32, i32)548declare <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i64(i64, i64)549declare <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i32(i32, i32)550declare <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i64(i64, i64)551 552declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i32(i32, i32)553declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64, i64)554declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i32(i32, i32)555declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i64(i64, i64)556declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i32(i32, i32)557declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i64(i64, i64)558declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i32(i32, i32)559declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i64(i64, i64)560