brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.2 KiB · a829984 Raw
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