brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.5 KiB · 811a29c Raw
680 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4declare i32 @llvm.riscv.vsetvlimax.i32(i32, i32)5declare i64 @llvm.riscv.vsetvlimax.i64(i64, i64)6 7define i32 @vsetvlimax_i32() nounwind #0 {8; CHECK-LABEL: @vsetvlimax_i32(9; CHECK-NEXT:  entry:10; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @llvm.riscv.vsetvlimax.i32(i32 1, i32 1)11; CHECK-NEXT:    ret i32 [[TMP0]]12;13entry:14  %0 = call i32 @llvm.riscv.vsetvlimax.i32(i32 1, i32 1)15  %1 = and i32 %0, 214748364716  ret i32 %117}18 19define i64 @vsetvlimax_sext_i64() nounwind #0 {20; CHECK-LABEL: @vsetvlimax_sext_i64(21; CHECK-NEXT:  entry:22; CHECK-NEXT:    [[TMP0:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)23; CHECK-NEXT:    ret i64 [[TMP0]]24;25entry:26  %0 = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)27  %1 = trunc i64 %0 to i3228  %2 = sext i32 %1 to i6429  ret i64 %230}31 32define i64 @vsetvlimax_zext_i64() nounwind #0 {33; CHECK-LABEL: @vsetvlimax_zext_i64(34; CHECK-NEXT:  entry:35; CHECK-NEXT:    [[TMP0:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)36; CHECK-NEXT:    ret i64 [[TMP0]]37;38entry:39  %0 = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)40  %1 = trunc i64 %0 to i3241  %2 = zext i32 %1 to i6442  ret i64 %243}44 45define signext i32 @vsetvlmax_sext() nounwind #0 {46; CHECK-LABEL: @vsetvlmax_sext(47; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)48; CHECK-NEXT:    [[B:%.*]] = trunc nuw nsw i64 [[A]] to i3249; CHECK-NEXT:    ret i32 [[B]]50;51  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 1)52  %b = trunc i64 %a to i3253  ret i32 %b54}55 56define zeroext i32 @vsetvlmax_zext() nounwind #0 {57; CHECK-LABEL: @vsetvlmax_zext(58; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)59; CHECK-NEXT:    [[B:%.*]] = trunc nuw nsw i64 [[A]] to i3260; CHECK-NEXT:    ret i32 [[B]]61;62  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 1)63  %b = trunc i64 %a to i3264  ret i32 %b65}66 67define i32 @vsetvlimax_and17_i32() nounwind #0 {68; CHECK-LABEL: @vsetvlimax_and17_i32(69; CHECK-NEXT:  entry:70; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @llvm.riscv.vsetvlimax.i32(i32 1, i32 1)71; CHECK-NEXT:    ret i32 [[TMP0]]72;73entry:74  %0 = call i32 @llvm.riscv.vsetvlimax.i32(i32 1, i32 1)75  %1 = and i32 %0, 13107176  ret i32 %177}78 79define i64 @vsetvlimax_and17_i64() nounwind #0 {80; CHECK-LABEL: @vsetvlimax_and17_i64(81; CHECK-NEXT:  entry:82; CHECK-NEXT:    [[TMP0:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)83; CHECK-NEXT:    ret i64 [[TMP0]]84;85entry:86  %0 = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)87  %1 = and i64 %0, 13107188  ret i64 %189}90 91define i64 @vsetvlmax_e8m1_and14bits() nounwind #0 {92; CHECK-LABEL: @vsetvlmax_e8m1_and14bits(93; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 0)94; CHECK-NEXT:    ret i64 [[A]]95;96  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 0)97  %b = and i64 %a, 1638398  ret i64 %b99}100 101define i64 @vsetvlmax_e8m1_and13bits() nounwind #0 {102; CHECK-LABEL: @vsetvlmax_e8m1_and13bits(103; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 0)104; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 8191105; CHECK-NEXT:    ret i64 [[B]]106;107  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 0)108  %b = and i64 %a, 8191109  ret i64 %b110}111 112define i64 @vsetvlmax_e8m2_and15bits() nounwind #0 {113; CHECK-LABEL: @vsetvlmax_e8m2_and15bits(114; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 1)115; CHECK-NEXT:    ret i64 [[A]]116;117  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 1)118  %b = and i64 %a, 32767119  ret i64 %b120}121 122define i64 @vsetvlmax_e8m2_and14bits() nounwind #0 {123; CHECK-LABEL: @vsetvlmax_e8m2_and14bits(124; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 1)125; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 16383126; CHECK-NEXT:    ret i64 [[B]]127;128  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 1)129  %b = and i64 %a, 16383130  ret i64 %b131}132 133define i64 @vsetvlmax_e8m4_and16bits() nounwind #0 {134; CHECK-LABEL: @vsetvlmax_e8m4_and16bits(135; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 2)136; CHECK-NEXT:    ret i64 [[A]]137;138  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 2)139  %b = and i64 %a, 65535140  ret i64 %b141}142 143define i64 @vsetvlmax_e8m4_and15bits() nounwind #0 {144; CHECK-LABEL: @vsetvlmax_e8m4_and15bits(145; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 2)146; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 32767147; CHECK-NEXT:    ret i64 [[B]]148;149  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 2)150  %b = and i64 %a, 32767151  ret i64 %b152}153 154define i64 @vsetvlmax_e8m8_and17bits() nounwind #0 {155; CHECK-LABEL: @vsetvlmax_e8m8_and17bits(156; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 3)157; CHECK-NEXT:    ret i64 [[A]]158;159  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 3)160  %b = and i64 %a, 131071161  ret i64 %b162}163 164define i64 @vsetvlmax_e8m8_and16bits() nounwind #0 {165; CHECK-LABEL: @vsetvlmax_e8m8_and16bits(166; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 3)167; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 65535168; CHECK-NEXT:    ret i64 [[B]]169;170  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 3)171  %b = and i64 %a, 65535172  ret i64 %b173}174 175define i64 @vsetvlmax_e8mf2_and11bits() nounwind #0 {176; CHECK-LABEL: @vsetvlmax_e8mf2_and11bits(177; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 5)178; CHECK-NEXT:    ret i64 [[A]]179;180  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 5)181  %b = and i64 %a, 2047182  ret i64 %b183}184 185define i64 @vsetvlmax_e8mf2_and10bits() nounwind #0 {186; CHECK-LABEL: @vsetvlmax_e8mf2_and10bits(187; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 5)188; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 1023189; CHECK-NEXT:    ret i64 [[B]]190;191  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 5)192  %b = and i64 %a, 1023193  ret i64 %b194}195 196define i64 @vsetvlmax_e8mf4_and12bits() nounwind #0 {197; CHECK-LABEL: @vsetvlmax_e8mf4_and12bits(198; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 6)199; CHECK-NEXT:    ret i64 [[A]]200;201  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 6)202  %b = and i64 %a, 4095203  ret i64 %b204}205 206define i64 @vsetvlmax_e8mf4_and11bits() nounwind #0 {207; CHECK-LABEL: @vsetvlmax_e8mf4_and11bits(208; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 6)209; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 2047210; CHECK-NEXT:    ret i64 [[B]]211;212  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 6)213  %b = and i64 %a, 2047214  ret i64 %b215}216 217define i64 @vsetvlmax_e8mf8_and13bits() nounwind #0 {218; CHECK-LABEL: @vsetvlmax_e8mf8_and13bits(219; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 7)220; CHECK-NEXT:    ret i64 [[A]]221;222  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 7)223  %b = and i64 %a, 8191224  ret i64 %b225}226 227define i64 @vsetvlmax_e8mf8_and12bits() nounwind #0 {228; CHECK-LABEL: @vsetvlmax_e8mf8_and12bits(229; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 0, i64 7)230; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 4095231; CHECK-NEXT:    ret i64 [[B]]232;233  %a = call i64 @llvm.riscv.vsetvlimax(i64 0, i64 7)234  %b = and i64 %a, 4095235  ret i64 %b236}237 238define i64 @vsetvlmax_e16m1_and13bits() nounwind #0 {239; CHECK-LABEL: @vsetvlmax_e16m1_and13bits(240; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 0)241; CHECK-NEXT:    ret i64 [[A]]242;243  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 0)244  %b = and i64 %a, 8191245  ret i64 %b246}247 248define i64 @vsetvlmax_e16m1_and12bits() nounwind #0 {249; CHECK-LABEL: @vsetvlmax_e16m1_and12bits(250; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 0)251; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 4095252; CHECK-NEXT:    ret i64 [[B]]253;254  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 0)255  %b = and i64 %a, 4095256  ret i64 %b257}258 259define i64 @vsetvlmax_e16m2_and14bits() nounwind #0 {260; CHECK-LABEL: @vsetvlmax_e16m2_and14bits(261; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)262; CHECK-NEXT:    ret i64 [[A]]263;264  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 1)265  %b = and i64 %a, 16383266  ret i64 %b267}268 269define i64 @vsetvlmax_e16m2_and13bits() nounwind #0 {270; CHECK-LABEL: @vsetvlmax_e16m2_and13bits(271; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 1)272; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 8191273; CHECK-NEXT:    ret i64 [[B]]274;275  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 1)276  %b = and i64 %a, 8191277  ret i64 %b278}279 280define i64 @vsetvlmax_e16m4_and15bits() nounwind #0 {281; CHECK-LABEL: @vsetvlmax_e16m4_and15bits(282; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 2)283; CHECK-NEXT:    ret i64 [[A]]284;285  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 2)286  %b = and i64 %a, 32767287  ret i64 %b288}289 290define i64 @vsetvlmax_e16m4_and14bits() nounwind #0 {291; CHECK-LABEL: @vsetvlmax_e16m4_and14bits(292; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 2)293; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 16383294; CHECK-NEXT:    ret i64 [[B]]295;296  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 2)297  %b = and i64 %a, 16383298  ret i64 %b299}300 301define i64 @vsetvlmax_e16m8_and16bits() nounwind #0 {302; CHECK-LABEL: @vsetvlmax_e16m8_and16bits(303; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 3)304; CHECK-NEXT:    ret i64 [[A]]305;306  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 3)307  %b = and i64 %a, 65535308  ret i64 %b309}310 311define i64 @vsetvlmax_e16m8_and15bits() nounwind #0 {312; CHECK-LABEL: @vsetvlmax_e16m8_and15bits(313; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 3)314; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 32767315; CHECK-NEXT:    ret i64 [[B]]316;317  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 3)318  %b = and i64 %a, 32767319  ret i64 %b320}321 322define i64 @vsetvlmax_e16mf2_and10bits() nounwind #0 {323; CHECK-LABEL: @vsetvlmax_e16mf2_and10bits(324; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 5)325; CHECK-NEXT:    ret i64 [[A]]326;327  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 5)328  %b = and i64 %a, 1023329  ret i64 %b330}331 332define i64 @vsetvlmax_e16mf2_and9bits() nounwind #0 {333; CHECK-LABEL: @vsetvlmax_e16mf2_and9bits(334; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 5)335; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 511336; CHECK-NEXT:    ret i64 [[B]]337;338  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 5)339  %b = and i64 %a, 511340  ret i64 %b341}342 343define i64 @vsetvlmax_e16mf4_and11bits() nounwind #0 {344; CHECK-LABEL: @vsetvlmax_e16mf4_and11bits(345; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 6)346; CHECK-NEXT:    ret i64 [[A]]347;348  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 6)349  %b = and i64 %a, 2047350  ret i64 %b351}352 353define i64 @vsetvlmax_e16mf4_and10bits() nounwind #0 {354; CHECK-LABEL: @vsetvlmax_e16mf4_and10bits(355; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 6)356; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 1023357; CHECK-NEXT:    ret i64 [[B]]358;359  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 6)360  %b = and i64 %a, 1023361  ret i64 %b362}363 364define i64 @vsetvlmax_e16mf8_and12bits() nounwind #0 {365; CHECK-LABEL: @vsetvlmax_e16mf8_and12bits(366; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 7)367; CHECK-NEXT:    ret i64 [[A]]368;369  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 7)370  %b = and i64 %a, 4095371  ret i64 %b372}373 374define i64 @vsetvlmax_e16mf8_and11bits() nounwind #0 {375; CHECK-LABEL: @vsetvlmax_e16mf8_and11bits(376; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 1, i64 7)377; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 2047378; CHECK-NEXT:    ret i64 [[B]]379;380  %a = call i64 @llvm.riscv.vsetvlimax(i64 1, i64 7)381  %b = and i64 %a, 2047382  ret i64 %b383}384 385define i64 @vsetvlmax_e32m1_and12bits() nounwind #0 {386; CHECK-LABEL: @vsetvlmax_e32m1_and12bits(387; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 0)388; CHECK-NEXT:    ret i64 [[A]]389;390  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 0)391  %b = and i64 %a, 4095392  ret i64 %b393}394 395define i64 @vsetvlmax_e32m1_and11bits() nounwind #0 {396; CHECK-LABEL: @vsetvlmax_e32m1_and11bits(397; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 0)398; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 2047399; CHECK-NEXT:    ret i64 [[B]]400;401  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 0)402  %b = and i64 %a, 2047403  ret i64 %b404}405 406define i64 @vsetvlmax_e32m2_and13bits() nounwind #0 {407; CHECK-LABEL: @vsetvlmax_e32m2_and13bits(408; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 1)409; CHECK-NEXT:    ret i64 [[A]]410;411  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 1)412  %b = and i64 %a, 8191413  ret i64 %b414}415 416define i64 @vsetvlmax_e32m2_and12bits() nounwind #0 {417; CHECK-LABEL: @vsetvlmax_e32m2_and12bits(418; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 1)419; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 4095420; CHECK-NEXT:    ret i64 [[B]]421;422  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 1)423  %b = and i64 %a, 4095424  ret i64 %b425}426 427define i64 @vsetvlmax_e32m4_and14bits() nounwind #0 {428; CHECK-LABEL: @vsetvlmax_e32m4_and14bits(429; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 2)430; CHECK-NEXT:    ret i64 [[A]]431;432  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 2)433  %b = and i64 %a, 16383434  ret i64 %b435}436 437define i64 @vsetvlmax_e32m4_and13bits() nounwind #0 {438; CHECK-LABEL: @vsetvlmax_e32m4_and13bits(439; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 2)440; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 8191441; CHECK-NEXT:    ret i64 [[B]]442;443  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 2)444  %b = and i64 %a, 8191445  ret i64 %b446}447 448define i64 @vsetvlmax_e32m8_and15bits() nounwind #0 {449; CHECK-LABEL: @vsetvlmax_e32m8_and15bits(450; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 3)451; CHECK-NEXT:    ret i64 [[A]]452;453  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 3)454  %b = and i64 %a, 32767455  ret i64 %b456}457 458define i64 @vsetvlmax_e32m8_and14bits() nounwind #0 {459; CHECK-LABEL: @vsetvlmax_e32m8_and14bits(460; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 3)461; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 16383462; CHECK-NEXT:    ret i64 [[B]]463;464  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 3)465  %b = and i64 %a, 16383466  ret i64 %b467}468 469define i64 @vsetvlmax_e32mf2_and9bits() nounwind #0 {470; CHECK-LABEL: @vsetvlmax_e32mf2_and9bits(471; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 5)472; CHECK-NEXT:    ret i64 [[A]]473;474  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 5)475  %b = and i64 %a, 511476  ret i64 %b477}478 479define i64 @vsetvlmax_e32mf2_and8bits() nounwind #0 {480; CHECK-LABEL: @vsetvlmax_e32mf2_and8bits(481; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 5)482; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 255483; CHECK-NEXT:    ret i64 [[B]]484;485  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 5)486  %b = and i64 %a, 255487  ret i64 %b488}489 490define i64 @vsetvlmax_e32mf4_and10bits() nounwind #0 {491; CHECK-LABEL: @vsetvlmax_e32mf4_and10bits(492; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 6)493; CHECK-NEXT:    ret i64 [[A]]494;495  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 6)496  %b = and i64 %a, 1023497  ret i64 %b498}499 500define i64 @vsetvlmax_e32mf4_and9bits() nounwind #0 {501; CHECK-LABEL: @vsetvlmax_e32mf4_and9bits(502; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 6)503; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 511504; CHECK-NEXT:    ret i64 [[B]]505;506  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 6)507  %b = and i64 %a, 511508  ret i64 %b509}510 511define i64 @vsetvlmax_e32mf8_and11bits() nounwind #0 {512; CHECK-LABEL: @vsetvlmax_e32mf8_and11bits(513; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 7)514; CHECK-NEXT:    ret i64 [[A]]515;516  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 7)517  %b = and i64 %a, 2047518  ret i64 %b519}520 521define i64 @vsetvlmax_e32mf8_and10bits() nounwind #0 {522; CHECK-LABEL: @vsetvlmax_e32mf8_and10bits(523; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 2, i64 7)524; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 1023525; CHECK-NEXT:    ret i64 [[B]]526;527  %a = call i64 @llvm.riscv.vsetvlimax(i64 2, i64 7)528  %b = and i64 %a, 1023529  ret i64 %b530}531 532define i64 @vsetvlmax_e64m1_and11bits() nounwind #0 {533; CHECK-LABEL: @vsetvlmax_e64m1_and11bits(534; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 0)535; CHECK-NEXT:    ret i64 [[A]]536;537  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 0)538  %b = and i64 %a, 2047539  ret i64 %b540}541 542define i64 @vsetvlmax_e64m1_and10bits() nounwind #0 {543; CHECK-LABEL: @vsetvlmax_e64m1_and10bits(544; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 0)545; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 1023546; CHECK-NEXT:    ret i64 [[B]]547;548  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 0)549  %b = and i64 %a, 1023550  ret i64 %b551}552 553define i64 @vsetvlmax_e64m2_and12bits() nounwind #0 {554; CHECK-LABEL: @vsetvlmax_e64m2_and12bits(555; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 1)556; CHECK-NEXT:    ret i64 [[A]]557;558  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 1)559  %b = and i64 %a, 4095560  ret i64 %b561}562 563define i64 @vsetvlmax_e64m2_and11bits() nounwind #0 {564; CHECK-LABEL: @vsetvlmax_e64m2_and11bits(565; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 1)566; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 2047567; CHECK-NEXT:    ret i64 [[B]]568;569  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 1)570  %b = and i64 %a, 2047571  ret i64 %b572}573 574define i64 @vsetvlmax_e64m4_and13bits() nounwind #0 {575; CHECK-LABEL: @vsetvlmax_e64m4_and13bits(576; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 2)577; CHECK-NEXT:    ret i64 [[A]]578;579  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 2)580  %b = and i64 %a, 8191581  ret i64 %b582}583 584define i64 @vsetvlmax_e64m4_and12bits() nounwind #0 {585; CHECK-LABEL: @vsetvlmax_e64m4_and12bits(586; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 2)587; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 4095588; CHECK-NEXT:    ret i64 [[B]]589;590  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 2)591  %b = and i64 %a, 4095592  ret i64 %b593}594 595define i64 @vsetvlmax_e64m8_and14bits() nounwind #0 {596; CHECK-LABEL: @vsetvlmax_e64m8_and14bits(597; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 3)598; CHECK-NEXT:    ret i64 [[A]]599;600  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 3)601  %b = and i64 %a, 16383602  ret i64 %b603}604 605define i64 @vsetvlmax_e64m8_and13bits() nounwind #0 {606; CHECK-LABEL: @vsetvlmax_e64m8_and13bits(607; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 3)608; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 8191609; CHECK-NEXT:    ret i64 [[B]]610;611  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 3)612  %b = and i64 %a, 8191613  ret i64 %b614}615 616define i64 @vsetvlmax_e64mf2_and8bits() nounwind #0 {617; CHECK-LABEL: @vsetvlmax_e64mf2_and8bits(618; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 5)619; CHECK-NEXT:    ret i64 [[A]]620;621  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 5)622  %b = and i64 %a, 255623  ret i64 %b624}625 626define i64 @vsetvlmax_e64mf2_and7bits() nounwind #0 {627; CHECK-LABEL: @vsetvlmax_e64mf2_and7bits(628; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 5)629; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 127630; CHECK-NEXT:    ret i64 [[B]]631;632  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 5)633  %b = and i64 %a, 127634  ret i64 %b635}636 637define i64 @vsetvlmax_e64mf4_and9bits() nounwind #0 {638; CHECK-LABEL: @vsetvlmax_e64mf4_and9bits(639; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 6)640; CHECK-NEXT:    ret i64 [[A]]641;642  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 6)643  %b = and i64 %a, 511644  ret i64 %b645}646 647define i64 @vsetvlmax_e64mf4_and8bits() nounwind #0 {648; CHECK-LABEL: @vsetvlmax_e64mf4_and8bits(649; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 6)650; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 255651; CHECK-NEXT:    ret i64 [[B]]652;653  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 6)654  %b = and i64 %a, 255655  ret i64 %b656}657 658define i64 @vsetvlmax_e64mf8_and10bits() nounwind #0 {659; CHECK-LABEL: @vsetvlmax_e64mf8_and10bits(660; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 7)661; CHECK-NEXT:    ret i64 [[A]]662;663  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 7)664  %b = and i64 %a, 1023665  ret i64 %b666}667 668define i64 @vsetvlmax_e64mf8_and9bits() nounwind #0 {669; CHECK-LABEL: @vsetvlmax_e64mf8_and9bits(670; CHECK-NEXT:    [[A:%.*]] = call i64 @llvm.riscv.vsetvlimax.i64(i64 3, i64 7)671; CHECK-NEXT:    [[B:%.*]] = and i64 [[A]], 511672; CHECK-NEXT:    ret i64 [[B]]673;674  %a = call i64 @llvm.riscv.vsetvlimax(i64 3, i64 7)675  %b = and i64 %a, 511676  ret i64 %b677}678 679attributes #0 = { vscale_range(2,1024) }680