brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.7 KiB · b5613a4 Raw
304 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple riscv32 -mattr=+d,+zvfh,+v < %s \3; RUN:    -verify-machineinstrs | FileCheck %s4; RUN: llc -mtriple riscv64 -mattr=+d,+zvfh,+v < %s \5; RUN:    -verify-machineinstrs | FileCheck %s6; RUN: llc -mtriple riscv32 -mattr=+d,+zvfh,+v,+unaligned-vector-mem < %s \7; RUN:    -verify-machineinstrs | FileCheck --check-prefix=FAST %s8; RUN: llc -mtriple riscv64 -mattr=+d,+zvfh,+v,+unaligned-vector-mem < %s \9; RUN:    -verify-machineinstrs | FileCheck --check-prefix=FAST %s10 11 12define <vscale x 1 x i32> @unaligned_load_nxv1i32_a1(ptr %ptr) {13; CHECK-LABEL: unaligned_load_nxv1i32_a1:14; CHECK:       # %bb.0:15; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma16; CHECK-NEXT:    vle8.v v8, (a0)17; CHECK-NEXT:    ret18;19; FAST-LABEL: unaligned_load_nxv1i32_a1:20; FAST:       # %bb.0:21; FAST-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma22; FAST-NEXT:    vle32.v v8, (a0)23; FAST-NEXT:    ret24  %v = load <vscale x 1 x i32>, ptr %ptr, align 125  ret <vscale x 1 x i32> %v26}27 28define <vscale x 1 x i32> @unaligned_load_nxv1i32_a2(ptr %ptr) {29; CHECK-LABEL: unaligned_load_nxv1i32_a2:30; CHECK:       # %bb.0:31; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma32; CHECK-NEXT:    vle8.v v8, (a0)33; CHECK-NEXT:    ret34;35; FAST-LABEL: unaligned_load_nxv1i32_a2:36; FAST:       # %bb.0:37; FAST-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma38; FAST-NEXT:    vle32.v v8, (a0)39; FAST-NEXT:    ret40  %v = load <vscale x 1 x i32>, ptr %ptr, align 241  ret <vscale x 1 x i32> %v42}43 44define <vscale x 1 x i32> @aligned_load_nxv1i32_a4(ptr %ptr) {45; CHECK-LABEL: aligned_load_nxv1i32_a4:46; CHECK:       # %bb.0:47; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma48; CHECK-NEXT:    vle32.v v8, (a0)49; CHECK-NEXT:    ret50;51; FAST-LABEL: aligned_load_nxv1i32_a4:52; FAST:       # %bb.0:53; FAST-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma54; FAST-NEXT:    vle32.v v8, (a0)55; FAST-NEXT:    ret56  %v = load <vscale x 1 x i32>, ptr %ptr, align 457  ret <vscale x 1 x i32> %v58}59 60define <vscale x 1 x i64> @unaligned_load_nxv1i64_a1(ptr %ptr) {61; CHECK-LABEL: unaligned_load_nxv1i64_a1:62; CHECK:       # %bb.0:63; CHECK-NEXT:    vl1r.v v8, (a0)64; CHECK-NEXT:    ret65;66; FAST-LABEL: unaligned_load_nxv1i64_a1:67; FAST:       # %bb.0:68; FAST-NEXT:    vl1re64.v v8, (a0)69; FAST-NEXT:    ret70  %v = load <vscale x 1 x i64>, ptr %ptr, align 171  ret <vscale x 1 x i64> %v72}73 74define <vscale x 1 x i64> @unaligned_load_nxv1i64_a4(ptr %ptr) {75; CHECK-LABEL: unaligned_load_nxv1i64_a4:76; CHECK:       # %bb.0:77; CHECK-NEXT:    vl1r.v v8, (a0)78; CHECK-NEXT:    ret79;80; FAST-LABEL: unaligned_load_nxv1i64_a4:81; FAST:       # %bb.0:82; FAST-NEXT:    vl1re64.v v8, (a0)83; FAST-NEXT:    ret84  %v = load <vscale x 1 x i64>, ptr %ptr, align 485  ret <vscale x 1 x i64> %v86}87 88define <vscale x 1 x i64> @aligned_load_nxv1i64_a8(ptr %ptr) {89; CHECK-LABEL: aligned_load_nxv1i64_a8:90; CHECK:       # %bb.0:91; CHECK-NEXT:    vl1re64.v v8, (a0)92; CHECK-NEXT:    ret93;94; FAST-LABEL: aligned_load_nxv1i64_a8:95; FAST:       # %bb.0:96; FAST-NEXT:    vl1re64.v v8, (a0)97; FAST-NEXT:    ret98  %v = load <vscale x 1 x i64>, ptr %ptr, align 899  ret <vscale x 1 x i64> %v100}101 102define <vscale x 2 x i64> @unaligned_load_nxv2i64_a1(ptr %ptr) {103; CHECK-LABEL: unaligned_load_nxv2i64_a1:104; CHECK:       # %bb.0:105; CHECK-NEXT:    vl2r.v v8, (a0)106; CHECK-NEXT:    ret107;108; FAST-LABEL: unaligned_load_nxv2i64_a1:109; FAST:       # %bb.0:110; FAST-NEXT:    vl2re64.v v8, (a0)111; FAST-NEXT:    ret112  %v = load <vscale x 2 x i64>, ptr %ptr, align 1113  ret <vscale x 2 x i64> %v114}115 116define <vscale x 2 x i64> @unaligned_load_nxv2i64_a4(ptr %ptr) {117; CHECK-LABEL: unaligned_load_nxv2i64_a4:118; CHECK:       # %bb.0:119; CHECK-NEXT:    vl2r.v v8, (a0)120; CHECK-NEXT:    ret121;122; FAST-LABEL: unaligned_load_nxv2i64_a4:123; FAST:       # %bb.0:124; FAST-NEXT:    vl2re64.v v8, (a0)125; FAST-NEXT:    ret126  %v = load <vscale x 2 x i64>, ptr %ptr, align 4127  ret <vscale x 2 x i64> %v128}129 130define <vscale x 2 x i64> @aligned_load_nxv2i64_a8(ptr %ptr) {131; CHECK-LABEL: aligned_load_nxv2i64_a8:132; CHECK:       # %bb.0:133; CHECK-NEXT:    vl2re64.v v8, (a0)134; CHECK-NEXT:    ret135;136; FAST-LABEL: aligned_load_nxv2i64_a8:137; FAST:       # %bb.0:138; FAST-NEXT:    vl2re64.v v8, (a0)139; FAST-NEXT:    ret140  %v = load <vscale x 2 x i64>, ptr %ptr, align 8141  ret <vscale x 2 x i64> %v142}143 144; Masks should always be aligned145define <vscale x 1 x i1> @unaligned_load_nxv1i1_a1(ptr %ptr) {146; CHECK-LABEL: unaligned_load_nxv1i1_a1:147; CHECK:       # %bb.0:148; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma149; CHECK-NEXT:    vlm.v v0, (a0)150; CHECK-NEXT:    ret151;152; FAST-LABEL: unaligned_load_nxv1i1_a1:153; FAST:       # %bb.0:154; FAST-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma155; FAST-NEXT:    vlm.v v0, (a0)156; FAST-NEXT:    ret157  %v = load <vscale x 1 x i1>, ptr %ptr, align 1158  ret <vscale x 1 x i1> %v159}160 161define <vscale x 4 x float> @unaligned_load_nxv4f32_a1(ptr %ptr) {162; CHECK-LABEL: unaligned_load_nxv4f32_a1:163; CHECK:       # %bb.0:164; CHECK-NEXT:    vl2r.v v8, (a0)165; CHECK-NEXT:    ret166;167; FAST-LABEL: unaligned_load_nxv4f32_a1:168; FAST:       # %bb.0:169; FAST-NEXT:    vl2re32.v v8, (a0)170; FAST-NEXT:    ret171  %v = load <vscale x 4 x float>, ptr %ptr, align 1172  ret <vscale x 4 x float> %v173}174 175define <vscale x 4 x float> @unaligned_load_nxv4f32_a2(ptr %ptr) {176; CHECK-LABEL: unaligned_load_nxv4f32_a2:177; CHECK:       # %bb.0:178; CHECK-NEXT:    vl2r.v v8, (a0)179; CHECK-NEXT:    ret180;181; FAST-LABEL: unaligned_load_nxv4f32_a2:182; FAST:       # %bb.0:183; FAST-NEXT:    vl2re32.v v8, (a0)184; FAST-NEXT:    ret185  %v = load <vscale x 4 x float>, ptr %ptr, align 2186  ret <vscale x 4 x float> %v187}188 189define <vscale x 4 x float> @aligned_load_nxv4f32_a4(ptr %ptr) {190; CHECK-LABEL: aligned_load_nxv4f32_a4:191; CHECK:       # %bb.0:192; CHECK-NEXT:    vl2re32.v v8, (a0)193; CHECK-NEXT:    ret194;195; FAST-LABEL: aligned_load_nxv4f32_a4:196; FAST:       # %bb.0:197; FAST-NEXT:    vl2re32.v v8, (a0)198; FAST-NEXT:    ret199  %v = load <vscale x 4 x float>, ptr %ptr, align 4200  ret <vscale x 4 x float> %v201}202 203define <vscale x 8 x half> @unaligned_load_nxv8f16_a1(ptr %ptr) {204; CHECK-LABEL: unaligned_load_nxv8f16_a1:205; CHECK:       # %bb.0:206; CHECK-NEXT:    vl2r.v v8, (a0)207; CHECK-NEXT:    ret208;209; FAST-LABEL: unaligned_load_nxv8f16_a1:210; FAST:       # %bb.0:211; FAST-NEXT:    vl2re16.v v8, (a0)212; FAST-NEXT:    ret213  %v = load <vscale x 8 x half>, ptr %ptr, align 1214  ret <vscale x 8 x half> %v215}216 217define <vscale x 8 x half> @aligned_load_nxv8f16_a2(ptr %ptr) {218; CHECK-LABEL: aligned_load_nxv8f16_a2:219; CHECK:       # %bb.0:220; CHECK-NEXT:    vl2re16.v v8, (a0)221; CHECK-NEXT:    ret222;223; FAST-LABEL: aligned_load_nxv8f16_a2:224; FAST:       # %bb.0:225; FAST-NEXT:    vl2re16.v v8, (a0)226; FAST-NEXT:    ret227  %v = load <vscale x 8 x half>, ptr %ptr, align 2228  ret <vscale x 8 x half> %v229}230 231define void @unaligned_store_nxv4i32_a1(<vscale x 4 x i32> %x, ptr %ptr) {232; CHECK-LABEL: unaligned_store_nxv4i32_a1:233; CHECK:       # %bb.0:234; CHECK-NEXT:    vs2r.v v8, (a0)235; CHECK-NEXT:    ret236;237; FAST-LABEL: unaligned_store_nxv4i32_a1:238; FAST:       # %bb.0:239; FAST-NEXT:    vs2r.v v8, (a0)240; FAST-NEXT:    ret241  store <vscale x 4 x i32> %x, ptr %ptr, align 1242  ret void243}244 245define void @unaligned_store_nxv4i32_a2(<vscale x 4 x i32> %x, ptr %ptr) {246; CHECK-LABEL: unaligned_store_nxv4i32_a2:247; CHECK:       # %bb.0:248; CHECK-NEXT:    vs2r.v v8, (a0)249; CHECK-NEXT:    ret250;251; FAST-LABEL: unaligned_store_nxv4i32_a2:252; FAST:       # %bb.0:253; FAST-NEXT:    vs2r.v v8, (a0)254; FAST-NEXT:    ret255  store <vscale x 4 x i32> %x, ptr %ptr, align 2256  ret void257}258 259define void @aligned_store_nxv4i32_a4(<vscale x 4 x i32> %x, ptr %ptr) {260; CHECK-LABEL: aligned_store_nxv4i32_a4:261; CHECK:       # %bb.0:262; CHECK-NEXT:    vs2r.v v8, (a0)263; CHECK-NEXT:    ret264;265; FAST-LABEL: aligned_store_nxv4i32_a4:266; FAST:       # %bb.0:267; FAST-NEXT:    vs2r.v v8, (a0)268; FAST-NEXT:    ret269  store <vscale x 4 x i32> %x, ptr %ptr, align 4270  ret void271}272 273define void @unaligned_store_nxv1i16_a1(<vscale x 1 x i16> %x, ptr %ptr) {274; CHECK-LABEL: unaligned_store_nxv1i16_a1:275; CHECK:       # %bb.0:276; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma277; CHECK-NEXT:    vse8.v v8, (a0)278; CHECK-NEXT:    ret279;280; FAST-LABEL: unaligned_store_nxv1i16_a1:281; FAST:       # %bb.0:282; FAST-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma283; FAST-NEXT:    vse16.v v8, (a0)284; FAST-NEXT:    ret285  store <vscale x 1 x i16> %x, ptr %ptr, align 1286  ret void287}288 289define void @aligned_store_nxv1i16_a2(<vscale x 1 x i16> %x, ptr %ptr) {290; CHECK-LABEL: aligned_store_nxv1i16_a2:291; CHECK:       # %bb.0:292; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma293; CHECK-NEXT:    vse16.v v8, (a0)294; CHECK-NEXT:    ret295;296; FAST-LABEL: aligned_store_nxv1i16_a2:297; FAST:       # %bb.0:298; FAST-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma299; FAST-NEXT:    vse16.v v8, (a0)300; FAST-NEXT:    ret301  store <vscale x 1 x i16> %x, ptr %ptr, align 2302  ret void303}304