1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX2-RV32 3; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX2-RV64 4; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX1-RV32 5; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX1-RV64 6 7define void @bitreverse_v8i16(<8 x i16>* %x, <8 x i16>* %y) { 8; LMULMAX2-RV32-LABEL: bitreverse_v8i16: 9; LMULMAX2-RV32: # %bb.0: 10; LMULMAX2-RV32-NEXT: vsetivli a1, 8, e16,m1,ta,mu 11; LMULMAX2-RV32-NEXT: vle16.v v25, (a0) 12; LMULMAX2-RV32-NEXT: vsrl.vi v26, v25, 8 13; LMULMAX2-RV32-NEXT: vsll.vi v25, v25, 8 14; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 15; LMULMAX2-RV32-NEXT: lui a1, 1 16; LMULMAX2-RV32-NEXT: addi a1, a1, -241 17; LMULMAX2-RV32-NEXT: vand.vx v26, v25, a1 18; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 4 19; LMULMAX2-RV32-NEXT: lui a1, 15 20; LMULMAX2-RV32-NEXT: addi a1, a1, 240 21; LMULMAX2-RV32-NEXT: vand.vx v25, v25, a1 22; LMULMAX2-RV32-NEXT: vsrl.vi v25, v25, 4 23; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 24; LMULMAX2-RV32-NEXT: lui a1, 3 25; LMULMAX2-RV32-NEXT: addi a1, a1, 819 26; LMULMAX2-RV32-NEXT: vand.vx v26, v25, a1 27; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 2 28; LMULMAX2-RV32-NEXT: lui a1, 13 29; LMULMAX2-RV32-NEXT: addi a1, a1, -820 30; LMULMAX2-RV32-NEXT: vand.vx v25, v25, a1 31; LMULMAX2-RV32-NEXT: vsrl.vi v25, v25, 2 32; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 33; LMULMAX2-RV32-NEXT: lui a1, 5 34; LMULMAX2-RV32-NEXT: addi a1, a1, 1365 35; LMULMAX2-RV32-NEXT: vand.vx v26, v25, a1 36; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 1 37; LMULMAX2-RV32-NEXT: lui a1, 11 38; LMULMAX2-RV32-NEXT: addi a1, a1, -1366 39; LMULMAX2-RV32-NEXT: vand.vx v25, v25, a1 40; LMULMAX2-RV32-NEXT: vsrl.vi v25, v25, 1 41; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 42; LMULMAX2-RV32-NEXT: vse16.v v25, (a0) 43; LMULMAX2-RV32-NEXT: ret 44; 45; LMULMAX2-RV64-LABEL: bitreverse_v8i16: 46; LMULMAX2-RV64: # %bb.0: 47; LMULMAX2-RV64-NEXT: vsetivli a1, 8, e16,m1,ta,mu 48; LMULMAX2-RV64-NEXT: vle16.v v25, (a0) 49; LMULMAX2-RV64-NEXT: vsrl.vi v26, v25, 8 50; LMULMAX2-RV64-NEXT: vsll.vi v25, v25, 8 51; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 52; LMULMAX2-RV64-NEXT: lui a1, 1 53; LMULMAX2-RV64-NEXT: addiw a1, a1, -241 54; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1 55; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 4 56; LMULMAX2-RV64-NEXT: lui a1, 15 57; LMULMAX2-RV64-NEXT: addiw a1, a1, 240 58; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 59; LMULMAX2-RV64-NEXT: vsrl.vi v25, v25, 4 60; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 61; LMULMAX2-RV64-NEXT: lui a1, 3 62; LMULMAX2-RV64-NEXT: addiw a1, a1, 819 63; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1 64; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 2 65; LMULMAX2-RV64-NEXT: lui a1, 13 66; LMULMAX2-RV64-NEXT: addiw a1, a1, -820 67; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 68; LMULMAX2-RV64-NEXT: vsrl.vi v25, v25, 2 69; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 70; LMULMAX2-RV64-NEXT: lui a1, 5 71; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365 72; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1 73; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 1 74; LMULMAX2-RV64-NEXT: lui a1, 11 75; LMULMAX2-RV64-NEXT: addiw a1, a1, -1366 76; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 77; LMULMAX2-RV64-NEXT: vsrl.vi v25, v25, 1 78; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 79; LMULMAX2-RV64-NEXT: vse16.v v25, (a0) 80; LMULMAX2-RV64-NEXT: ret 81; 82; LMULMAX1-RV32-LABEL: bitreverse_v8i16: 83; LMULMAX1-RV32: # %bb.0: 84; LMULMAX1-RV32-NEXT: vsetivli a1, 8, e16,m1,ta,mu 85; LMULMAX1-RV32-NEXT: vle16.v v25, (a0) 86; LMULMAX1-RV32-NEXT: vsrl.vi v26, v25, 8 87; LMULMAX1-RV32-NEXT: vsll.vi v25, v25, 8 88; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 89; LMULMAX1-RV32-NEXT: lui a1, 1 90; LMULMAX1-RV32-NEXT: addi a1, a1, -241 91; LMULMAX1-RV32-NEXT: vand.vx v26, v25, a1 92; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 4 93; LMULMAX1-RV32-NEXT: lui a1, 15 94; LMULMAX1-RV32-NEXT: addi a1, a1, 240 95; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a1 96; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 4 97; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 98; LMULMAX1-RV32-NEXT: lui a1, 3 99; LMULMAX1-RV32-NEXT: addi a1, a1, 819 100; LMULMAX1-RV32-NEXT: vand.vx v26, v25, a1 101; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 2 102; LMULMAX1-RV32-NEXT: lui a1, 13 103; LMULMAX1-RV32-NEXT: addi a1, a1, -820 104; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a1 105; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 2 106; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 107; LMULMAX1-RV32-NEXT: lui a1, 5 108; LMULMAX1-RV32-NEXT: addi a1, a1, 1365 109; LMULMAX1-RV32-NEXT: vand.vx v26, v25, a1 110; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 1 111; LMULMAX1-RV32-NEXT: lui a1, 11 112; LMULMAX1-RV32-NEXT: addi a1, a1, -1366 113; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a1 114; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 1 115; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 116; LMULMAX1-RV32-NEXT: vse16.v v25, (a0) 117; LMULMAX1-RV32-NEXT: ret 118; 119; LMULMAX1-RV64-LABEL: bitreverse_v8i16: 120; LMULMAX1-RV64: # %bb.0: 121; LMULMAX1-RV64-NEXT: vsetivli a1, 8, e16,m1,ta,mu 122; LMULMAX1-RV64-NEXT: vle16.v v25, (a0) 123; LMULMAX1-RV64-NEXT: vsrl.vi v26, v25, 8 124; LMULMAX1-RV64-NEXT: vsll.vi v25, v25, 8 125; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 126; LMULMAX1-RV64-NEXT: lui a1, 1 127; LMULMAX1-RV64-NEXT: addiw a1, a1, -241 128; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1 129; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 4 130; LMULMAX1-RV64-NEXT: lui a1, 15 131; LMULMAX1-RV64-NEXT: addiw a1, a1, 240 132; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 133; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 4 134; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 135; LMULMAX1-RV64-NEXT: lui a1, 3 136; LMULMAX1-RV64-NEXT: addiw a1, a1, 819 137; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1 138; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 2 139; LMULMAX1-RV64-NEXT: lui a1, 13 140; LMULMAX1-RV64-NEXT: addiw a1, a1, -820 141; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 142; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 2 143; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 144; LMULMAX1-RV64-NEXT: lui a1, 5 145; LMULMAX1-RV64-NEXT: addiw a1, a1, 1365 146; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1 147; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 1 148; LMULMAX1-RV64-NEXT: lui a1, 11 149; LMULMAX1-RV64-NEXT: addiw a1, a1, -1366 150; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 151; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 1 152; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 153; LMULMAX1-RV64-NEXT: vse16.v v25, (a0) 154; LMULMAX1-RV64-NEXT: ret 155 %a = load <8 x i16>, <8 x i16>* %x 156 %b = load <8 x i16>, <8 x i16>* %y 157 %c = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 158 store <8 x i16> %c, <8 x i16>* %x 159 ret void 160} 161declare <8 x i16> @llvm.bitreverse.v8i16(<8 x i16>) 162 163define void @bitreverse_v4i32(<4 x i32>* %x, <4 x i32>* %y) { 164; LMULMAX2-RV32-LABEL: bitreverse_v4i32: 165; LMULMAX2-RV32: # %bb.0: 166; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e32,m1,ta,mu 167; LMULMAX2-RV32-NEXT: vle32.v v25, (a0) 168; LMULMAX2-RV32-NEXT: vsrl.vi v26, v25, 8 169; LMULMAX2-RV32-NEXT: lui a1, 16 170; LMULMAX2-RV32-NEXT: addi a1, a1, -256 171; LMULMAX2-RV32-NEXT: vand.vx v26, v26, a1 172; LMULMAX2-RV32-NEXT: vsrl.vi v27, v25, 24 173; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v27 174; LMULMAX2-RV32-NEXT: vsll.vi v27, v25, 8 175; LMULMAX2-RV32-NEXT: lui a1, 4080 176; LMULMAX2-RV32-NEXT: vand.vx v27, v27, a1 177; LMULMAX2-RV32-NEXT: vsll.vi v25, v25, 24 178; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v27 179; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 180; LMULMAX2-RV32-NEXT: lui a1, 61681 181; LMULMAX2-RV32-NEXT: addi a1, a1, -241 182; LMULMAX2-RV32-NEXT: vand.vx v26, v25, a1 183; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 4 184; LMULMAX2-RV32-NEXT: lui a1, 986895 185; LMULMAX2-RV32-NEXT: addi a1, a1, 240 186; LMULMAX2-RV32-NEXT: vand.vx v25, v25, a1 187; LMULMAX2-RV32-NEXT: vsrl.vi v25, v25, 4 188; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 189; LMULMAX2-RV32-NEXT: lui a1, 209715 190; LMULMAX2-RV32-NEXT: addi a1, a1, 819 191; LMULMAX2-RV32-NEXT: vand.vx v26, v25, a1 192; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 2 193; LMULMAX2-RV32-NEXT: lui a1, 838861 194; LMULMAX2-RV32-NEXT: addi a1, a1, -820 195; LMULMAX2-RV32-NEXT: vand.vx v25, v25, a1 196; LMULMAX2-RV32-NEXT: vsrl.vi v25, v25, 2 197; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 198; LMULMAX2-RV32-NEXT: lui a1, 349525 199; LMULMAX2-RV32-NEXT: addi a1, a1, 1365 200; LMULMAX2-RV32-NEXT: vand.vx v26, v25, a1 201; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 1 202; LMULMAX2-RV32-NEXT: lui a1, 699051 203; LMULMAX2-RV32-NEXT: addi a1, a1, -1366 204; LMULMAX2-RV32-NEXT: vand.vx v25, v25, a1 205; LMULMAX2-RV32-NEXT: vsrl.vi v25, v25, 1 206; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 207; LMULMAX2-RV32-NEXT: vse32.v v25, (a0) 208; LMULMAX2-RV32-NEXT: ret 209; 210; LMULMAX2-RV64-LABEL: bitreverse_v4i32: 211; LMULMAX2-RV64: # %bb.0: 212; LMULMAX2-RV64-NEXT: vsetivli a1, 4, e32,m1,ta,mu 213; LMULMAX2-RV64-NEXT: vle32.v v25, (a0) 214; LMULMAX2-RV64-NEXT: vsrl.vi v26, v25, 8 215; LMULMAX2-RV64-NEXT: lui a1, 16 216; LMULMAX2-RV64-NEXT: addiw a1, a1, -256 217; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 218; LMULMAX2-RV64-NEXT: vsrl.vi v27, v25, 24 219; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v27 220; LMULMAX2-RV64-NEXT: vsll.vi v27, v25, 8 221; LMULMAX2-RV64-NEXT: lui a1, 4080 222; LMULMAX2-RV64-NEXT: vand.vx v27, v27, a1 223; LMULMAX2-RV64-NEXT: vsll.vi v25, v25, 24 224; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v27 225; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 226; LMULMAX2-RV64-NEXT: lui a1, 61681 227; LMULMAX2-RV64-NEXT: addiw a1, a1, -241 228; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1 229; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 4 230; LMULMAX2-RV64-NEXT: lui a1, 241 231; LMULMAX2-RV64-NEXT: addiw a1, a1, -241 232; LMULMAX2-RV64-NEXT: slli a1, a1, 12 233; LMULMAX2-RV64-NEXT: addi a1, a1, 240 234; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 235; LMULMAX2-RV64-NEXT: vsrl.vi v25, v25, 4 236; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 237; LMULMAX2-RV64-NEXT: lui a1, 209715 238; LMULMAX2-RV64-NEXT: addiw a1, a1, 819 239; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1 240; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 2 241; LMULMAX2-RV64-NEXT: lui a1, 205 242; LMULMAX2-RV64-NEXT: addiw a1, a1, -819 243; LMULMAX2-RV64-NEXT: slli a1, a1, 12 244; LMULMAX2-RV64-NEXT: addi a1, a1, -820 245; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 246; LMULMAX2-RV64-NEXT: vsrl.vi v25, v25, 2 247; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 248; LMULMAX2-RV64-NEXT: lui a1, 349525 249; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365 250; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1 251; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 1 252; LMULMAX2-RV64-NEXT: lui a1, 171 253; LMULMAX2-RV64-NEXT: addiw a1, a1, -1365 254; LMULMAX2-RV64-NEXT: slli a1, a1, 12 255; LMULMAX2-RV64-NEXT: addi a1, a1, -1366 256; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 257; LMULMAX2-RV64-NEXT: vsrl.vi v25, v25, 1 258; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 259; LMULMAX2-RV64-NEXT: vse32.v v25, (a0) 260; LMULMAX2-RV64-NEXT: ret 261; 262; LMULMAX1-RV32-LABEL: bitreverse_v4i32: 263; LMULMAX1-RV32: # %bb.0: 264; LMULMAX1-RV32-NEXT: vsetivli a1, 4, e32,m1,ta,mu 265; LMULMAX1-RV32-NEXT: vle32.v v25, (a0) 266; LMULMAX1-RV32-NEXT: vsrl.vi v26, v25, 8 267; LMULMAX1-RV32-NEXT: lui a1, 16 268; LMULMAX1-RV32-NEXT: addi a1, a1, -256 269; LMULMAX1-RV32-NEXT: vand.vx v26, v26, a1 270; LMULMAX1-RV32-NEXT: vsrl.vi v27, v25, 24 271; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27 272; LMULMAX1-RV32-NEXT: vsll.vi v27, v25, 8 273; LMULMAX1-RV32-NEXT: lui a1, 4080 274; LMULMAX1-RV32-NEXT: vand.vx v27, v27, a1 275; LMULMAX1-RV32-NEXT: vsll.vi v25, v25, 24 276; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 277; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 278; LMULMAX1-RV32-NEXT: lui a1, 61681 279; LMULMAX1-RV32-NEXT: addi a1, a1, -241 280; LMULMAX1-RV32-NEXT: vand.vx v26, v25, a1 281; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 4 282; LMULMAX1-RV32-NEXT: lui a1, 986895 283; LMULMAX1-RV32-NEXT: addi a1, a1, 240 284; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a1 285; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 4 286; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 287; LMULMAX1-RV32-NEXT: lui a1, 209715 288; LMULMAX1-RV32-NEXT: addi a1, a1, 819 289; LMULMAX1-RV32-NEXT: vand.vx v26, v25, a1 290; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 2 291; LMULMAX1-RV32-NEXT: lui a1, 838861 292; LMULMAX1-RV32-NEXT: addi a1, a1, -820 293; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a1 294; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 2 295; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 296; LMULMAX1-RV32-NEXT: lui a1, 349525 297; LMULMAX1-RV32-NEXT: addi a1, a1, 1365 298; LMULMAX1-RV32-NEXT: vand.vx v26, v25, a1 299; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 1 300; LMULMAX1-RV32-NEXT: lui a1, 699051 301; LMULMAX1-RV32-NEXT: addi a1, a1, -1366 302; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a1 303; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 1 304; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 305; LMULMAX1-RV32-NEXT: vse32.v v25, (a0) 306; LMULMAX1-RV32-NEXT: ret 307; 308; LMULMAX1-RV64-LABEL: bitreverse_v4i32: 309; LMULMAX1-RV64: # %bb.0: 310; LMULMAX1-RV64-NEXT: vsetivli a1, 4, e32,m1,ta,mu 311; LMULMAX1-RV64-NEXT: vle32.v v25, (a0) 312; LMULMAX1-RV64-NEXT: vsrl.vi v26, v25, 8 313; LMULMAX1-RV64-NEXT: lui a1, 16 314; LMULMAX1-RV64-NEXT: addiw a1, a1, -256 315; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a1 316; LMULMAX1-RV64-NEXT: vsrl.vi v27, v25, 24 317; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 318; LMULMAX1-RV64-NEXT: vsll.vi v27, v25, 8 319; LMULMAX1-RV64-NEXT: lui a1, 4080 320; LMULMAX1-RV64-NEXT: vand.vx v27, v27, a1 321; LMULMAX1-RV64-NEXT: vsll.vi v25, v25, 24 322; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 323; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 324; LMULMAX1-RV64-NEXT: lui a1, 61681 325; LMULMAX1-RV64-NEXT: addiw a1, a1, -241 326; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1 327; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 4 328; LMULMAX1-RV64-NEXT: lui a1, 241 329; LMULMAX1-RV64-NEXT: addiw a1, a1, -241 330; LMULMAX1-RV64-NEXT: slli a1, a1, 12 331; LMULMAX1-RV64-NEXT: addi a1, a1, 240 332; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 333; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 4 334; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 335; LMULMAX1-RV64-NEXT: lui a1, 209715 336; LMULMAX1-RV64-NEXT: addiw a1, a1, 819 337; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1 338; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 2 339; LMULMAX1-RV64-NEXT: lui a1, 205 340; LMULMAX1-RV64-NEXT: addiw a1, a1, -819 341; LMULMAX1-RV64-NEXT: slli a1, a1, 12 342; LMULMAX1-RV64-NEXT: addi a1, a1, -820 343; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 344; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 2 345; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 346; LMULMAX1-RV64-NEXT: lui a1, 349525 347; LMULMAX1-RV64-NEXT: addiw a1, a1, 1365 348; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1 349; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 1 350; LMULMAX1-RV64-NEXT: lui a1, 171 351; LMULMAX1-RV64-NEXT: addiw a1, a1, -1365 352; LMULMAX1-RV64-NEXT: slli a1, a1, 12 353; LMULMAX1-RV64-NEXT: addi a1, a1, -1366 354; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 355; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 1 356; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 357; LMULMAX1-RV64-NEXT: vse32.v v25, (a0) 358; LMULMAX1-RV64-NEXT: ret 359 %a = load <4 x i32>, <4 x i32>* %x 360 %b = load <4 x i32>, <4 x i32>* %y 361 %c = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 362 store <4 x i32> %c, <4 x i32>* %x 363 ret void 364} 365declare <4 x i32> @llvm.bitreverse.v4i32(<4 x i32>) 366 367define void @bitreverse_v2i64(<2 x i64>* %x, <2 x i64>* %y) { 368; LMULMAX2-RV32-LABEL: bitreverse_v2i64: 369; LMULMAX2-RV32: # %bb.0: 370; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 371; LMULMAX2-RV32-NEXT: vle64.v v25, (a0) 372; LMULMAX2-RV32-NEXT: addi a6, zero, 56 373; LMULMAX2-RV32-NEXT: vsrl.vx v26, v25, a6 374; LMULMAX2-RV32-NEXT: addi a2, zero, 40 375; LMULMAX2-RV32-NEXT: vsrl.vx v27, v25, a2 376; LMULMAX2-RV32-NEXT: lui a3, 16 377; LMULMAX2-RV32-NEXT: addi a3, a3, -256 378; LMULMAX2-RV32-NEXT: vand.vx v27, v27, a3 379; LMULMAX2-RV32-NEXT: vor.vv v26, v27, v26 380; LMULMAX2-RV32-NEXT: vsrl.vi v27, v25, 24 381; LMULMAX2-RV32-NEXT: lui a4, 4080 382; LMULMAX2-RV32-NEXT: vand.vx v27, v27, a4 383; LMULMAX2-RV32-NEXT: addi a5, zero, 5 384; LMULMAX2-RV32-NEXT: vsetivli a1, 1, e8,m1,ta,mu 385; LMULMAX2-RV32-NEXT: vmv.s.x v0, a5 386; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e32,m1,ta,mu 387; LMULMAX2-RV32-NEXT: vmv.v.i v28, 0 388; LMULMAX2-RV32-NEXT: lui a1, 1044480 389; LMULMAX2-RV32-NEXT: vmerge.vxm v28, v28, a1, v0 390; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 391; LMULMAX2-RV32-NEXT: vsrl.vi v29, v25, 8 392; LMULMAX2-RV32-NEXT: vand.vv v28, v29, v28 393; LMULMAX2-RV32-NEXT: vor.vv v27, v28, v27 394; LMULMAX2-RV32-NEXT: vor.vv v26, v27, v26 395; LMULMAX2-RV32-NEXT: addi a1, zero, 255 396; LMULMAX2-RV32-NEXT: vsetivli a5, 4, e32,m1,ta,mu 397; LMULMAX2-RV32-NEXT: vmv.v.x v27, a1 398; LMULMAX2-RV32-NEXT: vmerge.vim v27, v27, 0, v0 399; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 400; LMULMAX2-RV32-NEXT: vsll.vi v28, v25, 8 401; LMULMAX2-RV32-NEXT: vand.vv v27, v28, v27 402; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e32,m1,ta,mu 403; LMULMAX2-RV32-NEXT: vmv.v.x v28, a3 404; LMULMAX2-RV32-NEXT: vmerge.vim v28, v28, 0, v0 405; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 406; LMULMAX2-RV32-NEXT: vsll.vi v29, v25, 24 407; LMULMAX2-RV32-NEXT: vand.vv v28, v29, v28 408; LMULMAX2-RV32-NEXT: vor.vv v27, v28, v27 409; LMULMAX2-RV32-NEXT: vsll.vx v28, v25, a2 410; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e32,m1,ta,mu 411; LMULMAX2-RV32-NEXT: vmv.v.x v29, a4 412; LMULMAX2-RV32-NEXT: vmerge.vim v29, v29, 0, v0 413; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 414; LMULMAX2-RV32-NEXT: vand.vv v28, v28, v29 415; LMULMAX2-RV32-NEXT: vsll.vx v25, v25, a6 416; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v28 417; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v27 418; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 419; LMULMAX2-RV32-NEXT: lui a1, 61681 420; LMULMAX2-RV32-NEXT: addi a1, a1, -241 421; LMULMAX2-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 422; LMULMAX2-RV32-NEXT: vmv.v.x v26, a1 423; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 424; LMULMAX2-RV32-NEXT: vand.vv v26, v25, v26 425; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 4 426; LMULMAX2-RV32-NEXT: lui a1, 986895 427; LMULMAX2-RV32-NEXT: addi a1, a1, 240 428; LMULMAX2-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 429; LMULMAX2-RV32-NEXT: vmv.v.x v27, a1 430; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 431; LMULMAX2-RV32-NEXT: vand.vv v25, v25, v27 432; LMULMAX2-RV32-NEXT: vsrl.vi v25, v25, 4 433; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 434; LMULMAX2-RV32-NEXT: lui a1, 209715 435; LMULMAX2-RV32-NEXT: addi a1, a1, 819 436; LMULMAX2-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 437; LMULMAX2-RV32-NEXT: vmv.v.x v26, a1 438; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 439; LMULMAX2-RV32-NEXT: vand.vv v26, v25, v26 440; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 2 441; LMULMAX2-RV32-NEXT: lui a1, 838861 442; LMULMAX2-RV32-NEXT: addi a1, a1, -820 443; LMULMAX2-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 444; LMULMAX2-RV32-NEXT: vmv.v.x v27, a1 445; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 446; LMULMAX2-RV32-NEXT: vand.vv v25, v25, v27 447; LMULMAX2-RV32-NEXT: vsrl.vi v25, v25, 2 448; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 449; LMULMAX2-RV32-NEXT: lui a1, 349525 450; LMULMAX2-RV32-NEXT: addi a1, a1, 1365 451; LMULMAX2-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 452; LMULMAX2-RV32-NEXT: vmv.v.x v26, a1 453; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 454; LMULMAX2-RV32-NEXT: vand.vv v26, v25, v26 455; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 1 456; LMULMAX2-RV32-NEXT: lui a1, 699051 457; LMULMAX2-RV32-NEXT: addi a1, a1, -1366 458; LMULMAX2-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 459; LMULMAX2-RV32-NEXT: vmv.v.x v27, a1 460; LMULMAX2-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 461; LMULMAX2-RV32-NEXT: vand.vv v25, v25, v27 462; LMULMAX2-RV32-NEXT: vsrl.vi v25, v25, 1 463; LMULMAX2-RV32-NEXT: vor.vv v25, v25, v26 464; LMULMAX2-RV32-NEXT: vse64.v v25, (a0) 465; LMULMAX2-RV32-NEXT: ret 466; 467; LMULMAX2-RV64-LABEL: bitreverse_v2i64: 468; LMULMAX2-RV64: # %bb.0: 469; LMULMAX2-RV64-NEXT: vsetivli a1, 2, e64,m1,ta,mu 470; LMULMAX2-RV64-NEXT: vle64.v v25, (a0) 471; LMULMAX2-RV64-NEXT: addi a1, zero, 56 472; LMULMAX2-RV64-NEXT: vsrl.vx v26, v25, a1 473; LMULMAX2-RV64-NEXT: addi a2, zero, 40 474; LMULMAX2-RV64-NEXT: vsrl.vx v27, v25, a2 475; LMULMAX2-RV64-NEXT: lui a3, 16 476; LMULMAX2-RV64-NEXT: addiw a3, a3, -256 477; LMULMAX2-RV64-NEXT: vand.vx v27, v27, a3 478; LMULMAX2-RV64-NEXT: vor.vv v26, v27, v26 479; LMULMAX2-RV64-NEXT: vsrl.vi v27, v25, 24 480; LMULMAX2-RV64-NEXT: lui a3, 4080 481; LMULMAX2-RV64-NEXT: vand.vx v27, v27, a3 482; LMULMAX2-RV64-NEXT: vsrl.vi v28, v25, 8 483; LMULMAX2-RV64-NEXT: addi a3, zero, 255 484; LMULMAX2-RV64-NEXT: slli a4, a3, 24 485; LMULMAX2-RV64-NEXT: vand.vx v28, v28, a4 486; LMULMAX2-RV64-NEXT: vor.vv v27, v28, v27 487; LMULMAX2-RV64-NEXT: vor.vv v26, v27, v26 488; LMULMAX2-RV64-NEXT: vsll.vi v27, v25, 8 489; LMULMAX2-RV64-NEXT: slli a4, a3, 32 490; LMULMAX2-RV64-NEXT: vand.vx v27, v27, a4 491; LMULMAX2-RV64-NEXT: vsll.vi v28, v25, 24 492; LMULMAX2-RV64-NEXT: slli a4, a3, 40 493; LMULMAX2-RV64-NEXT: vand.vx v28, v28, a4 494; LMULMAX2-RV64-NEXT: vor.vv v27, v28, v27 495; LMULMAX2-RV64-NEXT: vsll.vx v28, v25, a1 496; LMULMAX2-RV64-NEXT: vsll.vx v25, v25, a2 497; LMULMAX2-RV64-NEXT: slli a1, a3, 48 498; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 499; LMULMAX2-RV64-NEXT: vor.vv v25, v28, v25 500; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v27 501; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 502; LMULMAX2-RV64-NEXT: lui a1, 3855 503; LMULMAX2-RV64-NEXT: addiw a1, a1, 241 504; LMULMAX2-RV64-NEXT: slli a1, a1, 12 505; LMULMAX2-RV64-NEXT: addi a1, a1, -241 506; LMULMAX2-RV64-NEXT: slli a1, a1, 12 507; LMULMAX2-RV64-NEXT: addi a1, a1, 241 508; LMULMAX2-RV64-NEXT: slli a1, a1, 12 509; LMULMAX2-RV64-NEXT: addi a1, a1, -241 510; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1 511; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 4 512; LMULMAX2-RV64-NEXT: lui a1, 1044721 513; LMULMAX2-RV64-NEXT: addiw a1, a1, -241 514; LMULMAX2-RV64-NEXT: slli a1, a1, 12 515; LMULMAX2-RV64-NEXT: addi a1, a1, 241 516; LMULMAX2-RV64-NEXT: slli a1, a1, 12 517; LMULMAX2-RV64-NEXT: addi a1, a1, -241 518; LMULMAX2-RV64-NEXT: slli a1, a1, 12 519; LMULMAX2-RV64-NEXT: addi a1, a1, 240 520; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 521; LMULMAX2-RV64-NEXT: vsrl.vi v25, v25, 4 522; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 523; LMULMAX2-RV64-NEXT: lui a1, 13107 524; LMULMAX2-RV64-NEXT: addiw a1, a1, 819 525; LMULMAX2-RV64-NEXT: slli a1, a1, 12 526; LMULMAX2-RV64-NEXT: addi a1, a1, 819 527; LMULMAX2-RV64-NEXT: slli a1, a1, 12 528; LMULMAX2-RV64-NEXT: addi a1, a1, 819 529; LMULMAX2-RV64-NEXT: slli a1, a1, 12 530; LMULMAX2-RV64-NEXT: addi a1, a1, 819 531; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1 532; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 2 533; LMULMAX2-RV64-NEXT: lui a1, 1035469 534; LMULMAX2-RV64-NEXT: addiw a1, a1, -819 535; LMULMAX2-RV64-NEXT: slli a1, a1, 12 536; LMULMAX2-RV64-NEXT: addi a1, a1, -819 537; LMULMAX2-RV64-NEXT: slli a1, a1, 12 538; LMULMAX2-RV64-NEXT: addi a1, a1, -819 539; LMULMAX2-RV64-NEXT: slli a1, a1, 12 540; LMULMAX2-RV64-NEXT: addi a1, a1, -820 541; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 542; LMULMAX2-RV64-NEXT: vsrl.vi v25, v25, 2 543; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 544; LMULMAX2-RV64-NEXT: lui a1, 21845 545; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365 546; LMULMAX2-RV64-NEXT: slli a1, a1, 12 547; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 548; LMULMAX2-RV64-NEXT: slli a1, a1, 12 549; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 550; LMULMAX2-RV64-NEXT: slli a1, a1, 12 551; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 552; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1 553; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 1 554; LMULMAX2-RV64-NEXT: lui a1, 1026731 555; LMULMAX2-RV64-NEXT: addiw a1, a1, -1365 556; LMULMAX2-RV64-NEXT: slli a1, a1, 12 557; LMULMAX2-RV64-NEXT: addi a1, a1, -1365 558; LMULMAX2-RV64-NEXT: slli a1, a1, 12 559; LMULMAX2-RV64-NEXT: addi a1, a1, -1365 560; LMULMAX2-RV64-NEXT: slli a1, a1, 12 561; LMULMAX2-RV64-NEXT: addi a1, a1, -1366 562; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1 563; LMULMAX2-RV64-NEXT: vsrl.vi v25, v25, 1 564; LMULMAX2-RV64-NEXT: vor.vv v25, v25, v26 565; LMULMAX2-RV64-NEXT: vse64.v v25, (a0) 566; LMULMAX2-RV64-NEXT: ret 567; 568; LMULMAX1-RV32-LABEL: bitreverse_v2i64: 569; LMULMAX1-RV32: # %bb.0: 570; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 571; LMULMAX1-RV32-NEXT: vle64.v v25, (a0) 572; LMULMAX1-RV32-NEXT: addi a6, zero, 56 573; LMULMAX1-RV32-NEXT: vsrl.vx v26, v25, a6 574; LMULMAX1-RV32-NEXT: addi a2, zero, 40 575; LMULMAX1-RV32-NEXT: vsrl.vx v27, v25, a2 576; LMULMAX1-RV32-NEXT: lui a3, 16 577; LMULMAX1-RV32-NEXT: addi a3, a3, -256 578; LMULMAX1-RV32-NEXT: vand.vx v27, v27, a3 579; LMULMAX1-RV32-NEXT: vor.vv v26, v27, v26 580; LMULMAX1-RV32-NEXT: vsrl.vi v27, v25, 24 581; LMULMAX1-RV32-NEXT: lui a4, 4080 582; LMULMAX1-RV32-NEXT: vand.vx v27, v27, a4 583; LMULMAX1-RV32-NEXT: addi a5, zero, 5 584; LMULMAX1-RV32-NEXT: vsetivli a1, 1, e8,m1,ta,mu 585; LMULMAX1-RV32-NEXT: vmv.s.x v0, a5 586; LMULMAX1-RV32-NEXT: vsetivli a1, 4, e32,m1,ta,mu 587; LMULMAX1-RV32-NEXT: vmv.v.i v28, 0 588; LMULMAX1-RV32-NEXT: lui a1, 1044480 589; LMULMAX1-RV32-NEXT: vmerge.vxm v28, v28, a1, v0 590; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 591; LMULMAX1-RV32-NEXT: vsrl.vi v29, v25, 8 592; LMULMAX1-RV32-NEXT: vand.vv v28, v29, v28 593; LMULMAX1-RV32-NEXT: vor.vv v27, v28, v27 594; LMULMAX1-RV32-NEXT: vor.vv v26, v27, v26 595; LMULMAX1-RV32-NEXT: addi a1, zero, 255 596; LMULMAX1-RV32-NEXT: vsetivli a5, 4, e32,m1,ta,mu 597; LMULMAX1-RV32-NEXT: vmv.v.x v27, a1 598; LMULMAX1-RV32-NEXT: vmerge.vim v27, v27, 0, v0 599; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 600; LMULMAX1-RV32-NEXT: vsll.vi v28, v25, 8 601; LMULMAX1-RV32-NEXT: vand.vv v27, v28, v27 602; LMULMAX1-RV32-NEXT: vsetivli a1, 4, e32,m1,ta,mu 603; LMULMAX1-RV32-NEXT: vmv.v.x v28, a3 604; LMULMAX1-RV32-NEXT: vmerge.vim v28, v28, 0, v0 605; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 606; LMULMAX1-RV32-NEXT: vsll.vi v29, v25, 24 607; LMULMAX1-RV32-NEXT: vand.vv v28, v29, v28 608; LMULMAX1-RV32-NEXT: vor.vv v27, v28, v27 609; LMULMAX1-RV32-NEXT: vsll.vx v28, v25, a2 610; LMULMAX1-RV32-NEXT: vsetivli a1, 4, e32,m1,ta,mu 611; LMULMAX1-RV32-NEXT: vmv.v.x v29, a4 612; LMULMAX1-RV32-NEXT: vmerge.vim v29, v29, 0, v0 613; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 614; LMULMAX1-RV32-NEXT: vand.vv v28, v28, v29 615; LMULMAX1-RV32-NEXT: vsll.vx v25, v25, a6 616; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v28 617; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 618; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 619; LMULMAX1-RV32-NEXT: lui a1, 61681 620; LMULMAX1-RV32-NEXT: addi a1, a1, -241 621; LMULMAX1-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 622; LMULMAX1-RV32-NEXT: vmv.v.x v26, a1 623; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 624; LMULMAX1-RV32-NEXT: vand.vv v26, v25, v26 625; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 4 626; LMULMAX1-RV32-NEXT: lui a1, 986895 627; LMULMAX1-RV32-NEXT: addi a1, a1, 240 628; LMULMAX1-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 629; LMULMAX1-RV32-NEXT: vmv.v.x v27, a1 630; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 631; LMULMAX1-RV32-NEXT: vand.vv v25, v25, v27 632; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 4 633; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 634; LMULMAX1-RV32-NEXT: lui a1, 209715 635; LMULMAX1-RV32-NEXT: addi a1, a1, 819 636; LMULMAX1-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 637; LMULMAX1-RV32-NEXT: vmv.v.x v26, a1 638; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 639; LMULMAX1-RV32-NEXT: vand.vv v26, v25, v26 640; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 2 641; LMULMAX1-RV32-NEXT: lui a1, 838861 642; LMULMAX1-RV32-NEXT: addi a1, a1, -820 643; LMULMAX1-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 644; LMULMAX1-RV32-NEXT: vmv.v.x v27, a1 645; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 646; LMULMAX1-RV32-NEXT: vand.vv v25, v25, v27 647; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 2 648; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 649; LMULMAX1-RV32-NEXT: lui a1, 349525 650; LMULMAX1-RV32-NEXT: addi a1, a1, 1365 651; LMULMAX1-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 652; LMULMAX1-RV32-NEXT: vmv.v.x v26, a1 653; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 654; LMULMAX1-RV32-NEXT: vand.vv v26, v25, v26 655; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 1 656; LMULMAX1-RV32-NEXT: lui a1, 699051 657; LMULMAX1-RV32-NEXT: addi a1, a1, -1366 658; LMULMAX1-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 659; LMULMAX1-RV32-NEXT: vmv.v.x v27, a1 660; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 661; LMULMAX1-RV32-NEXT: vand.vv v25, v25, v27 662; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 1 663; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 664; LMULMAX1-RV32-NEXT: vse64.v v25, (a0) 665; LMULMAX1-RV32-NEXT: ret 666; 667; LMULMAX1-RV64-LABEL: bitreverse_v2i64: 668; LMULMAX1-RV64: # %bb.0: 669; LMULMAX1-RV64-NEXT: vsetivli a1, 2, e64,m1,ta,mu 670; LMULMAX1-RV64-NEXT: vle64.v v25, (a0) 671; LMULMAX1-RV64-NEXT: addi a1, zero, 56 672; LMULMAX1-RV64-NEXT: vsrl.vx v26, v25, a1 673; LMULMAX1-RV64-NEXT: addi a2, zero, 40 674; LMULMAX1-RV64-NEXT: vsrl.vx v27, v25, a2 675; LMULMAX1-RV64-NEXT: lui a3, 16 676; LMULMAX1-RV64-NEXT: addiw a3, a3, -256 677; LMULMAX1-RV64-NEXT: vand.vx v27, v27, a3 678; LMULMAX1-RV64-NEXT: vor.vv v26, v27, v26 679; LMULMAX1-RV64-NEXT: vsrl.vi v27, v25, 24 680; LMULMAX1-RV64-NEXT: lui a3, 4080 681; LMULMAX1-RV64-NEXT: vand.vx v27, v27, a3 682; LMULMAX1-RV64-NEXT: vsrl.vi v28, v25, 8 683; LMULMAX1-RV64-NEXT: addi a3, zero, 255 684; LMULMAX1-RV64-NEXT: slli a4, a3, 24 685; LMULMAX1-RV64-NEXT: vand.vx v28, v28, a4 686; LMULMAX1-RV64-NEXT: vor.vv v27, v28, v27 687; LMULMAX1-RV64-NEXT: vor.vv v26, v27, v26 688; LMULMAX1-RV64-NEXT: vsll.vi v27, v25, 8 689; LMULMAX1-RV64-NEXT: slli a4, a3, 32 690; LMULMAX1-RV64-NEXT: vand.vx v27, v27, a4 691; LMULMAX1-RV64-NEXT: vsll.vi v28, v25, 24 692; LMULMAX1-RV64-NEXT: slli a4, a3, 40 693; LMULMAX1-RV64-NEXT: vand.vx v28, v28, a4 694; LMULMAX1-RV64-NEXT: vor.vv v27, v28, v27 695; LMULMAX1-RV64-NEXT: vsll.vx v28, v25, a1 696; LMULMAX1-RV64-NEXT: vsll.vx v25, v25, a2 697; LMULMAX1-RV64-NEXT: slli a1, a3, 48 698; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 699; LMULMAX1-RV64-NEXT: vor.vv v25, v28, v25 700; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 701; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 702; LMULMAX1-RV64-NEXT: lui a1, 3855 703; LMULMAX1-RV64-NEXT: addiw a1, a1, 241 704; LMULMAX1-RV64-NEXT: slli a1, a1, 12 705; LMULMAX1-RV64-NEXT: addi a1, a1, -241 706; LMULMAX1-RV64-NEXT: slli a1, a1, 12 707; LMULMAX1-RV64-NEXT: addi a1, a1, 241 708; LMULMAX1-RV64-NEXT: slli a1, a1, 12 709; LMULMAX1-RV64-NEXT: addi a1, a1, -241 710; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1 711; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 4 712; LMULMAX1-RV64-NEXT: lui a1, 1044721 713; LMULMAX1-RV64-NEXT: addiw a1, a1, -241 714; LMULMAX1-RV64-NEXT: slli a1, a1, 12 715; LMULMAX1-RV64-NEXT: addi a1, a1, 241 716; LMULMAX1-RV64-NEXT: slli a1, a1, 12 717; LMULMAX1-RV64-NEXT: addi a1, a1, -241 718; LMULMAX1-RV64-NEXT: slli a1, a1, 12 719; LMULMAX1-RV64-NEXT: addi a1, a1, 240 720; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 721; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 4 722; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 723; LMULMAX1-RV64-NEXT: lui a1, 13107 724; LMULMAX1-RV64-NEXT: addiw a1, a1, 819 725; LMULMAX1-RV64-NEXT: slli a1, a1, 12 726; LMULMAX1-RV64-NEXT: addi a1, a1, 819 727; LMULMAX1-RV64-NEXT: slli a1, a1, 12 728; LMULMAX1-RV64-NEXT: addi a1, a1, 819 729; LMULMAX1-RV64-NEXT: slli a1, a1, 12 730; LMULMAX1-RV64-NEXT: addi a1, a1, 819 731; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1 732; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 2 733; LMULMAX1-RV64-NEXT: lui a1, 1035469 734; LMULMAX1-RV64-NEXT: addiw a1, a1, -819 735; LMULMAX1-RV64-NEXT: slli a1, a1, 12 736; LMULMAX1-RV64-NEXT: addi a1, a1, -819 737; LMULMAX1-RV64-NEXT: slli a1, a1, 12 738; LMULMAX1-RV64-NEXT: addi a1, a1, -819 739; LMULMAX1-RV64-NEXT: slli a1, a1, 12 740; LMULMAX1-RV64-NEXT: addi a1, a1, -820 741; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 742; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 2 743; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 744; LMULMAX1-RV64-NEXT: lui a1, 21845 745; LMULMAX1-RV64-NEXT: addiw a1, a1, 1365 746; LMULMAX1-RV64-NEXT: slli a1, a1, 12 747; LMULMAX1-RV64-NEXT: addi a1, a1, 1365 748; LMULMAX1-RV64-NEXT: slli a1, a1, 12 749; LMULMAX1-RV64-NEXT: addi a1, a1, 1365 750; LMULMAX1-RV64-NEXT: slli a1, a1, 12 751; LMULMAX1-RV64-NEXT: addi a1, a1, 1365 752; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1 753; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 1 754; LMULMAX1-RV64-NEXT: lui a1, 1026731 755; LMULMAX1-RV64-NEXT: addiw a1, a1, -1365 756; LMULMAX1-RV64-NEXT: slli a1, a1, 12 757; LMULMAX1-RV64-NEXT: addi a1, a1, -1365 758; LMULMAX1-RV64-NEXT: slli a1, a1, 12 759; LMULMAX1-RV64-NEXT: addi a1, a1, -1365 760; LMULMAX1-RV64-NEXT: slli a1, a1, 12 761; LMULMAX1-RV64-NEXT: addi a1, a1, -1366 762; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 763; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 1 764; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v26 765; LMULMAX1-RV64-NEXT: vse64.v v25, (a0) 766; LMULMAX1-RV64-NEXT: ret 767 %a = load <2 x i64>, <2 x i64>* %x 768 %b = load <2 x i64>, <2 x i64>* %y 769 %c = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 770 store <2 x i64> %c, <2 x i64>* %x 771 ret void 772} 773declare <2 x i64> @llvm.bitreverse.v2i64(<2 x i64>) 774 775define void @bitreverse_v16i16(<16 x i16>* %x, <16 x i16>* %y) { 776; LMULMAX2-RV32-LABEL: bitreverse_v16i16: 777; LMULMAX2-RV32: # %bb.0: 778; LMULMAX2-RV32-NEXT: vsetivli a1, 16, e16,m2,ta,mu 779; LMULMAX2-RV32-NEXT: vle16.v v26, (a0) 780; LMULMAX2-RV32-NEXT: vsrl.vi v28, v26, 8 781; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 8 782; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 783; LMULMAX2-RV32-NEXT: lui a1, 1 784; LMULMAX2-RV32-NEXT: addi a1, a1, -241 785; LMULMAX2-RV32-NEXT: vand.vx v28, v26, a1 786; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 4 787; LMULMAX2-RV32-NEXT: lui a1, 15 788; LMULMAX2-RV32-NEXT: addi a1, a1, 240 789; LMULMAX2-RV32-NEXT: vand.vx v26, v26, a1 790; LMULMAX2-RV32-NEXT: vsrl.vi v26, v26, 4 791; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 792; LMULMAX2-RV32-NEXT: lui a1, 3 793; LMULMAX2-RV32-NEXT: addi a1, a1, 819 794; LMULMAX2-RV32-NEXT: vand.vx v28, v26, a1 795; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 2 796; LMULMAX2-RV32-NEXT: lui a1, 13 797; LMULMAX2-RV32-NEXT: addi a1, a1, -820 798; LMULMAX2-RV32-NEXT: vand.vx v26, v26, a1 799; LMULMAX2-RV32-NEXT: vsrl.vi v26, v26, 2 800; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 801; LMULMAX2-RV32-NEXT: lui a1, 5 802; LMULMAX2-RV32-NEXT: addi a1, a1, 1365 803; LMULMAX2-RV32-NEXT: vand.vx v28, v26, a1 804; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 1 805; LMULMAX2-RV32-NEXT: lui a1, 11 806; LMULMAX2-RV32-NEXT: addi a1, a1, -1366 807; LMULMAX2-RV32-NEXT: vand.vx v26, v26, a1 808; LMULMAX2-RV32-NEXT: vsrl.vi v26, v26, 1 809; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 810; LMULMAX2-RV32-NEXT: vse16.v v26, (a0) 811; LMULMAX2-RV32-NEXT: ret 812; 813; LMULMAX2-RV64-LABEL: bitreverse_v16i16: 814; LMULMAX2-RV64: # %bb.0: 815; LMULMAX2-RV64-NEXT: vsetivli a1, 16, e16,m2,ta,mu 816; LMULMAX2-RV64-NEXT: vle16.v v26, (a0) 817; LMULMAX2-RV64-NEXT: vsrl.vi v28, v26, 8 818; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 8 819; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 820; LMULMAX2-RV64-NEXT: lui a1, 1 821; LMULMAX2-RV64-NEXT: addiw a1, a1, -241 822; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1 823; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 4 824; LMULMAX2-RV64-NEXT: lui a1, 15 825; LMULMAX2-RV64-NEXT: addiw a1, a1, 240 826; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 827; LMULMAX2-RV64-NEXT: vsrl.vi v26, v26, 4 828; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 829; LMULMAX2-RV64-NEXT: lui a1, 3 830; LMULMAX2-RV64-NEXT: addiw a1, a1, 819 831; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1 832; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 2 833; LMULMAX2-RV64-NEXT: lui a1, 13 834; LMULMAX2-RV64-NEXT: addiw a1, a1, -820 835; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 836; LMULMAX2-RV64-NEXT: vsrl.vi v26, v26, 2 837; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 838; LMULMAX2-RV64-NEXT: lui a1, 5 839; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365 840; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1 841; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 1 842; LMULMAX2-RV64-NEXT: lui a1, 11 843; LMULMAX2-RV64-NEXT: addiw a1, a1, -1366 844; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 845; LMULMAX2-RV64-NEXT: vsrl.vi v26, v26, 1 846; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 847; LMULMAX2-RV64-NEXT: vse16.v v26, (a0) 848; LMULMAX2-RV64-NEXT: ret 849; 850; LMULMAX1-RV32-LABEL: bitreverse_v16i16: 851; LMULMAX1-RV32: # %bb.0: 852; LMULMAX1-RV32-NEXT: vsetivli a1, 8, e16,m1,ta,mu 853; LMULMAX1-RV32-NEXT: addi a6, a0, 16 854; LMULMAX1-RV32-NEXT: vle16.v v25, (a6) 855; LMULMAX1-RV32-NEXT: vle16.v v26, (a0) 856; LMULMAX1-RV32-NEXT: vsrl.vi v27, v25, 8 857; LMULMAX1-RV32-NEXT: vsll.vi v25, v25, 8 858; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 859; LMULMAX1-RV32-NEXT: lui a2, 1 860; LMULMAX1-RV32-NEXT: addi a7, a2, -241 861; LMULMAX1-RV32-NEXT: vand.vx v27, v25, a7 862; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 4 863; LMULMAX1-RV32-NEXT: lui a3, 15 864; LMULMAX1-RV32-NEXT: addi a3, a3, 240 865; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a3 866; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 4 867; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 868; LMULMAX1-RV32-NEXT: lui a4, 3 869; LMULMAX1-RV32-NEXT: addi a4, a4, 819 870; LMULMAX1-RV32-NEXT: vand.vx v27, v25, a4 871; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 2 872; LMULMAX1-RV32-NEXT: lui a5, 13 873; LMULMAX1-RV32-NEXT: addi a5, a5, -820 874; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a5 875; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 2 876; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 877; LMULMAX1-RV32-NEXT: lui a1, 5 878; LMULMAX1-RV32-NEXT: addi a1, a1, 1365 879; LMULMAX1-RV32-NEXT: vand.vx v27, v25, a1 880; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 1 881; LMULMAX1-RV32-NEXT: lui a2, 11 882; LMULMAX1-RV32-NEXT: addi a2, a2, -1366 883; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a2 884; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 1 885; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 886; LMULMAX1-RV32-NEXT: vsrl.vi v27, v26, 8 887; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 8 888; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27 889; LMULMAX1-RV32-NEXT: vand.vx v27, v26, a7 890; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 4 891; LMULMAX1-RV32-NEXT: vand.vx v26, v26, a3 892; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 4 893; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27 894; LMULMAX1-RV32-NEXT: vand.vx v27, v26, a4 895; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 2 896; LMULMAX1-RV32-NEXT: vand.vx v26, v26, a5 897; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 2 898; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27 899; LMULMAX1-RV32-NEXT: vand.vx v27, v26, a1 900; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 1 901; LMULMAX1-RV32-NEXT: vand.vx v26, v26, a2 902; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 1 903; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27 904; LMULMAX1-RV32-NEXT: vse16.v v26, (a0) 905; LMULMAX1-RV32-NEXT: vse16.v v25, (a6) 906; LMULMAX1-RV32-NEXT: ret 907; 908; LMULMAX1-RV64-LABEL: bitreverse_v16i16: 909; LMULMAX1-RV64: # %bb.0: 910; LMULMAX1-RV64-NEXT: vsetivli a1, 8, e16,m1,ta,mu 911; LMULMAX1-RV64-NEXT: addi a6, a0, 16 912; LMULMAX1-RV64-NEXT: vle16.v v25, (a6) 913; LMULMAX1-RV64-NEXT: vle16.v v26, (a0) 914; LMULMAX1-RV64-NEXT: vsrl.vi v27, v25, 8 915; LMULMAX1-RV64-NEXT: vsll.vi v25, v25, 8 916; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 917; LMULMAX1-RV64-NEXT: lui a2, 1 918; LMULMAX1-RV64-NEXT: addiw a7, a2, -241 919; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a7 920; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 4 921; LMULMAX1-RV64-NEXT: lui a3, 15 922; LMULMAX1-RV64-NEXT: addiw a3, a3, 240 923; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a3 924; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 4 925; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 926; LMULMAX1-RV64-NEXT: lui a4, 3 927; LMULMAX1-RV64-NEXT: addiw a4, a4, 819 928; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a4 929; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 2 930; LMULMAX1-RV64-NEXT: lui a5, 13 931; LMULMAX1-RV64-NEXT: addiw a5, a5, -820 932; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a5 933; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 2 934; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 935; LMULMAX1-RV64-NEXT: lui a1, 5 936; LMULMAX1-RV64-NEXT: addiw a1, a1, 1365 937; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a1 938; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1 939; LMULMAX1-RV64-NEXT: lui a2, 11 940; LMULMAX1-RV64-NEXT: addiw a2, a2, -1366 941; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a2 942; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 1 943; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 944; LMULMAX1-RV64-NEXT: vsrl.vi v27, v26, 8 945; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 8 946; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 947; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a7 948; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 4 949; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a3 950; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 4 951; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 952; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a4 953; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 2 954; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a5 955; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 2 956; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 957; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a1 958; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1 959; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a2 960; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 1 961; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 962; LMULMAX1-RV64-NEXT: vse16.v v26, (a0) 963; LMULMAX1-RV64-NEXT: vse16.v v25, (a6) 964; LMULMAX1-RV64-NEXT: ret 965 %a = load <16 x i16>, <16 x i16>* %x 966 %b = load <16 x i16>, <16 x i16>* %y 967 %c = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 968 store <16 x i16> %c, <16 x i16>* %x 969 ret void 970} 971declare <16 x i16> @llvm.bitreverse.v16i16(<16 x i16>) 972 973define void @bitreverse_v8i32(<8 x i32>* %x, <8 x i32>* %y) { 974; LMULMAX2-RV32-LABEL: bitreverse_v8i32: 975; LMULMAX2-RV32: # %bb.0: 976; LMULMAX2-RV32-NEXT: vsetivli a1, 8, e32,m2,ta,mu 977; LMULMAX2-RV32-NEXT: vle32.v v26, (a0) 978; LMULMAX2-RV32-NEXT: vsrl.vi v28, v26, 8 979; LMULMAX2-RV32-NEXT: lui a1, 16 980; LMULMAX2-RV32-NEXT: addi a1, a1, -256 981; LMULMAX2-RV32-NEXT: vand.vx v28, v28, a1 982; LMULMAX2-RV32-NEXT: vsrl.vi v30, v26, 24 983; LMULMAX2-RV32-NEXT: vor.vv v28, v28, v30 984; LMULMAX2-RV32-NEXT: vsll.vi v30, v26, 8 985; LMULMAX2-RV32-NEXT: lui a1, 4080 986; LMULMAX2-RV32-NEXT: vand.vx v30, v30, a1 987; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 24 988; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v30 989; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 990; LMULMAX2-RV32-NEXT: lui a1, 61681 991; LMULMAX2-RV32-NEXT: addi a1, a1, -241 992; LMULMAX2-RV32-NEXT: vand.vx v28, v26, a1 993; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 4 994; LMULMAX2-RV32-NEXT: lui a1, 986895 995; LMULMAX2-RV32-NEXT: addi a1, a1, 240 996; LMULMAX2-RV32-NEXT: vand.vx v26, v26, a1 997; LMULMAX2-RV32-NEXT: vsrl.vi v26, v26, 4 998; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 999; LMULMAX2-RV32-NEXT: lui a1, 209715 1000; LMULMAX2-RV32-NEXT: addi a1, a1, 819 1001; LMULMAX2-RV32-NEXT: vand.vx v28, v26, a1 1002; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 2 1003; LMULMAX2-RV32-NEXT: lui a1, 838861 1004; LMULMAX2-RV32-NEXT: addi a1, a1, -820 1005; LMULMAX2-RV32-NEXT: vand.vx v26, v26, a1 1006; LMULMAX2-RV32-NEXT: vsrl.vi v26, v26, 2 1007; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 1008; LMULMAX2-RV32-NEXT: lui a1, 349525 1009; LMULMAX2-RV32-NEXT: addi a1, a1, 1365 1010; LMULMAX2-RV32-NEXT: vand.vx v28, v26, a1 1011; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 1 1012; LMULMAX2-RV32-NEXT: lui a1, 699051 1013; LMULMAX2-RV32-NEXT: addi a1, a1, -1366 1014; LMULMAX2-RV32-NEXT: vand.vx v26, v26, a1 1015; LMULMAX2-RV32-NEXT: vsrl.vi v26, v26, 1 1016; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 1017; LMULMAX2-RV32-NEXT: vse32.v v26, (a0) 1018; LMULMAX2-RV32-NEXT: ret 1019; 1020; LMULMAX2-RV64-LABEL: bitreverse_v8i32: 1021; LMULMAX2-RV64: # %bb.0: 1022; LMULMAX2-RV64-NEXT: vsetivli a1, 8, e32,m2,ta,mu 1023; LMULMAX2-RV64-NEXT: vle32.v v26, (a0) 1024; LMULMAX2-RV64-NEXT: vsrl.vi v28, v26, 8 1025; LMULMAX2-RV64-NEXT: lui a1, 16 1026; LMULMAX2-RV64-NEXT: addiw a1, a1, -256 1027; LMULMAX2-RV64-NEXT: vand.vx v28, v28, a1 1028; LMULMAX2-RV64-NEXT: vsrl.vi v30, v26, 24 1029; LMULMAX2-RV64-NEXT: vor.vv v28, v28, v30 1030; LMULMAX2-RV64-NEXT: vsll.vi v30, v26, 8 1031; LMULMAX2-RV64-NEXT: lui a1, 4080 1032; LMULMAX2-RV64-NEXT: vand.vx v30, v30, a1 1033; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 24 1034; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v30 1035; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 1036; LMULMAX2-RV64-NEXT: lui a1, 61681 1037; LMULMAX2-RV64-NEXT: addiw a1, a1, -241 1038; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1 1039; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 4 1040; LMULMAX2-RV64-NEXT: lui a1, 241 1041; LMULMAX2-RV64-NEXT: addiw a1, a1, -241 1042; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1043; LMULMAX2-RV64-NEXT: addi a1, a1, 240 1044; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 1045; LMULMAX2-RV64-NEXT: vsrl.vi v26, v26, 4 1046; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 1047; LMULMAX2-RV64-NEXT: lui a1, 209715 1048; LMULMAX2-RV64-NEXT: addiw a1, a1, 819 1049; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1 1050; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 2 1051; LMULMAX2-RV64-NEXT: lui a1, 205 1052; LMULMAX2-RV64-NEXT: addiw a1, a1, -819 1053; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1054; LMULMAX2-RV64-NEXT: addi a1, a1, -820 1055; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 1056; LMULMAX2-RV64-NEXT: vsrl.vi v26, v26, 2 1057; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 1058; LMULMAX2-RV64-NEXT: lui a1, 349525 1059; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365 1060; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1 1061; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 1 1062; LMULMAX2-RV64-NEXT: lui a1, 171 1063; LMULMAX2-RV64-NEXT: addiw a1, a1, -1365 1064; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1065; LMULMAX2-RV64-NEXT: addi a1, a1, -1366 1066; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 1067; LMULMAX2-RV64-NEXT: vsrl.vi v26, v26, 1 1068; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 1069; LMULMAX2-RV64-NEXT: vse32.v v26, (a0) 1070; LMULMAX2-RV64-NEXT: ret 1071; 1072; LMULMAX1-RV32-LABEL: bitreverse_v8i32: 1073; LMULMAX1-RV32: # %bb.0: 1074; LMULMAX1-RV32-NEXT: vsetivli a1, 4, e32,m1,ta,mu 1075; LMULMAX1-RV32-NEXT: addi a7, a0, 16 1076; LMULMAX1-RV32-NEXT: vle32.v v25, (a7) 1077; LMULMAX1-RV32-NEXT: vle32.v v26, (a0) 1078; LMULMAX1-RV32-NEXT: vsrl.vi v27, v25, 8 1079; LMULMAX1-RV32-NEXT: lui a2, 16 1080; LMULMAX1-RV32-NEXT: addi t0, a2, -256 1081; LMULMAX1-RV32-NEXT: vand.vx v27, v27, t0 1082; LMULMAX1-RV32-NEXT: vsrl.vi v28, v25, 24 1083; LMULMAX1-RV32-NEXT: vor.vv v27, v27, v28 1084; LMULMAX1-RV32-NEXT: vsll.vi v28, v25, 8 1085; LMULMAX1-RV32-NEXT: lui a6, 4080 1086; LMULMAX1-RV32-NEXT: vand.vx v28, v28, a6 1087; LMULMAX1-RV32-NEXT: vsll.vi v25, v25, 24 1088; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v28 1089; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 1090; LMULMAX1-RV32-NEXT: lui a4, 61681 1091; LMULMAX1-RV32-NEXT: addi t1, a4, -241 1092; LMULMAX1-RV32-NEXT: vand.vx v27, v25, t1 1093; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 4 1094; LMULMAX1-RV32-NEXT: lui a5, 986895 1095; LMULMAX1-RV32-NEXT: addi a5, a5, 240 1096; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a5 1097; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 4 1098; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 1099; LMULMAX1-RV32-NEXT: lui a3, 209715 1100; LMULMAX1-RV32-NEXT: addi a3, a3, 819 1101; LMULMAX1-RV32-NEXT: vand.vx v27, v25, a3 1102; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 2 1103; LMULMAX1-RV32-NEXT: lui a1, 838861 1104; LMULMAX1-RV32-NEXT: addi a1, a1, -820 1105; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a1 1106; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 2 1107; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 1108; LMULMAX1-RV32-NEXT: lui a2, 349525 1109; LMULMAX1-RV32-NEXT: addi a2, a2, 1365 1110; LMULMAX1-RV32-NEXT: vand.vx v27, v25, a2 1111; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 1 1112; LMULMAX1-RV32-NEXT: lui a4, 699051 1113; LMULMAX1-RV32-NEXT: addi a4, a4, -1366 1114; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a4 1115; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 1 1116; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 1117; LMULMAX1-RV32-NEXT: vsrl.vi v27, v26, 8 1118; LMULMAX1-RV32-NEXT: vand.vx v27, v27, t0 1119; LMULMAX1-RV32-NEXT: vsrl.vi v28, v26, 24 1120; LMULMAX1-RV32-NEXT: vor.vv v27, v27, v28 1121; LMULMAX1-RV32-NEXT: vsll.vi v28, v26, 8 1122; LMULMAX1-RV32-NEXT: vand.vx v28, v28, a6 1123; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 24 1124; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v28 1125; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27 1126; LMULMAX1-RV32-NEXT: vand.vx v27, v26, t1 1127; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 4 1128; LMULMAX1-RV32-NEXT: vand.vx v26, v26, a5 1129; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 4 1130; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27 1131; LMULMAX1-RV32-NEXT: vand.vx v27, v26, a3 1132; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 2 1133; LMULMAX1-RV32-NEXT: vand.vx v26, v26, a1 1134; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 2 1135; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27 1136; LMULMAX1-RV32-NEXT: vand.vx v27, v26, a2 1137; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 1 1138; LMULMAX1-RV32-NEXT: vand.vx v26, v26, a4 1139; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 1 1140; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27 1141; LMULMAX1-RV32-NEXT: vse32.v v26, (a0) 1142; LMULMAX1-RV32-NEXT: vse32.v v25, (a7) 1143; LMULMAX1-RV32-NEXT: ret 1144; 1145; LMULMAX1-RV64-LABEL: bitreverse_v8i32: 1146; LMULMAX1-RV64: # %bb.0: 1147; LMULMAX1-RV64-NEXT: vsetivli a1, 4, e32,m1,ta,mu 1148; LMULMAX1-RV64-NEXT: addi a7, a0, 16 1149; LMULMAX1-RV64-NEXT: vle32.v v25, (a7) 1150; LMULMAX1-RV64-NEXT: vle32.v v26, (a0) 1151; LMULMAX1-RV64-NEXT: vsrl.vi v27, v25, 8 1152; LMULMAX1-RV64-NEXT: lui a2, 16 1153; LMULMAX1-RV64-NEXT: addiw t0, a2, -256 1154; LMULMAX1-RV64-NEXT: vand.vx v27, v27, t0 1155; LMULMAX1-RV64-NEXT: vsrl.vi v28, v25, 24 1156; LMULMAX1-RV64-NEXT: vor.vv v27, v27, v28 1157; LMULMAX1-RV64-NEXT: vsll.vi v28, v25, 8 1158; LMULMAX1-RV64-NEXT: lui a6, 4080 1159; LMULMAX1-RV64-NEXT: vand.vx v28, v28, a6 1160; LMULMAX1-RV64-NEXT: vsll.vi v25, v25, 24 1161; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v28 1162; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 1163; LMULMAX1-RV64-NEXT: lui a4, 61681 1164; LMULMAX1-RV64-NEXT: addiw t1, a4, -241 1165; LMULMAX1-RV64-NEXT: vand.vx v27, v25, t1 1166; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 4 1167; LMULMAX1-RV64-NEXT: lui a5, 241 1168; LMULMAX1-RV64-NEXT: addiw a5, a5, -241 1169; LMULMAX1-RV64-NEXT: slli a5, a5, 12 1170; LMULMAX1-RV64-NEXT: addi a5, a5, 240 1171; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a5 1172; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 4 1173; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 1174; LMULMAX1-RV64-NEXT: lui a3, 209715 1175; LMULMAX1-RV64-NEXT: addiw a3, a3, 819 1176; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a3 1177; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 2 1178; LMULMAX1-RV64-NEXT: lui a1, 205 1179; LMULMAX1-RV64-NEXT: addiw a1, a1, -819 1180; LMULMAX1-RV64-NEXT: slli a1, a1, 12 1181; LMULMAX1-RV64-NEXT: addi a1, a1, -820 1182; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1 1183; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 2 1184; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 1185; LMULMAX1-RV64-NEXT: lui a2, 349525 1186; LMULMAX1-RV64-NEXT: addiw a2, a2, 1365 1187; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a2 1188; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1 1189; LMULMAX1-RV64-NEXT: lui a4, 171 1190; LMULMAX1-RV64-NEXT: addiw a4, a4, -1365 1191; LMULMAX1-RV64-NEXT: slli a4, a4, 12 1192; LMULMAX1-RV64-NEXT: addi a4, a4, -1366 1193; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a4 1194; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 1 1195; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 1196; LMULMAX1-RV64-NEXT: vsrl.vi v27, v26, 8 1197; LMULMAX1-RV64-NEXT: vand.vx v27, v27, t0 1198; LMULMAX1-RV64-NEXT: vsrl.vi v28, v26, 24 1199; LMULMAX1-RV64-NEXT: vor.vv v27, v27, v28 1200; LMULMAX1-RV64-NEXT: vsll.vi v28, v26, 8 1201; LMULMAX1-RV64-NEXT: vand.vx v28, v28, a6 1202; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 24 1203; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v28 1204; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 1205; LMULMAX1-RV64-NEXT: vand.vx v27, v26, t1 1206; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 4 1207; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a5 1208; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 4 1209; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 1210; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a3 1211; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 2 1212; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a1 1213; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 2 1214; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 1215; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a2 1216; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1 1217; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a4 1218; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 1 1219; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 1220; LMULMAX1-RV64-NEXT: vse32.v v26, (a0) 1221; LMULMAX1-RV64-NEXT: vse32.v v25, (a7) 1222; LMULMAX1-RV64-NEXT: ret 1223 %a = load <8 x i32>, <8 x i32>* %x 1224 %b = load <8 x i32>, <8 x i32>* %y 1225 %c = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 1226 store <8 x i32> %c, <8 x i32>* %x 1227 ret void 1228} 1229declare <8 x i32> @llvm.bitreverse.v8i32(<8 x i32>) 1230 1231define void @bitreverse_v4i64(<4 x i64>* %x, <4 x i64>* %y) { 1232; LMULMAX2-RV32-LABEL: bitreverse_v4i64: 1233; LMULMAX2-RV32: # %bb.0: 1234; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1235; LMULMAX2-RV32-NEXT: vle64.v v26, (a0) 1236; LMULMAX2-RV32-NEXT: addi a6, zero, 56 1237; LMULMAX2-RV32-NEXT: vsrl.vx v28, v26, a6 1238; LMULMAX2-RV32-NEXT: addi a2, zero, 40 1239; LMULMAX2-RV32-NEXT: vsrl.vx v30, v26, a2 1240; LMULMAX2-RV32-NEXT: lui a3, 16 1241; LMULMAX2-RV32-NEXT: addi a3, a3, -256 1242; LMULMAX2-RV32-NEXT: vand.vx v30, v30, a3 1243; LMULMAX2-RV32-NEXT: vor.vv v28, v30, v28 1244; LMULMAX2-RV32-NEXT: vsrl.vi v30, v26, 24 1245; LMULMAX2-RV32-NEXT: lui a4, 4080 1246; LMULMAX2-RV32-NEXT: vand.vx v30, v30, a4 1247; LMULMAX2-RV32-NEXT: addi a5, zero, 85 1248; LMULMAX2-RV32-NEXT: vsetivli a1, 1, e8,m1,ta,mu 1249; LMULMAX2-RV32-NEXT: vmv.s.x v0, a5 1250; LMULMAX2-RV32-NEXT: vsetivli a1, 8, e32,m2,ta,mu 1251; LMULMAX2-RV32-NEXT: vmv.v.i v8, 0 1252; LMULMAX2-RV32-NEXT: lui a1, 1044480 1253; LMULMAX2-RV32-NEXT: vmerge.vxm v8, v8, a1, v0 1254; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1255; LMULMAX2-RV32-NEXT: vsrl.vi v10, v26, 8 1256; LMULMAX2-RV32-NEXT: vand.vv v8, v10, v8 1257; LMULMAX2-RV32-NEXT: vor.vv v30, v8, v30 1258; LMULMAX2-RV32-NEXT: vor.vv v28, v30, v28 1259; LMULMAX2-RV32-NEXT: addi a1, zero, 255 1260; LMULMAX2-RV32-NEXT: vsetivli a5, 8, e32,m2,ta,mu 1261; LMULMAX2-RV32-NEXT: vmv.v.x v30, a1 1262; LMULMAX2-RV32-NEXT: vmerge.vim v30, v30, 0, v0 1263; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1264; LMULMAX2-RV32-NEXT: vsll.vi v8, v26, 8 1265; LMULMAX2-RV32-NEXT: vand.vv v30, v8, v30 1266; LMULMAX2-RV32-NEXT: vsetivli a1, 8, e32,m2,ta,mu 1267; LMULMAX2-RV32-NEXT: vmv.v.x v8, a3 1268; LMULMAX2-RV32-NEXT: vmerge.vim v8, v8, 0, v0 1269; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1270; LMULMAX2-RV32-NEXT: vsll.vi v10, v26, 24 1271; LMULMAX2-RV32-NEXT: vand.vv v8, v10, v8 1272; LMULMAX2-RV32-NEXT: vor.vv v30, v8, v30 1273; LMULMAX2-RV32-NEXT: vsll.vx v8, v26, a2 1274; LMULMAX2-RV32-NEXT: vsetivli a1, 8, e32,m2,ta,mu 1275; LMULMAX2-RV32-NEXT: vmv.v.x v10, a4 1276; LMULMAX2-RV32-NEXT: vmerge.vim v10, v10, 0, v0 1277; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1278; LMULMAX2-RV32-NEXT: vand.vv v8, v8, v10 1279; LMULMAX2-RV32-NEXT: vsll.vx v26, v26, a6 1280; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v8 1281; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v30 1282; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 1283; LMULMAX2-RV32-NEXT: lui a1, 61681 1284; LMULMAX2-RV32-NEXT: addi a1, a1, -241 1285; LMULMAX2-RV32-NEXT: vsetivli a2, 8, e32,m2,ta,mu 1286; LMULMAX2-RV32-NEXT: vmv.v.x v28, a1 1287; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1288; LMULMAX2-RV32-NEXT: vand.vv v28, v26, v28 1289; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 4 1290; LMULMAX2-RV32-NEXT: lui a1, 986895 1291; LMULMAX2-RV32-NEXT: addi a1, a1, 240 1292; LMULMAX2-RV32-NEXT: vsetivli a2, 8, e32,m2,ta,mu 1293; LMULMAX2-RV32-NEXT: vmv.v.x v30, a1 1294; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1295; LMULMAX2-RV32-NEXT: vand.vv v26, v26, v30 1296; LMULMAX2-RV32-NEXT: vsrl.vi v26, v26, 4 1297; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 1298; LMULMAX2-RV32-NEXT: lui a1, 209715 1299; LMULMAX2-RV32-NEXT: addi a1, a1, 819 1300; LMULMAX2-RV32-NEXT: vsetivli a2, 8, e32,m2,ta,mu 1301; LMULMAX2-RV32-NEXT: vmv.v.x v28, a1 1302; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1303; LMULMAX2-RV32-NEXT: vand.vv v28, v26, v28 1304; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 2 1305; LMULMAX2-RV32-NEXT: lui a1, 838861 1306; LMULMAX2-RV32-NEXT: addi a1, a1, -820 1307; LMULMAX2-RV32-NEXT: vsetivli a2, 8, e32,m2,ta,mu 1308; LMULMAX2-RV32-NEXT: vmv.v.x v30, a1 1309; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1310; LMULMAX2-RV32-NEXT: vand.vv v26, v26, v30 1311; LMULMAX2-RV32-NEXT: vsrl.vi v26, v26, 2 1312; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 1313; LMULMAX2-RV32-NEXT: lui a1, 349525 1314; LMULMAX2-RV32-NEXT: addi a1, a1, 1365 1315; LMULMAX2-RV32-NEXT: vsetivli a2, 8, e32,m2,ta,mu 1316; LMULMAX2-RV32-NEXT: vmv.v.x v28, a1 1317; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1318; LMULMAX2-RV32-NEXT: vand.vv v28, v26, v28 1319; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 1 1320; LMULMAX2-RV32-NEXT: lui a1, 699051 1321; LMULMAX2-RV32-NEXT: addi a1, a1, -1366 1322; LMULMAX2-RV32-NEXT: vsetivli a2, 8, e32,m2,ta,mu 1323; LMULMAX2-RV32-NEXT: vmv.v.x v30, a1 1324; LMULMAX2-RV32-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1325; LMULMAX2-RV32-NEXT: vand.vv v26, v26, v30 1326; LMULMAX2-RV32-NEXT: vsrl.vi v26, v26, 1 1327; LMULMAX2-RV32-NEXT: vor.vv v26, v26, v28 1328; LMULMAX2-RV32-NEXT: vse64.v v26, (a0) 1329; LMULMAX2-RV32-NEXT: ret 1330; 1331; LMULMAX2-RV64-LABEL: bitreverse_v4i64: 1332; LMULMAX2-RV64: # %bb.0: 1333; LMULMAX2-RV64-NEXT: vsetivli a1, 4, e64,m2,ta,mu 1334; LMULMAX2-RV64-NEXT: vle64.v v26, (a0) 1335; LMULMAX2-RV64-NEXT: addi a1, zero, 56 1336; LMULMAX2-RV64-NEXT: vsrl.vx v28, v26, a1 1337; LMULMAX2-RV64-NEXT: addi a2, zero, 40 1338; LMULMAX2-RV64-NEXT: vsrl.vx v30, v26, a2 1339; LMULMAX2-RV64-NEXT: lui a3, 16 1340; LMULMAX2-RV64-NEXT: addiw a3, a3, -256 1341; LMULMAX2-RV64-NEXT: vand.vx v30, v30, a3 1342; LMULMAX2-RV64-NEXT: vor.vv v28, v30, v28 1343; LMULMAX2-RV64-NEXT: vsrl.vi v30, v26, 24 1344; LMULMAX2-RV64-NEXT: lui a3, 4080 1345; LMULMAX2-RV64-NEXT: vand.vx v30, v30, a3 1346; LMULMAX2-RV64-NEXT: vsrl.vi v8, v26, 8 1347; LMULMAX2-RV64-NEXT: addi a3, zero, 255 1348; LMULMAX2-RV64-NEXT: slli a4, a3, 24 1349; LMULMAX2-RV64-NEXT: vand.vx v8, v8, a4 1350; LMULMAX2-RV64-NEXT: vor.vv v30, v8, v30 1351; LMULMAX2-RV64-NEXT: vor.vv v28, v30, v28 1352; LMULMAX2-RV64-NEXT: vsll.vi v30, v26, 8 1353; LMULMAX2-RV64-NEXT: slli a4, a3, 32 1354; LMULMAX2-RV64-NEXT: vand.vx v30, v30, a4 1355; LMULMAX2-RV64-NEXT: vsll.vi v8, v26, 24 1356; LMULMAX2-RV64-NEXT: slli a4, a3, 40 1357; LMULMAX2-RV64-NEXT: vand.vx v8, v8, a4 1358; LMULMAX2-RV64-NEXT: vor.vv v30, v8, v30 1359; LMULMAX2-RV64-NEXT: vsll.vx v8, v26, a1 1360; LMULMAX2-RV64-NEXT: vsll.vx v26, v26, a2 1361; LMULMAX2-RV64-NEXT: slli a1, a3, 48 1362; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 1363; LMULMAX2-RV64-NEXT: vor.vv v26, v8, v26 1364; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v30 1365; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 1366; LMULMAX2-RV64-NEXT: lui a1, 3855 1367; LMULMAX2-RV64-NEXT: addiw a1, a1, 241 1368; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1369; LMULMAX2-RV64-NEXT: addi a1, a1, -241 1370; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1371; LMULMAX2-RV64-NEXT: addi a1, a1, 241 1372; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1373; LMULMAX2-RV64-NEXT: addi a1, a1, -241 1374; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1 1375; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 4 1376; LMULMAX2-RV64-NEXT: lui a1, 1044721 1377; LMULMAX2-RV64-NEXT: addiw a1, a1, -241 1378; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1379; LMULMAX2-RV64-NEXT: addi a1, a1, 241 1380; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1381; LMULMAX2-RV64-NEXT: addi a1, a1, -241 1382; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1383; LMULMAX2-RV64-NEXT: addi a1, a1, 240 1384; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 1385; LMULMAX2-RV64-NEXT: vsrl.vi v26, v26, 4 1386; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 1387; LMULMAX2-RV64-NEXT: lui a1, 13107 1388; LMULMAX2-RV64-NEXT: addiw a1, a1, 819 1389; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1390; LMULMAX2-RV64-NEXT: addi a1, a1, 819 1391; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1392; LMULMAX2-RV64-NEXT: addi a1, a1, 819 1393; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1394; LMULMAX2-RV64-NEXT: addi a1, a1, 819 1395; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1 1396; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 2 1397; LMULMAX2-RV64-NEXT: lui a1, 1035469 1398; LMULMAX2-RV64-NEXT: addiw a1, a1, -819 1399; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1400; LMULMAX2-RV64-NEXT: addi a1, a1, -819 1401; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1402; LMULMAX2-RV64-NEXT: addi a1, a1, -819 1403; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1404; LMULMAX2-RV64-NEXT: addi a1, a1, -820 1405; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 1406; LMULMAX2-RV64-NEXT: vsrl.vi v26, v26, 2 1407; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 1408; LMULMAX2-RV64-NEXT: lui a1, 21845 1409; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365 1410; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1411; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 1412; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1413; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 1414; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1415; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 1416; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1 1417; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 1 1418; LMULMAX2-RV64-NEXT: lui a1, 1026731 1419; LMULMAX2-RV64-NEXT: addiw a1, a1, -1365 1420; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1421; LMULMAX2-RV64-NEXT: addi a1, a1, -1365 1422; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1423; LMULMAX2-RV64-NEXT: addi a1, a1, -1365 1424; LMULMAX2-RV64-NEXT: slli a1, a1, 12 1425; LMULMAX2-RV64-NEXT: addi a1, a1, -1366 1426; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1 1427; LMULMAX2-RV64-NEXT: vsrl.vi v26, v26, 1 1428; LMULMAX2-RV64-NEXT: vor.vv v26, v26, v28 1429; LMULMAX2-RV64-NEXT: vse64.v v26, (a0) 1430; LMULMAX2-RV64-NEXT: ret 1431; 1432; LMULMAX1-RV32-LABEL: bitreverse_v4i64: 1433; LMULMAX1-RV32: # %bb.0: 1434; LMULMAX1-RV32-NEXT: vsetivli a1, 2, e64,m1,ta,mu 1435; LMULMAX1-RV32-NEXT: addi a1, a0, 16 1436; LMULMAX1-RV32-NEXT: vle64.v v30, (a1) 1437; LMULMAX1-RV32-NEXT: vle64.v v25, (a0) 1438; LMULMAX1-RV32-NEXT: addi a7, zero, 56 1439; LMULMAX1-RV32-NEXT: vsrl.vx v26, v30, a7 1440; LMULMAX1-RV32-NEXT: addi a3, zero, 40 1441; LMULMAX1-RV32-NEXT: vsrl.vx v27, v30, a3 1442; LMULMAX1-RV32-NEXT: lui a4, 16 1443; LMULMAX1-RV32-NEXT: addi a4, a4, -256 1444; LMULMAX1-RV32-NEXT: vand.vx v27, v27, a4 1445; LMULMAX1-RV32-NEXT: vor.vv v27, v27, v26 1446; LMULMAX1-RV32-NEXT: vsrl.vi v26, v30, 24 1447; LMULMAX1-RV32-NEXT: lui a6, 4080 1448; LMULMAX1-RV32-NEXT: vand.vx v28, v26, a6 1449; LMULMAX1-RV32-NEXT: addi a5, zero, 5 1450; LMULMAX1-RV32-NEXT: vsetivli a2, 1, e8,m1,ta,mu 1451; LMULMAX1-RV32-NEXT: vmv.s.x v0, a5 1452; LMULMAX1-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 1453; LMULMAX1-RV32-NEXT: vmv.v.i v26, 0 1454; LMULMAX1-RV32-NEXT: lui a2, 1044480 1455; LMULMAX1-RV32-NEXT: vmerge.vxm v26, v26, a2, v0 1456; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1457; LMULMAX1-RV32-NEXT: vsrl.vi v29, v30, 8 1458; LMULMAX1-RV32-NEXT: vand.vv v29, v29, v26 1459; LMULMAX1-RV32-NEXT: vor.vv v28, v29, v28 1460; LMULMAX1-RV32-NEXT: vor.vv v31, v28, v27 1461; LMULMAX1-RV32-NEXT: addi a2, zero, 255 1462; LMULMAX1-RV32-NEXT: vsetivli a5, 4, e32,m1,ta,mu 1463; LMULMAX1-RV32-NEXT: vmv.v.x v27, a2 1464; LMULMAX1-RV32-NEXT: vmerge.vim v27, v27, 0, v0 1465; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1466; LMULMAX1-RV32-NEXT: vsll.vi v28, v30, 8 1467; LMULMAX1-RV32-NEXT: vand.vv v29, v28, v27 1468; LMULMAX1-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 1469; LMULMAX1-RV32-NEXT: vmv.v.x v28, a4 1470; LMULMAX1-RV32-NEXT: vmerge.vim v28, v28, 0, v0 1471; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1472; LMULMAX1-RV32-NEXT: vsll.vi v8, v30, 24 1473; LMULMAX1-RV32-NEXT: vand.vv v8, v8, v28 1474; LMULMAX1-RV32-NEXT: vor.vv v8, v8, v29 1475; LMULMAX1-RV32-NEXT: vsll.vx v9, v30, a3 1476; LMULMAX1-RV32-NEXT: vsetivli a2, 4, e32,m1,ta,mu 1477; LMULMAX1-RV32-NEXT: vmv.v.x v29, a6 1478; LMULMAX1-RV32-NEXT: vmerge.vim v29, v29, 0, v0 1479; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1480; LMULMAX1-RV32-NEXT: vand.vv v9, v9, v29 1481; LMULMAX1-RV32-NEXT: vsll.vx v30, v30, a7 1482; LMULMAX1-RV32-NEXT: vor.vv v30, v30, v9 1483; LMULMAX1-RV32-NEXT: vor.vv v30, v30, v8 1484; LMULMAX1-RV32-NEXT: vor.vv v31, v30, v31 1485; LMULMAX1-RV32-NEXT: lui a2, 61681 1486; LMULMAX1-RV32-NEXT: addi a2, a2, -241 1487; LMULMAX1-RV32-NEXT: vsetivli a5, 4, e32,m1,ta,mu 1488; LMULMAX1-RV32-NEXT: vmv.v.x v30, a2 1489; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1490; LMULMAX1-RV32-NEXT: vand.vv v8, v31, v30 1491; LMULMAX1-RV32-NEXT: vsll.vi v8, v8, 4 1492; LMULMAX1-RV32-NEXT: lui a2, 986895 1493; LMULMAX1-RV32-NEXT: addi a2, a2, 240 1494; LMULMAX1-RV32-NEXT: vsetivli a5, 4, e32,m1,ta,mu 1495; LMULMAX1-RV32-NEXT: vmv.v.x v9, a2 1496; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1497; LMULMAX1-RV32-NEXT: vand.vv v31, v31, v9 1498; LMULMAX1-RV32-NEXT: vsrl.vi v31, v31, 4 1499; LMULMAX1-RV32-NEXT: vor.vv v31, v31, v8 1500; LMULMAX1-RV32-NEXT: lui a2, 209715 1501; LMULMAX1-RV32-NEXT: addi a2, a2, 819 1502; LMULMAX1-RV32-NEXT: vsetivli a5, 4, e32,m1,ta,mu 1503; LMULMAX1-RV32-NEXT: vmv.v.x v8, a2 1504; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1505; LMULMAX1-RV32-NEXT: vand.vv v10, v31, v8 1506; LMULMAX1-RV32-NEXT: vsll.vi v10, v10, 2 1507; LMULMAX1-RV32-NEXT: lui a2, 838861 1508; LMULMAX1-RV32-NEXT: addi a2, a2, -820 1509; LMULMAX1-RV32-NEXT: vsetivli a5, 4, e32,m1,ta,mu 1510; LMULMAX1-RV32-NEXT: vmv.v.x v11, a2 1511; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1512; LMULMAX1-RV32-NEXT: vand.vv v31, v31, v11 1513; LMULMAX1-RV32-NEXT: vsrl.vi v31, v31, 2 1514; LMULMAX1-RV32-NEXT: vor.vv v31, v31, v10 1515; LMULMAX1-RV32-NEXT: lui a2, 349525 1516; LMULMAX1-RV32-NEXT: addi a2, a2, 1365 1517; LMULMAX1-RV32-NEXT: vsetivli a5, 4, e32,m1,ta,mu 1518; LMULMAX1-RV32-NEXT: vmv.v.x v10, a2 1519; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1520; LMULMAX1-RV32-NEXT: vand.vv v12, v31, v10 1521; LMULMAX1-RV32-NEXT: vsll.vi v12, v12, 1 1522; LMULMAX1-RV32-NEXT: lui a2, 699051 1523; LMULMAX1-RV32-NEXT: addi a2, a2, -1366 1524; LMULMAX1-RV32-NEXT: vsetivli a5, 4, e32,m1,ta,mu 1525; LMULMAX1-RV32-NEXT: vmv.v.x v13, a2 1526; LMULMAX1-RV32-NEXT: vsetivli a2, 2, e64,m1,ta,mu 1527; LMULMAX1-RV32-NEXT: vand.vv v31, v31, v13 1528; LMULMAX1-RV32-NEXT: vsrl.vi v31, v31, 1 1529; LMULMAX1-RV32-NEXT: vor.vv v31, v31, v12 1530; LMULMAX1-RV32-NEXT: vsrl.vx v12, v25, a7 1531; LMULMAX1-RV32-NEXT: vsrl.vx v14, v25, a3 1532; LMULMAX1-RV32-NEXT: vand.vx v14, v14, a4 1533; LMULMAX1-RV32-NEXT: vor.vv v12, v14, v12 1534; LMULMAX1-RV32-NEXT: vsrl.vi v14, v25, 24 1535; LMULMAX1-RV32-NEXT: vand.vx v14, v14, a6 1536; LMULMAX1-RV32-NEXT: vsrl.vi v15, v25, 8 1537; LMULMAX1-RV32-NEXT: vand.vv v26, v15, v26 1538; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v14 1539; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v12 1540; LMULMAX1-RV32-NEXT: vsll.vi v12, v25, 8 1541; LMULMAX1-RV32-NEXT: vand.vv v27, v12, v27 1542; LMULMAX1-RV32-NEXT: vsll.vi v12, v25, 24 1543; LMULMAX1-RV32-NEXT: vand.vv v28, v12, v28 1544; LMULMAX1-RV32-NEXT: vor.vv v27, v28, v27 1545; LMULMAX1-RV32-NEXT: vsll.vx v28, v25, a3 1546; LMULMAX1-RV32-NEXT: vand.vv v28, v28, v29 1547; LMULMAX1-RV32-NEXT: vsll.vx v25, v25, a7 1548; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v28 1549; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v27 1550; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 1551; LMULMAX1-RV32-NEXT: vand.vv v26, v25, v30 1552; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 4 1553; LMULMAX1-RV32-NEXT: vand.vv v25, v25, v9 1554; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 4 1555; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 1556; LMULMAX1-RV32-NEXT: vand.vv v26, v25, v8 1557; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 2 1558; LMULMAX1-RV32-NEXT: vand.vv v25, v25, v11 1559; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 2 1560; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 1561; LMULMAX1-RV32-NEXT: vand.vv v26, v25, v10 1562; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 1 1563; LMULMAX1-RV32-NEXT: vand.vv v25, v25, v13 1564; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 1 1565; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26 1566; LMULMAX1-RV32-NEXT: vse64.v v25, (a0) 1567; LMULMAX1-RV32-NEXT: vse64.v v31, (a1) 1568; LMULMAX1-RV32-NEXT: ret 1569; 1570; LMULMAX1-RV64-LABEL: bitreverse_v4i64: 1571; LMULMAX1-RV64: # %bb.0: 1572; LMULMAX1-RV64-NEXT: addi sp, sp, -16 1573; LMULMAX1-RV64-NEXT: .cfi_def_cfa_offset 16 1574; LMULMAX1-RV64-NEXT: sd s0, 8(sp) # 8-byte Folded Spill 1575; LMULMAX1-RV64-NEXT: .cfi_offset s0, -8 1576; LMULMAX1-RV64-NEXT: vsetivli a1, 2, e64,m1,ta,mu 1577; LMULMAX1-RV64-NEXT: addi t1, a0, 16 1578; LMULMAX1-RV64-NEXT: vle64.v v26, (t1) 1579; LMULMAX1-RV64-NEXT: vle64.v v25, (a0) 1580; LMULMAX1-RV64-NEXT: addi a7, zero, 56 1581; LMULMAX1-RV64-NEXT: vsrl.vx v27, v26, a7 1582; LMULMAX1-RV64-NEXT: addi t0, zero, 40 1583; LMULMAX1-RV64-NEXT: vsrl.vx v28, v26, t0 1584; LMULMAX1-RV64-NEXT: lui a1, 16 1585; LMULMAX1-RV64-NEXT: addiw t2, a1, -256 1586; LMULMAX1-RV64-NEXT: vand.vx v28, v28, t2 1587; LMULMAX1-RV64-NEXT: vor.vv v27, v28, v27 1588; LMULMAX1-RV64-NEXT: vsrl.vi v28, v26, 24 1589; LMULMAX1-RV64-NEXT: lui a6, 4080 1590; LMULMAX1-RV64-NEXT: vand.vx v28, v28, a6 1591; LMULMAX1-RV64-NEXT: vsrl.vi v29, v26, 8 1592; LMULMAX1-RV64-NEXT: addi a1, zero, 255 1593; LMULMAX1-RV64-NEXT: slli t3, a1, 24 1594; LMULMAX1-RV64-NEXT: vand.vx v29, v29, t3 1595; LMULMAX1-RV64-NEXT: vor.vv v28, v29, v28 1596; LMULMAX1-RV64-NEXT: vor.vv v27, v28, v27 1597; LMULMAX1-RV64-NEXT: vsll.vi v28, v26, 8 1598; LMULMAX1-RV64-NEXT: slli t4, a1, 32 1599; LMULMAX1-RV64-NEXT: vand.vx v28, v28, t4 1600; LMULMAX1-RV64-NEXT: vsll.vi v29, v26, 24 1601; LMULMAX1-RV64-NEXT: slli t5, a1, 40 1602; LMULMAX1-RV64-NEXT: vand.vx v29, v29, t5 1603; LMULMAX1-RV64-NEXT: vor.vv v28, v29, v28 1604; LMULMAX1-RV64-NEXT: vsll.vx v29, v26, a7 1605; LMULMAX1-RV64-NEXT: vsll.vx v26, v26, t0 1606; LMULMAX1-RV64-NEXT: slli t6, a1, 48 1607; LMULMAX1-RV64-NEXT: vand.vx v26, v26, t6 1608; LMULMAX1-RV64-NEXT: vor.vv v26, v29, v26 1609; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v28 1610; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 1611; LMULMAX1-RV64-NEXT: lui a4, 3855 1612; LMULMAX1-RV64-NEXT: addiw a4, a4, 241 1613; LMULMAX1-RV64-NEXT: slli a4, a4, 12 1614; LMULMAX1-RV64-NEXT: addi a4, a4, -241 1615; LMULMAX1-RV64-NEXT: slli a4, a4, 12 1616; LMULMAX1-RV64-NEXT: addi a4, a4, 241 1617; LMULMAX1-RV64-NEXT: slli a4, a4, 12 1618; LMULMAX1-RV64-NEXT: addi a4, a4, -241 1619; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a4 1620; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 4 1621; LMULMAX1-RV64-NEXT: lui a5, 1044721 1622; LMULMAX1-RV64-NEXT: addiw a5, a5, -241 1623; LMULMAX1-RV64-NEXT: slli a5, a5, 12 1624; LMULMAX1-RV64-NEXT: addi a5, a5, 241 1625; LMULMAX1-RV64-NEXT: slli a5, a5, 12 1626; LMULMAX1-RV64-NEXT: addi a5, a5, -241 1627; LMULMAX1-RV64-NEXT: slli a5, a5, 12 1628; LMULMAX1-RV64-NEXT: addi a5, a5, 240 1629; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a5 1630; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 4 1631; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 1632; LMULMAX1-RV64-NEXT: lui a2, 13107 1633; LMULMAX1-RV64-NEXT: addiw a2, a2, 819 1634; LMULMAX1-RV64-NEXT: slli a2, a2, 12 1635; LMULMAX1-RV64-NEXT: addi a2, a2, 819 1636; LMULMAX1-RV64-NEXT: slli a2, a2, 12 1637; LMULMAX1-RV64-NEXT: addi a2, a2, 819 1638; LMULMAX1-RV64-NEXT: slli a2, a2, 12 1639; LMULMAX1-RV64-NEXT: addi a2, a2, 819 1640; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a2 1641; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 2 1642; LMULMAX1-RV64-NEXT: lui a3, 1035469 1643; LMULMAX1-RV64-NEXT: addiw a3, a3, -819 1644; LMULMAX1-RV64-NEXT: slli a3, a3, 12 1645; LMULMAX1-RV64-NEXT: addi a3, a3, -819 1646; LMULMAX1-RV64-NEXT: slli a3, a3, 12 1647; LMULMAX1-RV64-NEXT: addi a3, a3, -819 1648; LMULMAX1-RV64-NEXT: slli a3, a3, 12 1649; LMULMAX1-RV64-NEXT: addi a3, a3, -820 1650; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a3 1651; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 2 1652; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 1653; LMULMAX1-RV64-NEXT: lui a1, 21845 1654; LMULMAX1-RV64-NEXT: addiw a1, a1, 1365 1655; LMULMAX1-RV64-NEXT: slli a1, a1, 12 1656; LMULMAX1-RV64-NEXT: addi a1, a1, 1365 1657; LMULMAX1-RV64-NEXT: slli a1, a1, 12 1658; LMULMAX1-RV64-NEXT: addi a1, a1, 1365 1659; LMULMAX1-RV64-NEXT: slli a1, a1, 12 1660; LMULMAX1-RV64-NEXT: addi a1, a1, 1365 1661; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a1 1662; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1 1663; LMULMAX1-RV64-NEXT: lui s0, 1026731 1664; LMULMAX1-RV64-NEXT: addiw s0, s0, -1365 1665; LMULMAX1-RV64-NEXT: slli s0, s0, 12 1666; LMULMAX1-RV64-NEXT: addi s0, s0, -1365 1667; LMULMAX1-RV64-NEXT: slli s0, s0, 12 1668; LMULMAX1-RV64-NEXT: addi s0, s0, -1365 1669; LMULMAX1-RV64-NEXT: slli s0, s0, 12 1670; LMULMAX1-RV64-NEXT: addi s0, s0, -1366 1671; LMULMAX1-RV64-NEXT: vand.vx v26, v26, s0 1672; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 1 1673; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27 1674; LMULMAX1-RV64-NEXT: vsrl.vx v27, v25, a7 1675; LMULMAX1-RV64-NEXT: vsrl.vx v28, v25, t0 1676; LMULMAX1-RV64-NEXT: vand.vx v28, v28, t2 1677; LMULMAX1-RV64-NEXT: vor.vv v27, v28, v27 1678; LMULMAX1-RV64-NEXT: vsrl.vi v28, v25, 24 1679; LMULMAX1-RV64-NEXT: vand.vx v28, v28, a6 1680; LMULMAX1-RV64-NEXT: vsrl.vi v29, v25, 8 1681; LMULMAX1-RV64-NEXT: vand.vx v29, v29, t3 1682; LMULMAX1-RV64-NEXT: vor.vv v28, v29, v28 1683; LMULMAX1-RV64-NEXT: vor.vv v27, v28, v27 1684; LMULMAX1-RV64-NEXT: vsll.vi v28, v25, 8 1685; LMULMAX1-RV64-NEXT: vand.vx v28, v28, t4 1686; LMULMAX1-RV64-NEXT: vsll.vi v29, v25, 24 1687; LMULMAX1-RV64-NEXT: vand.vx v29, v29, t5 1688; LMULMAX1-RV64-NEXT: vor.vv v28, v29, v28 1689; LMULMAX1-RV64-NEXT: vsll.vx v29, v25, a7 1690; LMULMAX1-RV64-NEXT: vsll.vx v25, v25, t0 1691; LMULMAX1-RV64-NEXT: vand.vx v25, v25, t6 1692; LMULMAX1-RV64-NEXT: vor.vv v25, v29, v25 1693; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v28 1694; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 1695; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a4 1696; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 4 1697; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a5 1698; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 4 1699; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 1700; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a2 1701; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 2 1702; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a3 1703; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 2 1704; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 1705; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a1 1706; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1 1707; LMULMAX1-RV64-NEXT: vand.vx v25, v25, s0 1708; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 1 1709; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27 1710; LMULMAX1-RV64-NEXT: vse64.v v25, (a0) 1711; LMULMAX1-RV64-NEXT: vse64.v v26, (t1) 1712; LMULMAX1-RV64-NEXT: ld s0, 8(sp) # 8-byte Folded Reload 1713; LMULMAX1-RV64-NEXT: addi sp, sp, 16 1714; LMULMAX1-RV64-NEXT: ret 1715 %a = load <4 x i64>, <4 x i64>* %x 1716 %b = load <4 x i64>, <4 x i64>* %y 1717 %c = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 1718 store <4 x i64> %c, <4 x i64>* %x 1719 ret void 1720} 1721declare <4 x i64> @llvm.bitreverse.v4i64(<4 x i64>) 1722