brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 2e181e0 Raw
185 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+m,+v < %s | FileCheck %s --check-prefixes=CHECK,RV323; RUN: llc -mtriple=riscv64 -mattr=+m,+v < %s | FileCheck %s --check-prefixes=CHECK,RV644 5; Check that we correctly scale the split part indirect offsets by VSCALE.6define <vscale x 32 x i32> @callee_scalable_vector_split_indirect(<vscale x 32 x i32> %x, <vscale x 32 x i32> %y) {7; CHECK-LABEL: callee_scalable_vector_split_indirect:8; CHECK:       # %bb.0:9; CHECK-NEXT:    csrr a1, vlenb10; CHECK-NEXT:    slli a1, a1, 311; CHECK-NEXT:    add a1, a0, a112; CHECK-NEXT:    vl8re32.v v24, (a0)13; CHECK-NEXT:    vl8re32.v v0, (a1)14; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma15; CHECK-NEXT:    vadd.vv v8, v8, v2416; CHECK-NEXT:    vadd.vv v16, v16, v017; CHECK-NEXT:    ret18  %a = add <vscale x 32 x i32> %x, %y19  ret <vscale x 32 x i32> %a20}21 22; Call the function above. Check that we set the arguments correctly.23define <vscale x 32 x i32> @caller_scalable_vector_split_indirect(<vscale x 32 x i32> %x) {24; RV32-LABEL: caller_scalable_vector_split_indirect:25; RV32:       # %bb.0:26; RV32-NEXT:    addi sp, sp, -14427; RV32-NEXT:    .cfi_def_cfa_offset 14428; RV32-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill29; RV32-NEXT:    sw s0, 136(sp) # 4-byte Folded Spill30; RV32-NEXT:    .cfi_offset ra, -431; RV32-NEXT:    .cfi_offset s0, -832; RV32-NEXT:    addi s0, sp, 14433; RV32-NEXT:    .cfi_def_cfa s0, 034; RV32-NEXT:    csrr a0, vlenb35; RV32-NEXT:    slli a0, a0, 436; RV32-NEXT:    sub sp, sp, a037; RV32-NEXT:    andi sp, sp, -12838; RV32-NEXT:    addi a0, sp, 12839; RV32-NEXT:    csrr a1, vlenb40; RV32-NEXT:    vs8r.v v8, (a0)41; RV32-NEXT:    vsetvli a2, zero, e32, m8, ta, ma42; RV32-NEXT:    vmv.v.i v8, 043; RV32-NEXT:    slli a1, a1, 344; RV32-NEXT:    add a1, a0, a145; RV32-NEXT:    addi a0, sp, 12846; RV32-NEXT:    vs8r.v v16, (a1)47; RV32-NEXT:    vmv.v.i v16, 048; RV32-NEXT:    call callee_scalable_vector_split_indirect49; RV32-NEXT:    addi sp, s0, -14450; RV32-NEXT:    .cfi_def_cfa sp, 14451; RV32-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload52; RV32-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload53; RV32-NEXT:    .cfi_restore ra54; RV32-NEXT:    .cfi_restore s055; RV32-NEXT:    addi sp, sp, 14456; RV32-NEXT:    .cfi_def_cfa_offset 057; RV32-NEXT:    ret58;59; RV64-LABEL: caller_scalable_vector_split_indirect:60; RV64:       # %bb.0:61; RV64-NEXT:    addi sp, sp, -14462; RV64-NEXT:    .cfi_def_cfa_offset 14463; RV64-NEXT:    sd ra, 136(sp) # 8-byte Folded Spill64; RV64-NEXT:    sd s0, 128(sp) # 8-byte Folded Spill65; RV64-NEXT:    .cfi_offset ra, -866; RV64-NEXT:    .cfi_offset s0, -1667; RV64-NEXT:    addi s0, sp, 14468; RV64-NEXT:    .cfi_def_cfa s0, 069; RV64-NEXT:    csrr a0, vlenb70; RV64-NEXT:    slli a0, a0, 471; RV64-NEXT:    sub sp, sp, a072; RV64-NEXT:    andi sp, sp, -12873; RV64-NEXT:    addi a0, sp, 12874; RV64-NEXT:    csrr a1, vlenb75; RV64-NEXT:    vs8r.v v8, (a0)76; RV64-NEXT:    vsetvli a2, zero, e32, m8, ta, ma77; RV64-NEXT:    vmv.v.i v8, 078; RV64-NEXT:    slli a1, a1, 379; RV64-NEXT:    add a1, a0, a180; RV64-NEXT:    addi a0, sp, 12881; RV64-NEXT:    vs8r.v v16, (a1)82; RV64-NEXT:    vmv.v.i v16, 083; RV64-NEXT:    call callee_scalable_vector_split_indirect84; RV64-NEXT:    addi sp, s0, -14485; RV64-NEXT:    .cfi_def_cfa sp, 14486; RV64-NEXT:    ld ra, 136(sp) # 8-byte Folded Reload87; RV64-NEXT:    ld s0, 128(sp) # 8-byte Folded Reload88; RV64-NEXT:    .cfi_restore ra89; RV64-NEXT:    .cfi_restore s090; RV64-NEXT:    addi sp, sp, 14491; RV64-NEXT:    .cfi_def_cfa_offset 092; RV64-NEXT:    ret93  %c = alloca i6494  %a = call <vscale x 32 x i32> @callee_scalable_vector_split_indirect(<vscale x 32 x i32> zeroinitializer, <vscale x 32 x i32> %x)95  ret <vscale x 32 x i32> %a96}97 98define target("riscv.vector.tuple", <vscale x 16 x i8>, 2) @caller_tuple_return() {99; RV32-LABEL: caller_tuple_return:100; RV32:       # %bb.0:101; RV32-NEXT:    addi sp, sp, -16102; RV32-NEXT:    .cfi_def_cfa_offset 16103; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill104; RV32-NEXT:    .cfi_offset ra, -4105; RV32-NEXT:    call callee_tuple_return106; RV32-NEXT:    vsetivli zero, 1, e8, m1, ta, ma107; RV32-NEXT:    vmv2r.v v6, v8108; RV32-NEXT:    vmv2r.v v8, v10109; RV32-NEXT:    vmv2r.v v10, v6110; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload111; RV32-NEXT:    .cfi_restore ra112; RV32-NEXT:    addi sp, sp, 16113; RV32-NEXT:    .cfi_def_cfa_offset 0114; RV32-NEXT:    ret115;116; RV64-LABEL: caller_tuple_return:117; RV64:       # %bb.0:118; RV64-NEXT:    addi sp, sp, -16119; RV64-NEXT:    .cfi_def_cfa_offset 16120; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill121; RV64-NEXT:    .cfi_offset ra, -8122; RV64-NEXT:    call callee_tuple_return123; RV64-NEXT:    vsetivli zero, 1, e8, m1, ta, ma124; RV64-NEXT:    vmv2r.v v6, v8125; RV64-NEXT:    vmv2r.v v8, v10126; RV64-NEXT:    vmv2r.v v10, v6127; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload128; RV64-NEXT:    .cfi_restore ra129; RV64-NEXT:    addi sp, sp, 16130; RV64-NEXT:    .cfi_def_cfa_offset 0131; RV64-NEXT:    ret132  %a = call target("riscv.vector.tuple", <vscale x 16 x i8>, 2) @callee_tuple_return()133  %b = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %a, i32 0)134  %c = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %a, i32 1)135  %d = call target("riscv.vector.tuple", <vscale x 16 x i8>, 2) @llvm.riscv.tuple.insert.triscv.vector.tuple_nxv16i8_2t.nxv4i32(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, <vscale x 4 x i32> %c,   i32 0)136  %e = call target("riscv.vector.tuple", <vscale x 16 x i8>, 2) @llvm.riscv.tuple.insert.triscv.vector.tuple_nxv16i8_2t.nxv4i32(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %d, <vscale x 4 x i32> %b, i32   1)137  ret target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %e138}139 140declare target("riscv.vector.tuple", <vscale x 16 x i8>, 2) @callee_tuple_return()141 142define void @caller_tuple_argument(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %x) {143; RV32-LABEL: caller_tuple_argument:144; RV32:       # %bb.0:145; RV32-NEXT:    addi sp, sp, -16146; RV32-NEXT:    .cfi_def_cfa_offset 16147; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill148; RV32-NEXT:    .cfi_offset ra, -4149; RV32-NEXT:    vsetivli zero, 1, e8, m1, ta, ma150; RV32-NEXT:    vmv2r.v v6, v8151; RV32-NEXT:    vmv2r.v v8, v10152; RV32-NEXT:    vmv2r.v v10, v6153; RV32-NEXT:    call callee_tuple_argument154; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload155; RV32-NEXT:    .cfi_restore ra156; RV32-NEXT:    addi sp, sp, 16157; RV32-NEXT:    .cfi_def_cfa_offset 0158; RV32-NEXT:    ret159;160; RV64-LABEL: caller_tuple_argument:161; RV64:       # %bb.0:162; RV64-NEXT:    addi sp, sp, -16163; RV64-NEXT:    .cfi_def_cfa_offset 16164; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill165; RV64-NEXT:    .cfi_offset ra, -8166; RV64-NEXT:    vsetivli zero, 1, e8, m1, ta, ma167; RV64-NEXT:    vmv2r.v v6, v8168; RV64-NEXT:    vmv2r.v v8, v10169; RV64-NEXT:    vmv2r.v v10, v6170; RV64-NEXT:    call callee_tuple_argument171; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload172; RV64-NEXT:    .cfi_restore ra173; RV64-NEXT:    addi sp, sp, 16174; RV64-NEXT:    .cfi_def_cfa_offset 0175; RV64-NEXT:    ret176  %a = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %x, i32 0)177  %b = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %x, i32 1)178  %c = call target("riscv.vector.tuple", <vscale x 16 x i8>, 2) @llvm.riscv.tuple.insert.triscv.vector.tuple_nxv16i8_2t.nxv4i32(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, <vscale x 4 x i32> %b,   i32 0)179  %d = call target("riscv.vector.tuple", <vscale x 16 x i8>, 2) @llvm.riscv.tuple.insert.triscv.vector.tuple_nxv16i8_2t.nxv4i32(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %c, <vscale x 4 x i32> %a, i32   1)180  call void @callee_tuple_argument(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %d)181  ret void182}183 184declare void @callee_tuple_argument(target("riscv.vector.tuple", <vscale x 16 x i8>, 2))185