1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=riscv64 -mattr=+v | FileCheck %s 3 4declare i64 @llvm.riscv.vsetvli( 5 i64, i64, i64); 6 7define signext i32 @vsetvl_sext() { 8; CHECK-LABEL: vsetvl_sext: 9; CHECK: # %bb.0: 10; CHECK-NEXT: vsetivli a0, 1, e16, m2, ta, ma 11; CHECK-NEXT: ret 12 %a = call i64 @llvm.riscv.vsetvli(i64 1, i64 1, i64 1) 13 %b = trunc i64 %a to i32 14 ret i32 %b 15} 16 17define zeroext i32 @vsetvl_zext() { 18; CHECK-LABEL: vsetvl_zext: 19; CHECK: # %bb.0: 20; CHECK-NEXT: vsetivli a0, 1, e16, m2, ta, ma 21; CHECK-NEXT: ret 22 %a = call i64 @llvm.riscv.vsetvli(i64 1, i64 1, i64 1) 23 %b = trunc i64 %a to i32 24 ret i32 %b 25} 26 27define i64 @vsetvl_e8m1_and14bits(i64 %avl) { 28; CHECK-LABEL: vsetvl_e8m1_and14bits: 29; CHECK: # %bb.0: 30; CHECK-NEXT: vsetvli a0, a0, e8, m1, ta, ma 31; CHECK-NEXT: ret 32 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 0) 33 %b = and i64 %a, 16383 34 ret i64 %b 35} 36 37define i64 @vsetvl_e8m1_and13bits(i64 %avl) { 38; CHECK-LABEL: vsetvl_e8m1_and13bits: 39; CHECK: # %bb.0: 40; CHECK-NEXT: vsetvli a0, a0, e8, m1, ta, ma 41; CHECK-NEXT: slli a0, a0, 51 42; CHECK-NEXT: srli a0, a0, 51 43; CHECK-NEXT: ret 44 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 0) 45 %b = and i64 %a, 8191 46 ret i64 %b 47} 48 49define i64 @vsetvl_e8m1_constant_avl() { 50; CHECK-LABEL: vsetvl_e8m1_constant_avl: 51; CHECK: # %bb.0: 52; CHECK-NEXT: vsetivli a0, 1, e8, m1, ta, ma 53; CHECK-NEXT: ret 54 %a = call i64 @llvm.riscv.vsetvli(i64 1, i64 0, i64 0) 55 %b = and i64 %a, 1 56 ret i64 %b 57} 58 59define i64 @vsetvl_e8m2_and15bits(i64 %avl) { 60; CHECK-LABEL: vsetvl_e8m2_and15bits: 61; CHECK: # %bb.0: 62; CHECK-NEXT: vsetvli a0, a0, e8, m2, ta, ma 63; CHECK-NEXT: ret 64 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 1) 65 %b = and i64 %a, 32767 66 ret i64 %b 67} 68 69define i64 @vsetvl_e8m2_and14bits(i64 %avl) { 70; CHECK-LABEL: vsetvl_e8m2_and14bits: 71; CHECK: # %bb.0: 72; CHECK-NEXT: vsetvli a0, a0, e8, m2, ta, ma 73; CHECK-NEXT: slli a0, a0, 50 74; CHECK-NEXT: srli a0, a0, 50 75; CHECK-NEXT: ret 76 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 1) 77 %b = and i64 %a, 16383 78 ret i64 %b 79} 80 81define i64 @vsetvl_e8m4_and16bits(i64 %avl) { 82; CHECK-LABEL: vsetvl_e8m4_and16bits: 83; CHECK: # %bb.0: 84; CHECK-NEXT: vsetvli a0, a0, e8, m4, ta, ma 85; CHECK-NEXT: ret 86 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 2) 87 %b = and i64 %a, 65535 88 ret i64 %b 89} 90 91define i64 @vsetvl_e8m4_and15bits(i64 %avl) { 92; CHECK-LABEL: vsetvl_e8m4_and15bits: 93; CHECK: # %bb.0: 94; CHECK-NEXT: vsetvli a0, a0, e8, m4, ta, ma 95; CHECK-NEXT: slli a0, a0, 49 96; CHECK-NEXT: srli a0, a0, 49 97; CHECK-NEXT: ret 98 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 2) 99 %b = and i64 %a, 32767 100 ret i64 %b 101} 102 103define i64 @vsetvl_e8m8_and17bits(i64 %avl) { 104; CHECK-LABEL: vsetvl_e8m8_and17bits: 105; CHECK: # %bb.0: 106; CHECK-NEXT: vsetvli a0, a0, e8, m8, ta, ma 107; CHECK-NEXT: ret 108 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 3) 109 %b = and i64 %a, 131071 110 ret i64 %b 111} 112 113define i64 @vsetvl_e8m8_and16bits(i64 %avl) { 114; CHECK-LABEL: vsetvl_e8m8_and16bits: 115; CHECK: # %bb.0: 116; CHECK-NEXT: vsetvli a0, a0, e8, m8, ta, ma 117; CHECK-NEXT: slli a0, a0, 48 118; CHECK-NEXT: srli a0, a0, 48 119; CHECK-NEXT: ret 120 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 3) 121 %b = and i64 %a, 65535 122 ret i64 %b 123} 124 125define i64 @vsetvl_e8mf2_and11bits(i64 %avl) { 126; CHECK-LABEL: vsetvl_e8mf2_and11bits: 127; CHECK: # %bb.0: 128; CHECK-NEXT: vsetvli a0, a0, e8, mf8, ta, ma 129; CHECK-NEXT: ret 130 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 5) 131 %b = and i64 %a, 2047 132 ret i64 %b 133} 134 135define i64 @vsetvl_e8mf2_and10bits(i64 %avl) { 136; CHECK-LABEL: vsetvl_e8mf2_and10bits: 137; CHECK: # %bb.0: 138; CHECK-NEXT: vsetvli a0, a0, e8, mf8, ta, ma 139; CHECK-NEXT: andi a0, a0, 1023 140; CHECK-NEXT: ret 141 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 5) 142 %b = and i64 %a, 1023 143 ret i64 %b 144} 145 146define i64 @vsetvl_e8mf4_and12bits(i64 %avl) { 147; CHECK-LABEL: vsetvl_e8mf4_and12bits: 148; CHECK: # %bb.0: 149; CHECK-NEXT: vsetvli a0, a0, e8, mf4, ta, ma 150; CHECK-NEXT: ret 151 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 6) 152 %b = and i64 %a, 4095 153 ret i64 %b 154} 155 156define i64 @vsetvl_e8mf4_and11bits(i64 %avl) { 157; CHECK-LABEL: vsetvl_e8mf4_and11bits: 158; CHECK: # %bb.0: 159; CHECK-NEXT: vsetvli a0, a0, e8, mf4, ta, ma 160; CHECK-NEXT: andi a0, a0, 2047 161; CHECK-NEXT: ret 162 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 6) 163 %b = and i64 %a, 2047 164 ret i64 %b 165} 166 167define i64 @vsetvl_e8mf8_and13bits(i64 %avl) { 168; CHECK-LABEL: vsetvl_e8mf8_and13bits: 169; CHECK: # %bb.0: 170; CHECK-NEXT: vsetvli a0, a0, e8, mf2, ta, ma 171; CHECK-NEXT: ret 172 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 7) 173 %b = and i64 %a, 8191 174 ret i64 %b 175} 176 177define i64 @vsetvl_e8mf8_and12bits(i64 %avl) { 178; CHECK-LABEL: vsetvl_e8mf8_and12bits: 179; CHECK: # %bb.0: 180; CHECK-NEXT: vsetvli a0, a0, e8, mf2, ta, ma 181; CHECK-NEXT: slli a0, a0, 52 182; CHECK-NEXT: srli a0, a0, 52 183; CHECK-NEXT: ret 184 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 0, i64 7) 185 %b = and i64 %a, 4095 186 ret i64 %b 187} 188 189define i64 @vsetvl_e16m1_and13bits(i64 %avl) { 190; CHECK-LABEL: vsetvl_e16m1_and13bits: 191; CHECK: # %bb.0: 192; CHECK-NEXT: vsetvli a0, a0, e16, m1, ta, ma 193; CHECK-NEXT: ret 194 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 0) 195 %b = and i64 %a, 8191 196 ret i64 %b 197} 198 199define i64 @vsetvl_e16m1_and12bits(i64 %avl) { 200; CHECK-LABEL: vsetvl_e16m1_and12bits: 201; CHECK: # %bb.0: 202; CHECK-NEXT: vsetvli a0, a0, e16, m1, ta, ma 203; CHECK-NEXT: slli a0, a0, 52 204; CHECK-NEXT: srli a0, a0, 52 205; CHECK-NEXT: ret 206 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 0) 207 %b = and i64 %a, 4095 208 ret i64 %b 209} 210 211define i64 @vsetvl_e16m2_and14bits(i64 %avl) { 212; CHECK-LABEL: vsetvl_e16m2_and14bits: 213; CHECK: # %bb.0: 214; CHECK-NEXT: vsetvli a0, a0, e16, m2, ta, ma 215; CHECK-NEXT: ret 216 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 1) 217 %b = and i64 %a, 16383 218 ret i64 %b 219} 220 221define i64 @vsetvl_e16m2_and13bits(i64 %avl) { 222; CHECK-LABEL: vsetvl_e16m2_and13bits: 223; CHECK: # %bb.0: 224; CHECK-NEXT: vsetvli a0, a0, e16, m2, ta, ma 225; CHECK-NEXT: slli a0, a0, 51 226; CHECK-NEXT: srli a0, a0, 51 227; CHECK-NEXT: ret 228 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 1) 229 %b = and i64 %a, 8191 230 ret i64 %b 231} 232 233define i64 @vsetvl_e16m4_and15bits(i64 %avl) { 234; CHECK-LABEL: vsetvl_e16m4_and15bits: 235; CHECK: # %bb.0: 236; CHECK-NEXT: vsetvli a0, a0, e16, m4, ta, ma 237; CHECK-NEXT: ret 238 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 2) 239 %b = and i64 %a, 32767 240 ret i64 %b 241} 242 243define i64 @vsetvl_e16m4_and14bits(i64 %avl) { 244; CHECK-LABEL: vsetvl_e16m4_and14bits: 245; CHECK: # %bb.0: 246; CHECK-NEXT: vsetvli a0, a0, e16, m4, ta, ma 247; CHECK-NEXT: slli a0, a0, 50 248; CHECK-NEXT: srli a0, a0, 50 249; CHECK-NEXT: ret 250 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 2) 251 %b = and i64 %a, 16383 252 ret i64 %b 253} 254 255define i64 @vsetvl_e16m8_and16bits(i64 %avl) { 256; CHECK-LABEL: vsetvl_e16m8_and16bits: 257; CHECK: # %bb.0: 258; CHECK-NEXT: vsetvli a0, a0, e16, m8, ta, ma 259; CHECK-NEXT: ret 260 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 3) 261 %b = and i64 %a, 65535 262 ret i64 %b 263} 264 265define i64 @vsetvl_e16m8_and15bits(i64 %avl) { 266; CHECK-LABEL: vsetvl_e16m8_and15bits: 267; CHECK: # %bb.0: 268; CHECK-NEXT: vsetvli a0, a0, e16, m8, ta, ma 269; CHECK-NEXT: slli a0, a0, 49 270; CHECK-NEXT: srli a0, a0, 49 271; CHECK-NEXT: ret 272 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 3) 273 %b = and i64 %a, 32767 274 ret i64 %b 275} 276 277define i64 @vsetvl_e16mf2_and10bits(i64 %avl) { 278; CHECK-LABEL: vsetvl_e16mf2_and10bits: 279; CHECK: # %bb.0: 280; CHECK-NEXT: vsetvli a0, a0, e16, mf8, ta, ma 281; CHECK-NEXT: ret 282 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 5) 283 %b = and i64 %a, 1023 284 ret i64 %b 285} 286 287define i64 @vsetvl_e16mf2_and9bits(i64 %avl) { 288; CHECK-LABEL: vsetvl_e16mf2_and9bits: 289; CHECK: # %bb.0: 290; CHECK-NEXT: vsetvli a0, a0, e16, mf8, ta, ma 291; CHECK-NEXT: andi a0, a0, 511 292; CHECK-NEXT: ret 293 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 5) 294 %b = and i64 %a, 511 295 ret i64 %b 296} 297 298define i64 @vsetvl_e16mf4_and11bits(i64 %avl) { 299; CHECK-LABEL: vsetvl_e16mf4_and11bits: 300; CHECK: # %bb.0: 301; CHECK-NEXT: vsetvli a0, a0, e16, mf4, ta, ma 302; CHECK-NEXT: ret 303 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 6) 304 %b = and i64 %a, 2047 305 ret i64 %b 306} 307 308define i64 @vsetvl_e16mf4_and10bits(i64 %avl) { 309; CHECK-LABEL: vsetvl_e16mf4_and10bits: 310; CHECK: # %bb.0: 311; CHECK-NEXT: vsetvli a0, a0, e16, mf4, ta, ma 312; CHECK-NEXT: andi a0, a0, 1023 313; CHECK-NEXT: ret 314 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 6) 315 %b = and i64 %a, 1023 316 ret i64 %b 317} 318 319define i64 @vsetvl_e16mf8_and12bits(i64 %avl) { 320; CHECK-LABEL: vsetvl_e16mf8_and12bits: 321; CHECK: # %bb.0: 322; CHECK-NEXT: vsetvli a0, a0, e16, mf2, ta, ma 323; CHECK-NEXT: ret 324 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 7) 325 %b = and i64 %a, 4095 326 ret i64 %b 327} 328 329define i64 @vsetvl_e16mf8_and11bits(i64 %avl) { 330; CHECK-LABEL: vsetvl_e16mf8_and11bits: 331; CHECK: # %bb.0: 332; CHECK-NEXT: vsetvli a0, a0, e16, mf2, ta, ma 333; CHECK-NEXT: andi a0, a0, 2047 334; CHECK-NEXT: ret 335 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 1, i64 7) 336 %b = and i64 %a, 2047 337 ret i64 %b 338} 339 340define i64 @vsetvl_e32m1_and12bits(i64 %avl) { 341; CHECK-LABEL: vsetvl_e32m1_and12bits: 342; CHECK: # %bb.0: 343; CHECK-NEXT: vsetvli a0, a0, e32, m1, ta, ma 344; CHECK-NEXT: ret 345 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 0) 346 %b = and i64 %a, 4095 347 ret i64 %b 348} 349 350define i64 @vsetvl_e32m1_and11bits(i64 %avl) { 351; CHECK-LABEL: vsetvl_e32m1_and11bits: 352; CHECK: # %bb.0: 353; CHECK-NEXT: vsetvli a0, a0, e32, m1, ta, ma 354; CHECK-NEXT: andi a0, a0, 2047 355; CHECK-NEXT: ret 356 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 0) 357 %b = and i64 %a, 2047 358 ret i64 %b 359} 360 361define i64 @vsetvl_e32m2_and13bits(i64 %avl) { 362; CHECK-LABEL: vsetvl_e32m2_and13bits: 363; CHECK: # %bb.0: 364; CHECK-NEXT: vsetvli a0, a0, e32, m2, ta, ma 365; CHECK-NEXT: ret 366 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 1) 367 %b = and i64 %a, 8191 368 ret i64 %b 369} 370 371define i64 @vsetvl_e32m2_and12bits(i64 %avl) { 372; CHECK-LABEL: vsetvl_e32m2_and12bits: 373; CHECK: # %bb.0: 374; CHECK-NEXT: vsetvli a0, a0, e32, m2, ta, ma 375; CHECK-NEXT: slli a0, a0, 52 376; CHECK-NEXT: srli a0, a0, 52 377; CHECK-NEXT: ret 378 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 1) 379 %b = and i64 %a, 4095 380 ret i64 %b 381} 382 383define i64 @vsetvl_e32m4_and14bits(i64 %avl) { 384; CHECK-LABEL: vsetvl_e32m4_and14bits: 385; CHECK: # %bb.0: 386; CHECK-NEXT: vsetvli a0, a0, e32, m4, ta, ma 387; CHECK-NEXT: ret 388 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 2) 389 %b = and i64 %a, 16383 390 ret i64 %b 391} 392 393define i64 @vsetvl_e32m4_and13bits(i64 %avl) { 394; CHECK-LABEL: vsetvl_e32m4_and13bits: 395; CHECK: # %bb.0: 396; CHECK-NEXT: vsetvli a0, a0, e32, m4, ta, ma 397; CHECK-NEXT: slli a0, a0, 51 398; CHECK-NEXT: srli a0, a0, 51 399; CHECK-NEXT: ret 400 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 2) 401 %b = and i64 %a, 8191 402 ret i64 %b 403} 404 405define i64 @vsetvl_e32m8_and15bits(i64 %avl) { 406; CHECK-LABEL: vsetvl_e32m8_and15bits: 407; CHECK: # %bb.0: 408; CHECK-NEXT: vsetvli a0, a0, e32, m8, ta, ma 409; CHECK-NEXT: ret 410 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 3) 411 %b = and i64 %a, 32767 412 ret i64 %b 413} 414 415define i64 @vsetvl_e32m8_and14bits(i64 %avl) { 416; CHECK-LABEL: vsetvl_e32m8_and14bits: 417; CHECK: # %bb.0: 418; CHECK-NEXT: vsetvli a0, a0, e32, m8, ta, ma 419; CHECK-NEXT: slli a0, a0, 50 420; CHECK-NEXT: srli a0, a0, 50 421; CHECK-NEXT: ret 422 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 3) 423 %b = and i64 %a, 16383 424 ret i64 %b 425} 426 427define i64 @vsetvl_e32mf2_and9bits(i64 %avl) { 428; CHECK-LABEL: vsetvl_e32mf2_and9bits: 429; CHECK: # %bb.0: 430; CHECK-NEXT: vsetvli a0, a0, e32, mf8, ta, ma 431; CHECK-NEXT: ret 432 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 5) 433 %b = and i64 %a, 511 434 ret i64 %b 435} 436 437define i64 @vsetvl_e32mf2_and8bits(i64 %avl) { 438; CHECK-LABEL: vsetvl_e32mf2_and8bits: 439; CHECK: # %bb.0: 440; CHECK-NEXT: vsetvli a0, a0, e32, mf8, ta, ma 441; CHECK-NEXT: andi a0, a0, 255 442; CHECK-NEXT: ret 443 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 5) 444 %b = and i64 %a, 255 445 ret i64 %b 446} 447 448define i64 @vsetvl_e32mf4_and10bits(i64 %avl) { 449; CHECK-LABEL: vsetvl_e32mf4_and10bits: 450; CHECK: # %bb.0: 451; CHECK-NEXT: vsetvli a0, a0, e32, mf4, ta, ma 452; CHECK-NEXT: ret 453 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 6) 454 %b = and i64 %a, 1023 455 ret i64 %b 456} 457 458define i64 @vsetvl_e32mf4_and9bits(i64 %avl) { 459; CHECK-LABEL: vsetvl_e32mf4_and9bits: 460; CHECK: # %bb.0: 461; CHECK-NEXT: vsetvli a0, a0, e32, mf4, ta, ma 462; CHECK-NEXT: andi a0, a0, 511 463; CHECK-NEXT: ret 464 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 6) 465 %b = and i64 %a, 511 466 ret i64 %b 467} 468 469define i64 @vsetvl_e32mf8_and11bits(i64 %avl) { 470; CHECK-LABEL: vsetvl_e32mf8_and11bits: 471; CHECK: # %bb.0: 472; CHECK-NEXT: vsetvli a0, a0, e32, mf2, ta, ma 473; CHECK-NEXT: ret 474 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 7) 475 %b = and i64 %a, 2047 476 ret i64 %b 477} 478 479define i64 @vsetvl_e32mf8_and10bits(i64 %avl) { 480; CHECK-LABEL: vsetvl_e32mf8_and10bits: 481; CHECK: # %bb.0: 482; CHECK-NEXT: vsetvli a0, a0, e32, mf2, ta, ma 483; CHECK-NEXT: andi a0, a0, 1023 484; CHECK-NEXT: ret 485 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 2, i64 7) 486 %b = and i64 %a, 1023 487 ret i64 %b 488} 489 490define i64 @vsetvl_e64m1_and11bits(i64 %avl) { 491; CHECK-LABEL: vsetvl_e64m1_and11bits: 492; CHECK: # %bb.0: 493; CHECK-NEXT: vsetvli a0, a0, e64, m1, ta, ma 494; CHECK-NEXT: ret 495 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 0) 496 %b = and i64 %a, 2047 497 ret i64 %b 498} 499 500define i64 @vsetvl_e64m1_and10bits(i64 %avl) { 501; CHECK-LABEL: vsetvl_e64m1_and10bits: 502; CHECK: # %bb.0: 503; CHECK-NEXT: vsetvli a0, a0, e64, m1, ta, ma 504; CHECK-NEXT: andi a0, a0, 1023 505; CHECK-NEXT: ret 506 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 0) 507 %b = and i64 %a, 1023 508 ret i64 %b 509} 510 511define i64 @vsetvl_e64m2_and12bits(i64 %avl) { 512; CHECK-LABEL: vsetvl_e64m2_and12bits: 513; CHECK: # %bb.0: 514; CHECK-NEXT: vsetvli a0, a0, e64, m2, ta, ma 515; CHECK-NEXT: ret 516 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 1) 517 %b = and i64 %a, 4095 518 ret i64 %b 519} 520 521define i64 @vsetvl_e64m2_and11bits(i64 %avl) { 522; CHECK-LABEL: vsetvl_e64m2_and11bits: 523; CHECK: # %bb.0: 524; CHECK-NEXT: vsetvli a0, a0, e64, m2, ta, ma 525; CHECK-NEXT: andi a0, a0, 2047 526; CHECK-NEXT: ret 527 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 1) 528 %b = and i64 %a, 2047 529 ret i64 %b 530} 531 532define i64 @vsetvl_e64m4_and13bits(i64 %avl) { 533; CHECK-LABEL: vsetvl_e64m4_and13bits: 534; CHECK: # %bb.0: 535; CHECK-NEXT: vsetvli a0, a0, e64, m4, ta, ma 536; CHECK-NEXT: ret 537 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 2) 538 %b = and i64 %a, 8191 539 ret i64 %b 540} 541 542define i64 @vsetvl_e64m4_and12bits(i64 %avl) { 543; CHECK-LABEL: vsetvl_e64m4_and12bits: 544; CHECK: # %bb.0: 545; CHECK-NEXT: vsetvli a0, a0, e64, m4, ta, ma 546; CHECK-NEXT: slli a0, a0, 52 547; CHECK-NEXT: srli a0, a0, 52 548; CHECK-NEXT: ret 549 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 2) 550 %b = and i64 %a, 4095 551 ret i64 %b 552} 553 554define i64 @vsetvl_e64m8_and14bits(i64 %avl) { 555; CHECK-LABEL: vsetvl_e64m8_and14bits: 556; CHECK: # %bb.0: 557; CHECK-NEXT: vsetvli a0, a0, e64, m8, ta, ma 558; CHECK-NEXT: ret 559 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 3) 560 %b = and i64 %a, 16383 561 ret i64 %b 562} 563 564define i64 @vsetvl_e64m8_and13bits(i64 %avl) { 565; CHECK-LABEL: vsetvl_e64m8_and13bits: 566; CHECK: # %bb.0: 567; CHECK-NEXT: vsetvli a0, a0, e64, m8, ta, ma 568; CHECK-NEXT: slli a0, a0, 51 569; CHECK-NEXT: srli a0, a0, 51 570; CHECK-NEXT: ret 571 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 3) 572 %b = and i64 %a, 8191 573 ret i64 %b 574} 575 576define i64 @vsetvl_e64mf2_and8bits(i64 %avl) { 577; CHECK-LABEL: vsetvl_e64mf2_and8bits: 578; CHECK: # %bb.0: 579; CHECK-NEXT: vsetvli a0, a0, e64, mf8, ta, ma 580; CHECK-NEXT: ret 581 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 5) 582 %b = and i64 %a, 255 583 ret i64 %b 584} 585 586define i64 @vsetvl_e64mf2_and7bits(i64 %avl) { 587; CHECK-LABEL: vsetvl_e64mf2_and7bits: 588; CHECK: # %bb.0: 589; CHECK-NEXT: vsetvli a0, a0, e64, mf8, ta, ma 590; CHECK-NEXT: andi a0, a0, 127 591; CHECK-NEXT: ret 592 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 5) 593 %b = and i64 %a, 127 594 ret i64 %b 595} 596 597define i64 @vsetvl_e64mf4_and9bits(i64 %avl) { 598; CHECK-LABEL: vsetvl_e64mf4_and9bits: 599; CHECK: # %bb.0: 600; CHECK-NEXT: vsetvli a0, a0, e64, mf4, ta, ma 601; CHECK-NEXT: ret 602 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 6) 603 %b = and i64 %a, 511 604 ret i64 %b 605} 606 607define i64 @vsetvl_e64mf4_and8bits(i64 %avl) { 608; CHECK-LABEL: vsetvl_e64mf4_and8bits: 609; CHECK: # %bb.0: 610; CHECK-NEXT: vsetvli a0, a0, e64, mf4, ta, ma 611; CHECK-NEXT: andi a0, a0, 255 612; CHECK-NEXT: ret 613 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 6) 614 %b = and i64 %a, 255 615 ret i64 %b 616} 617 618define i64 @vsetvl_e64mf8_and10bits(i64 %avl) { 619; CHECK-LABEL: vsetvl_e64mf8_and10bits: 620; CHECK: # %bb.0: 621; CHECK-NEXT: vsetvli a0, a0, e64, mf2, ta, ma 622; CHECK-NEXT: ret 623 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 7) 624 %b = and i64 %a, 1023 625 ret i64 %b 626} 627 628define i64 @vsetvl_e64mf8_and9bits(i64 %avl) { 629; CHECK-LABEL: vsetvl_e64mf8_and9bits: 630; CHECK: # %bb.0: 631; CHECK-NEXT: vsetvli a0, a0, e64, mf2, ta, ma 632; CHECK-NEXT: andi a0, a0, 511 633; CHECK-NEXT: ret 634 %a = call i64 @llvm.riscv.vsetvli(i64 %avl, i64 3, i64 7) 635 %b = and i64 %a, 511 636 ret i64 %b 637} 638