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