68 lines
2.8 KiB
LLVM
68 lines
2.8 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; 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
|
|
; 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
|
|
|
|
define void @buildvec_vid_v16i8(<16 x i8>* %x) {
|
|
; CHECK-LABEL: buildvec_vid_v16i8:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: vsetivli a1, 16, e8,m1,ta,mu
|
|
; CHECK-NEXT: vid.v v25
|
|
; CHECK-NEXT: vse8.v v25, (a0)
|
|
; CHECK-NEXT: ret
|
|
store <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, <16 x i8>* %x
|
|
ret void
|
|
}
|
|
|
|
define void @buildvec_vid_undefelts_v16i8(<16 x i8>* %x) {
|
|
; CHECK-LABEL: buildvec_vid_undefelts_v16i8:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: vsetivli a1, 16, e8,m1,ta,mu
|
|
; CHECK-NEXT: vid.v v25
|
|
; CHECK-NEXT: vse8.v v25, (a0)
|
|
; CHECK-NEXT: ret
|
|
store <16 x i8> <i8 0, i8 1, i8 2, i8 undef, i8 4, i8 undef, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, <16 x i8>* %x
|
|
ret void
|
|
}
|
|
|
|
; TODO: Could do VID then insertelement on missing elements
|
|
define void @buildvec_notquite_vid_v16i8(<16 x i8>* %x) {
|
|
; CHECK-LABEL: buildvec_notquite_vid_v16i8:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: lui a1, %hi(.LCPI2_0)
|
|
; CHECK-NEXT: addi a1, a1, %lo(.LCPI2_0)
|
|
; CHECK-NEXT: vsetivli a2, 16, e8,m1,ta,mu
|
|
; CHECK-NEXT: vle8.v v25, (a1)
|
|
; CHECK-NEXT: vse8.v v25, (a0)
|
|
; CHECK-NEXT: ret
|
|
store <16 x i8> <i8 0, i8 1, i8 3, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, <16 x i8>* %x
|
|
ret void
|
|
}
|
|
|
|
; TODO: Could do VID then add a constant splat
|
|
define void @buildvec_vid_plus_imm_v16i8(<16 x i8>* %x) {
|
|
; CHECK-LABEL: buildvec_vid_plus_imm_v16i8:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: lui a1, %hi(.LCPI3_0)
|
|
; CHECK-NEXT: addi a1, a1, %lo(.LCPI3_0)
|
|
; CHECK-NEXT: vsetivli a2, 16, e8,m1,ta,mu
|
|
; CHECK-NEXT: vle8.v v25, (a1)
|
|
; CHECK-NEXT: vse8.v v25, (a0)
|
|
; CHECK-NEXT: ret
|
|
store <16 x i8> <i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 16, i8 17>, <16 x i8>* %x
|
|
ret void
|
|
}
|
|
|
|
; TODO: Could do VID then multiply by a constant splat
|
|
define void @buildvec_vid_mpy_imm_v16i8(<16 x i8>* %x) {
|
|
; CHECK-LABEL: buildvec_vid_mpy_imm_v16i8:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: lui a1, %hi(.LCPI4_0)
|
|
; CHECK-NEXT: addi a1, a1, %lo(.LCPI4_0)
|
|
; CHECK-NEXT: vsetivli a2, 16, e8,m1,ta,mu
|
|
; CHECK-NEXT: vle8.v v25, (a1)
|
|
; CHECK-NEXT: vse8.v v25, (a0)
|
|
; CHECK-NEXT: ret
|
|
store <16 x i8> <i8 0, i8 3, i8 6, i8 9, i8 12, i8 15, i8 18, i8 21, i8 24, i8 27, i8 30, i8 33, i8 36, i8 39, i8 42, i8 45>, <16 x i8>* %x
|
|
ret void
|
|
}
|