brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.4 KiB · c702038 Raw
743 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve2 < %s | FileCheck %s3; RUN: llc -mattr=+sve,+sme < %s | FileCheck %s4; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s5 6target triple = "aarch64-unknown-linux-gnu"7 8;9; WHILEGE10;11 12; Cannot invert the while predicate when %a is MAX_INT.13define <vscale x 16 x i1> @whilege_b_ww(i32 %a, i32 %b) {14; CHECK-LABEL: whilege_b_ww:15; CHECK:       // %bb.0:16; CHECK-NEXT:    whilele p0.b, w1, w017; CHECK-NEXT:    rev p0.b, p0.b18; CHECK-NEXT:    ret19  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32 %b, i32 %a)20  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)21  ret <vscale x 16 x i1> %while.rev22}23 24; Cannot invert the while predicate when %a is MAX_INT.25define <vscale x 16 x i1> @whilege_b_xx(i64 %a, i64 %b) {26; CHECK-LABEL: whilege_b_xx:27; CHECK:       // %bb.0:28; CHECK-NEXT:    whilele p0.b, x1, x029; CHECK-NEXT:    rev p0.b, p0.b30; CHECK-NEXT:    ret31  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 %b, i64 %a)32  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)33  ret <vscale x 16 x i1> %while.rev34}35 36; Cannot invert the while predicate when %a is MAX_INT.37define <vscale x 8 x i1> @whilege_h_ww(i32 %a, i32 %b) {38; CHECK-LABEL: whilege_h_ww:39; CHECK:       // %bb.0:40; CHECK-NEXT:    whilele p0.h, w1, w041; CHECK-NEXT:    rev p0.h, p0.h42; CHECK-NEXT:    ret43  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i32(i32 %b, i32 %a)44  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)45  ret <vscale x 8 x i1> %while.rev46}47 48; Cannot invert the while predicate when %a is MAX_INT.49define <vscale x 8 x i1> @whilege_h_xx(i64 %a, i64 %b) {50; CHECK-LABEL: whilege_h_xx:51; CHECK:       // %bb.0:52; CHECK-NEXT:    whilele p0.h, x1, x053; CHECK-NEXT:    rev p0.h, p0.h54; CHECK-NEXT:    ret55  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i64(i64 %b, i64 %a)56  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)57  ret <vscale x 8 x i1> %while.rev58}59 60; Cannot invert the while predicate when %a is MAX_INT.61define <vscale x 4 x i1> @whilege_s_ww(i32 %a, i32 %b) {62; CHECK-LABEL: whilege_s_ww:63; CHECK:       // %bb.0:64; CHECK-NEXT:    whilele p0.s, w1, w065; CHECK-NEXT:    rev p0.s, p0.s66; CHECK-NEXT:    ret67  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i32(i32 %b, i32 %a)68  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)69  ret <vscale x 4 x i1> %while.rev70}71 72; Cannot invert the while predicate when %a is MAX_INT.73define <vscale x 4 x i1> @whilege_s_xx(i64 %a, i64 %b) {74; CHECK-LABEL: whilege_s_xx:75; CHECK:       // %bb.0:76; CHECK-NEXT:    whilele p0.s, x1, x077; CHECK-NEXT:    rev p0.s, p0.s78; CHECK-NEXT:    ret79  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i64(i64 %b, i64 %a)80  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)81  ret <vscale x 4 x i1> %while.rev82}83 84; Cannot invert the while predicate when %a is MAX_INT.85define <vscale x 2 x i1> @whilege_d_ww(i32 %a, i32 %b) {86; CHECK-LABEL: whilege_d_ww:87; CHECK:       // %bb.0:88; CHECK-NEXT:    whilele p0.d, w1, w089; CHECK-NEXT:    rev p0.d, p0.d90; CHECK-NEXT:    ret91  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i32(i32 %b, i32 %a)92  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)93  ret <vscale x 2 x i1> %while.rev94}95 96; Cannot invert the while predicate when %a is MAX_INT.97define <vscale x 2 x i1> @whilege_d_xx(i64 %a, i64 %b) {98; CHECK-LABEL: whilege_d_xx:99; CHECK:       // %bb.0:100; CHECK-NEXT:    whilele p0.d, x1, x0101; CHECK-NEXT:    rev p0.d, p0.d102; CHECK-NEXT:    ret103  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i64(i64 %b, i64 %a)104  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)105  ret <vscale x 2 x i1> %while.rev106}107 108;109; WHILEHS110;111 112; Cannot invert the while predicate when %a is MAX_UINT.113define <vscale x 16 x i1> @whilehs_b_ww(i32 %a, i32 %b) {114; CHECK-LABEL: whilehs_b_ww:115; CHECK:       // %bb.0:116; CHECK-NEXT:    whilels p0.b, w1, w0117; CHECK-NEXT:    rev p0.b, p0.b118; CHECK-NEXT:    ret119  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32 %b, i32 %a)120  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)121  ret <vscale x 16 x i1> %while.rev122}123 124; Cannot invert the while predicate when %a is MAX_UINT.125define <vscale x 16 x i1> @whilehs_b_xx(i64 %a, i64 %b) {126; CHECK-LABEL: whilehs_b_xx:127; CHECK:       // %bb.0:128; CHECK-NEXT:    whilels p0.b, x1, x0129; CHECK-NEXT:    rev p0.b, p0.b130; CHECK-NEXT:    ret131  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 %b, i64 %a)132  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)133  ret <vscale x 16 x i1> %while.rev134}135 136; Cannot invert the while predicate when %a is MAX_UINT.137define <vscale x 8 x i1> @whilehs_h_ww(i32 %a, i32 %b) {138; CHECK-LABEL: whilehs_h_ww:139; CHECK:       // %bb.0:140; CHECK-NEXT:    whilels p0.h, w1, w0141; CHECK-NEXT:    rev p0.h, p0.h142; CHECK-NEXT:    ret143  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i32(i32 %b, i32 %a)144  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)145  ret <vscale x 8 x i1> %while.rev146}147 148; Cannot invert the while predicate when %a is MAX_UINT.149define <vscale x 8 x i1> @whilehs_h_xx(i64 %a, i64 %b) {150; CHECK-LABEL: whilehs_h_xx:151; CHECK:       // %bb.0:152; CHECK-NEXT:    whilels p0.h, x1, x0153; CHECK-NEXT:    rev p0.h, p0.h154; CHECK-NEXT:    ret155  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i64(i64 %b, i64 %a)156  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)157  ret <vscale x 8 x i1> %while.rev158}159 160; Cannot invert the while predicate when %a is MAX_UINT.161define <vscale x 4 x i1> @whilehs_s_ww(i32 %a, i32 %b) {162; CHECK-LABEL: whilehs_s_ww:163; CHECK:       // %bb.0:164; CHECK-NEXT:    whilels p0.s, w1, w0165; CHECK-NEXT:    rev p0.s, p0.s166; CHECK-NEXT:    ret167  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i32(i32 %b, i32 %a)168  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)169  ret <vscale x 4 x i1> %while.rev170}171 172; Cannot invert the while predicate when %a is MAX_UINT.173define <vscale x 4 x i1> @whilehs_s_xx(i64 %a, i64 %b) {174; CHECK-LABEL: whilehs_s_xx:175; CHECK:       // %bb.0:176; CHECK-NEXT:    whilels p0.s, x1, x0177; CHECK-NEXT:    rev p0.s, p0.s178; CHECK-NEXT:    ret179  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i64(i64 %b, i64 %a)180  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)181  ret <vscale x 4 x i1> %while.rev182}183 184; Cannot invert the while predicate when %a is MAX_UINT.185define <vscale x 2 x i1> @whilehs_d_ww(i32 %a, i32 %b) {186; CHECK-LABEL: whilehs_d_ww:187; CHECK:       // %bb.0:188; CHECK-NEXT:    whilels p0.d, w1, w0189; CHECK-NEXT:    rev p0.d, p0.d190; CHECK-NEXT:    ret191  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i32(i32 %b, i32 %a)192  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)193  ret <vscale x 2 x i1> %while.rev194}195 196; Cannot invert the while predicate when %a is MAX_UINT.197define <vscale x 2 x i1> @whilehs_d_xx(i64 %a, i64 %b) {198; CHECK-LABEL: whilehs_d_xx:199; CHECK:       // %bb.0:200; CHECK-NEXT:    whilels p0.d, x1, x0201; CHECK-NEXT:    rev p0.d, p0.d202; CHECK-NEXT:    ret203  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i64(i64 %b, i64 %a)204  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)205  ret <vscale x 2 x i1> %while.rev206}207 208;209; WHILEGT210;211 212define <vscale x 16 x i1> @whilegt_b_ww(i32 %a, i32 %b) {213; CHECK-LABEL: whilegt_b_ww:214; CHECK:       // %bb.0:215; CHECK-NEXT:    whilegt p0.b, w0, w1216; CHECK-NEXT:    ret217  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i32(i32 %b, i32 %a)218  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)219  ret <vscale x 16 x i1> %while.rev220}221 222define <vscale x 16 x i1> @whilegt_b_xx(i64 %a, i64 %b) {223; CHECK-LABEL: whilegt_b_xx:224; CHECK:       // %bb.0:225; CHECK-NEXT:    whilegt p0.b, x0, x1226; CHECK-NEXT:    ret227  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 %b, i64 %a)228  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)229  ret <vscale x 16 x i1> %while.rev230}231 232define <vscale x 8 x i1> @whilegt_h_ww(i32 %a, i32 %b) {233; CHECK-LABEL: whilegt_h_ww:234; CHECK:       // %bb.0:235; CHECK-NEXT:    whilegt p0.h, w0, w1236; CHECK-NEXT:    ret237  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i32(i32 %b, i32 %a)238  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)239  ret <vscale x 8 x i1> %while.rev240}241 242define <vscale x 8 x i1> @whilegt_h_xx(i64 %a, i64 %b) {243; CHECK-LABEL: whilegt_h_xx:244; CHECK:       // %bb.0:245; CHECK-NEXT:    whilegt p0.h, x0, x1246; CHECK-NEXT:    ret247  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i64(i64 %b, i64 %a)248  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)249  ret <vscale x 8 x i1> %while.rev250}251 252define <vscale x 4 x i1> @whilegt_s_ww(i32 %a, i32 %b) {253; CHECK-LABEL: whilegt_s_ww:254; CHECK:       // %bb.0:255; CHECK-NEXT:    whilegt p0.s, w0, w1256; CHECK-NEXT:    ret257  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i32(i32 %b, i32 %a)258  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)259  ret <vscale x 4 x i1> %while.rev260}261 262define <vscale x 4 x i1> @whilegt_s_xx(i64 %a, i64 %b) {263; CHECK-LABEL: whilegt_s_xx:264; CHECK:       // %bb.0:265; CHECK-NEXT:    whilegt p0.s, x0, x1266; CHECK-NEXT:    ret267  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i64(i64 %b, i64 %a)268  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)269  ret <vscale x 4 x i1> %while.rev270}271 272define <vscale x 2 x i1> @whilegt_d_ww(i32 %a, i32 %b) {273; CHECK-LABEL: whilegt_d_ww:274; CHECK:       // %bb.0:275; CHECK-NEXT:    whilegt p0.d, w0, w1276; CHECK-NEXT:    ret277  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i32(i32 %b, i32 %a)278  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)279  ret <vscale x 2 x i1> %while.rev280}281 282define <vscale x 2 x i1> @whilegt_d_xx(i64 %a, i64 %b) {283; CHECK-LABEL: whilegt_d_xx:284; CHECK:       // %bb.0:285; CHECK-NEXT:    whilegt p0.d, x0, x1286; CHECK-NEXT:    ret287  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i64(i64 %b, i64 %a)288  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)289  ret <vscale x 2 x i1> %while.rev290}291 292;293; WHILEHI294;295 296define <vscale x 16 x i1> @whilehi_b_ww(i32 %a, i32 %b) {297; CHECK-LABEL: whilehi_b_ww:298; CHECK:       // %bb.0:299; CHECK-NEXT:    whilehi p0.b, w0, w1300; CHECK-NEXT:    ret301  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32 %b, i32 %a)302  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)303  ret <vscale x 16 x i1> %while.rev304}305 306define <vscale x 16 x i1> @whilehi_b_xx(i64 %a, i64 %b) {307; CHECK-LABEL: whilehi_b_xx:308; CHECK:       // %bb.0:309; CHECK-NEXT:    whilehi p0.b, x0, x1310; CHECK-NEXT:    ret311  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 %b, i64 %a)312  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)313  ret <vscale x 16 x i1> %while.rev314}315 316define <vscale x 8 x i1> @whilehi_h_ww(i32 %a, i32 %b) {317; CHECK-LABEL: whilehi_h_ww:318; CHECK:       // %bb.0:319; CHECK-NEXT:    whilehi p0.h, w0, w1320; CHECK-NEXT:    ret321  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i32(i32 %b, i32 %a)322  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)323  ret <vscale x 8 x i1> %while.rev324}325 326define <vscale x 8 x i1> @whilehi_h_xx(i64 %a, i64 %b) {327; CHECK-LABEL: whilehi_h_xx:328; CHECK:       // %bb.0:329; CHECK-NEXT:    whilehi p0.h, x0, x1330; CHECK-NEXT:    ret331  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i64(i64 %b, i64 %a)332  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)333  ret <vscale x 8 x i1> %while.rev334}335 336define <vscale x 4 x i1> @whilehi_s_ww(i32 %a, i32 %b) {337; CHECK-LABEL: whilehi_s_ww:338; CHECK:       // %bb.0:339; CHECK-NEXT:    whilehi p0.s, w0, w1340; CHECK-NEXT:    ret341  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i32(i32 %b, i32 %a)342  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)343  ret <vscale x 4 x i1> %while.rev344}345 346define <vscale x 4 x i1> @whilehi_s_xx(i64 %a, i64 %b) {347; CHECK-LABEL: whilehi_s_xx:348; CHECK:       // %bb.0:349; CHECK-NEXT:    whilehi p0.s, x0, x1350; CHECK-NEXT:    ret351  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i64(i64 %b, i64 %a)352  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)353  ret <vscale x 4 x i1> %while.rev354}355 356define <vscale x 2 x i1> @whilehi_d_ww(i32 %a, i32 %b) {357; CHECK-LABEL: whilehi_d_ww:358; CHECK:       // %bb.0:359; CHECK-NEXT:    whilehi p0.d, w0, w1360; CHECK-NEXT:    ret361  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i32(i32 %b, i32 %a)362  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)363  ret <vscale x 2 x i1> %while.rev364}365 366define <vscale x 2 x i1> @whilehi_d_xx(i64 %a, i64 %b) {367; CHECK-LABEL: whilehi_d_xx:368; CHECK:       // %bb.0:369; CHECK-NEXT:    whilehi p0.d, x0, x1370; CHECK-NEXT:    ret371  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64 %b, i64 %a)372  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)373  ret <vscale x 2 x i1> %while.rev374}375 376;377; WHILELE378;379 380; Cannot invert the while predicate when %a is MIN_INT.381define <vscale x 16 x i1> @whilele_b_ww(i32 %a, i32 %b) {382; CHECK-LABEL: whilele_b_ww:383; CHECK:       // %bb.0:384; CHECK-NEXT:    whilege p0.b, w1, w0385; CHECK-NEXT:    rev p0.b, p0.b386; CHECK-NEXT:    ret387  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilege.nxv16i1.i32(i32 %b, i32 %a)388  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)389  ret <vscale x 16 x i1> %while.rev390}391 392; Cannot invert the while predicate when %a is MIN_INT.393define <vscale x 16 x i1> @whilele_b_xx(i64 %a, i64 %b) {394; CHECK-LABEL: whilele_b_xx:395; CHECK:       // %bb.0:396; CHECK-NEXT:    whilege p0.b, x1, x0397; CHECK-NEXT:    rev p0.b, p0.b398; CHECK-NEXT:    ret399  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilege.nxv16i1.i64(i64 %b, i64 %a)400  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)401  ret <vscale x 16 x i1> %while.rev402}403 404; Cannot invert the while predicate when %a is MIN_INT.405define <vscale x 8 x i1> @whilele_h_ww(i32 %a, i32 %b) {406; CHECK-LABEL: whilele_h_ww:407; CHECK:       // %bb.0:408; CHECK-NEXT:    whilege p0.h, w1, w0409; CHECK-NEXT:    rev p0.h, p0.h410; CHECK-NEXT:    ret411  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilege.nxv8i1.i32(i32 %b, i32 %a)412  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)413  ret <vscale x 8 x i1> %while.rev414}415 416; Cannot invert the while predicate when %a is MIN_INT.417define <vscale x 8 x i1> @whilele_h_xx(i64 %a, i64 %b) {418; CHECK-LABEL: whilele_h_xx:419; CHECK:       // %bb.0:420; CHECK-NEXT:    whilege p0.h, x1, x0421; CHECK-NEXT:    rev p0.h, p0.h422; CHECK-NEXT:    ret423  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilege.nxv8i1.i64(i64 %b, i64 %a)424  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)425  ret <vscale x 8 x i1> %while.rev426}427 428; Cannot invert the while predicate when %a is MIN_INT.429define <vscale x 4 x i1> @whilele_s_ww(i32 %a, i32 %b) {430; CHECK-LABEL: whilele_s_ww:431; CHECK:       // %bb.0:432; CHECK-NEXT:    whilege p0.s, w1, w0433; CHECK-NEXT:    rev p0.s, p0.s434; CHECK-NEXT:    ret435  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilege.nxv4i1.i32(i32 %b, i32 %a)436  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)437  ret <vscale x 4 x i1> %while.rev438}439 440; Cannot invert the while predicate when %a is MIN_INT.441define <vscale x 4 x i1> @whilele_s_xx(i64 %a, i64 %b) {442; CHECK-LABEL: whilele_s_xx:443; CHECK:       // %bb.0:444; CHECK-NEXT:    whilege p0.s, x1, x0445; CHECK-NEXT:    rev p0.s, p0.s446; CHECK-NEXT:    ret447  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilege.nxv4i1.i64(i64 %b, i64 %a)448  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)449  ret <vscale x 4 x i1> %while.rev450}451 452; Cannot invert the while predicate when %a is MIN_INT.453define <vscale x 2 x i1> @whilele_d_ww(i32 %a, i32 %b) {454; CHECK-LABEL: whilele_d_ww:455; CHECK:       // %bb.0:456; CHECK-NEXT:    whilege p0.d, w1, w0457; CHECK-NEXT:    rev p0.d, p0.d458; CHECK-NEXT:    ret459  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilege.nxv2i1.i32(i32 %b, i32 %a)460  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)461  ret <vscale x 2 x i1> %while.rev462}463 464; Cannot invert the while predicate when %a is MIN_INT.465define <vscale x 2 x i1> @whilele_d_xx(i64 %a, i64 %b) {466; CHECK-LABEL: whilele_d_xx:467; CHECK:       // %bb.0:468; CHECK-NEXT:    whilege p0.d, x1, x0469; CHECK-NEXT:    rev p0.d, p0.d470; CHECK-NEXT:    ret471  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilege.nxv2i1.i64(i64 %b, i64 %a)472  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)473  ret <vscale x 2 x i1> %while.rev474}475 476;477; WHILELO478;479 480define <vscale x 16 x i1> @whilelo_b_ww(i32 %a, i32 %b) {481; CHECK-LABEL: whilelo_b_ww:482; CHECK:       // %bb.0:483; CHECK-NEXT:    whilelo p0.b, w0, w1484; CHECK-NEXT:    ret485  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilehi.nxv16i1.i32(i32 %b, i32 %a)486  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)487  ret <vscale x 16 x i1> %while.rev488}489 490define <vscale x 16 x i1> @whilelo_b_xx(i64 %a, i64 %b) {491; CHECK-LABEL: whilelo_b_xx:492; CHECK:       // %bb.0:493; CHECK-NEXT:    whilelo p0.b, x0, x1494; CHECK-NEXT:    ret495  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilehi.nxv16i1.i64(i64 %b, i64 %a)496  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)497  ret <vscale x 16 x i1> %while.rev498}499 500define <vscale x 8 x i1> @whilelo_h_ww(i32 %a, i32 %b) {501; CHECK-LABEL: whilelo_h_ww:502; CHECK:       // %bb.0:503; CHECK-NEXT:    whilelo p0.h, w0, w1504; CHECK-NEXT:    ret505  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilehi.nxv8i1.i32(i32 %b, i32 %a)506  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)507  ret <vscale x 8 x i1> %while.rev508}509 510define <vscale x 8 x i1> @whilelo_h_xx(i64 %a, i64 %b) {511; CHECK-LABEL: whilelo_h_xx:512; CHECK:       // %bb.0:513; CHECK-NEXT:    whilelo p0.h, x0, x1514; CHECK-NEXT:    ret515  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilehi.nxv8i1.i64(i64 %b, i64 %a)516  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)517  ret <vscale x 8 x i1> %while.rev518}519 520define <vscale x 4 x i1> @whilelo_s_ww(i32 %a, i32 %b) {521; CHECK-LABEL: whilelo_s_ww:522; CHECK:       // %bb.0:523; CHECK-NEXT:    whilelo p0.s, w0, w1524; CHECK-NEXT:    ret525  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilehi.nxv4i1.i32(i32 %b, i32 %a)526  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)527  ret <vscale x 4 x i1> %while.rev528}529 530define <vscale x 4 x i1> @whilelo_s_xx(i64 %a, i64 %b) {531; CHECK-LABEL: whilelo_s_xx:532; CHECK:       // %bb.0:533; CHECK-NEXT:    whilelo p0.s, x0, x1534; CHECK-NEXT:    ret535  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilehi.nxv4i1.i64(i64 %b, i64 %a)536  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)537  ret <vscale x 4 x i1> %while.rev538}539 540define <vscale x 2 x i1> @whilelo_d_ww(i32 %a, i32 %b) {541; CHECK-LABEL: whilelo_d_ww:542; CHECK:       // %bb.0:543; CHECK-NEXT:    whilelo p0.d, w0, w1544; CHECK-NEXT:    ret545  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilehi.nxv2i1.i32(i32 %b, i32 %a)546  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)547  ret <vscale x 2 x i1> %while.rev548}549 550define <vscale x 2 x i1> @whilelo_d_xx(i64 %a, i64 %b) {551; CHECK-LABEL: whilelo_d_xx:552; CHECK:       // %bb.0:553; CHECK-NEXT:    whilelo p0.d, x0, x1554; CHECK-NEXT:    ret555  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilehi.nxv2i1.i64(i64 %b, i64 %a)556  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)557  ret <vscale x 2 x i1> %while.rev558}559 560;561; WHILELS562;563 564; Cannot invert the while predicate when %a is MIN_UINT.565define <vscale x 16 x i1> @whilels_b_ww(i32 %a, i32 %b) {566; CHECK-LABEL: whilels_b_ww:567; CHECK:       // %bb.0:568; CHECK-NEXT:    whilehs p0.b, w1, w0569; CHECK-NEXT:    rev p0.b, p0.b570; CHECK-NEXT:    ret571  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilehs.nxv16i1.i32(i32 %b, i32 %a)572  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)573  ret <vscale x 16 x i1> %while.rev574}575 576; Cannot invert the while predicate when %a is MIN_UINT.577define <vscale x 16 x i1> @whilels_b_xx(i64 %a, i64 %b) {578; CHECK-LABEL: whilels_b_xx:579; CHECK:       // %bb.0:580; CHECK-NEXT:    whilehs p0.b, x1, x0581; CHECK-NEXT:    rev p0.b, p0.b582; CHECK-NEXT:    ret583  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilehs.nxv16i1.i64(i64 %b, i64 %a)584  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)585  ret <vscale x 16 x i1> %while.rev586}587 588; Cannot invert the while predicate when %a is MIN_UINT.589define <vscale x 8 x i1> @whilels_h_ww(i32 %a, i32 %b) {590; CHECK-LABEL: whilels_h_ww:591; CHECK:       // %bb.0:592; CHECK-NEXT:    whilehs p0.h, w1, w0593; CHECK-NEXT:    rev p0.h, p0.h594; CHECK-NEXT:    ret595  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilehs.nxv8i1.i32(i32 %b, i32 %a)596  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)597  ret <vscale x 8 x i1> %while.rev598}599 600; Cannot invert the while predicate when %a is MIN_UINT.601define <vscale x 8 x i1> @whilels_h_xx(i64 %a, i64 %b) {602; CHECK-LABEL: whilels_h_xx:603; CHECK:       // %bb.0:604; CHECK-NEXT:    whilehs p0.h, x1, x0605; CHECK-NEXT:    rev p0.h, p0.h606; CHECK-NEXT:    ret607  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilehs.nxv8i1.i64(i64 %b, i64 %a)608  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)609  ret <vscale x 8 x i1> %while.rev610}611 612; Cannot invert the while predicate when %a is MIN_UINT.613define <vscale x 4 x i1> @whilels_s_ww(i32 %a, i32 %b) {614; CHECK-LABEL: whilels_s_ww:615; CHECK:       // %bb.0:616; CHECK-NEXT:    whilehs p0.s, w1, w0617; CHECK-NEXT:    rev p0.s, p0.s618; CHECK-NEXT:    ret619  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilehs.nxv4i1.i32(i32 %b, i32 %a)620  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)621  ret <vscale x 4 x i1> %while.rev622}623 624; Cannot invert the while predicate when %a is MIN_UINT.625define <vscale x 4 x i1> @whilels_s_xx(i64 %a, i64 %b) {626; CHECK-LABEL: whilels_s_xx:627; CHECK:       // %bb.0:628; CHECK-NEXT:    whilehs p0.s, x1, x0629; CHECK-NEXT:    rev p0.s, p0.s630; CHECK-NEXT:    ret631  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilehs.nxv4i1.i64(i64 %b, i64 %a)632  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)633  ret <vscale x 4 x i1> %while.rev634}635 636; Cannot invert the while predicate when %a is MIN_UINT.637define <vscale x 2 x i1> @whilels_d_ww(i32 %a, i32 %b) {638; CHECK-LABEL: whilels_d_ww:639; CHECK:       // %bb.0:640; CHECK-NEXT:    whilehs p0.d, w1, w0641; CHECK-NEXT:    rev p0.d, p0.d642; CHECK-NEXT:    ret643  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilehs.nxv2i1.i32(i32 %b, i32 %a)644  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)645  ret <vscale x 2 x i1> %while.rev646}647 648; Cannot invert the while predicate when %a is MIN_UINT.649define <vscale x 2 x i1> @whilels_d_xx(i64 %a, i64 %b) {650; CHECK-LABEL: whilels_d_xx:651; CHECK:       // %bb.0:652; CHECK-NEXT:    whilehs p0.d, x1, x0653; CHECK-NEXT:    rev p0.d, p0.d654; CHECK-NEXT:    ret655  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilehs.nxv2i1.i64(i64 %b, i64 %a)656  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)657  ret <vscale x 2 x i1> %while.rev658}659 660;661; WHILELT662;663 664define <vscale x 16 x i1> @whilelt_b_ww(i32 %a, i32 %b) {665; CHECK-LABEL: whilelt_b_ww:666; CHECK:       // %bb.0:667; CHECK-NEXT:    whilelt p0.b, w0, w1668; CHECK-NEXT:    ret669  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilegt.nxv16i1.i32(i32 %b, i32 %a)670  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)671  ret <vscale x 16 x i1> %while.rev672}673 674define <vscale x 16 x i1> @whilelt_b_xx(i64 %a, i64 %b) {675; CHECK-LABEL: whilelt_b_xx:676; CHECK:       // %bb.0:677; CHECK-NEXT:    whilelt p0.b, x0, x1678; CHECK-NEXT:    ret679  %while = call <vscale x 16 x i1> @llvm.aarch64.sve.whilegt.nxv16i1.i64(i64 %b, i64 %a)680  %while.rev = call <vscale x 16 x i1> @llvm.vector.reverse.nxv16i1(<vscale x 16 x i1> %while)681  ret <vscale x 16 x i1> %while.rev682}683 684define <vscale x 8 x i1> @whilelt_h_ww(i32 %a, i32 %b) {685; CHECK-LABEL: whilelt_h_ww:686; CHECK:       // %bb.0:687; CHECK-NEXT:    whilelt p0.h, w0, w1688; CHECK-NEXT:    ret689  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilegt.nxv8i1.i32(i32 %b, i32 %a)690  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)691  ret <vscale x 8 x i1> %while.rev692}693 694define <vscale x 8 x i1> @whilelt_h_xx(i64 %a, i64 %b) {695; CHECK-LABEL: whilelt_h_xx:696; CHECK:       // %bb.0:697; CHECK-NEXT:    whilelt p0.h, x0, x1698; CHECK-NEXT:    ret699  %while = call <vscale x 8 x i1> @llvm.aarch64.sve.whilegt.nxv8i1.i64(i64 %b, i64 %a)700  %while.rev = call <vscale x 8 x i1> @llvm.vector.reverse.nxv8i1(<vscale x 8 x i1> %while)701  ret <vscale x 8 x i1> %while.rev702}703 704define <vscale x 4 x i1> @whilelt_s_ww(i32 %a, i32 %b) {705; CHECK-LABEL: whilelt_s_ww:706; CHECK:       // %bb.0:707; CHECK-NEXT:    whilelt p0.s, w0, w1708; CHECK-NEXT:    ret709  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilegt.nxv4i1.i32(i32 %b, i32 %a)710  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)711  ret <vscale x 4 x i1> %while.rev712}713 714define <vscale x 4 x i1> @whilelt_s_xx(i64 %a, i64 %b) {715; CHECK-LABEL: whilelt_s_xx:716; CHECK:       // %bb.0:717; CHECK-NEXT:    whilelt p0.s, x0, x1718; CHECK-NEXT:    ret719  %while = call <vscale x 4 x i1> @llvm.aarch64.sve.whilegt.nxv4i1.i64(i64 %b, i64 %a)720  %while.rev = call <vscale x 4 x i1> @llvm.vector.reverse.nxv4i1(<vscale x 4 x i1> %while)721  ret <vscale x 4 x i1> %while.rev722}723 724define <vscale x 2 x i1> @whilelt_d_ww(i32 %a, i32 %b) {725; CHECK-LABEL: whilelt_d_ww:726; CHECK:       // %bb.0:727; CHECK-NEXT:    whilelt p0.d, w0, w1728; CHECK-NEXT:    ret729  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilegt.nxv2i1.i32(i32 %b, i32 %a)730  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)731  ret <vscale x 2 x i1> %while.rev732}733 734define <vscale x 2 x i1> @whilelt_d_xx(i64 %a, i64 %b) {735; CHECK-LABEL: whilelt_d_xx:736; CHECK:       // %bb.0:737; CHECK-NEXT:    whilelt p0.d, x0, x1738; CHECK-NEXT:    ret739  %while = call <vscale x 2 x i1> @llvm.aarch64.sve.whilegt.nxv2i1.i64(i64 %b, i64 %a)740  %while.rev = call <vscale x 2 x i1> @llvm.vector.reverse.nxv2i1(<vscale x 2 x i1> %while)741  ret <vscale x 2 x i1> %while.rev742}743