https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/56 Resolved https://github.com/llvm/llvm-project/issues/106700. This enables inline asm to have vcix_state to be a clobbered register thus disable reordering between VCIX intrinsics and inline asm.
23 lines
1.0 KiB
LLVM
23 lines
1.0 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+xsfvcp \
|
|
; RUN: -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK
|
|
; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+xsfvcp \
|
|
; RUN: -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK
|
|
|
|
; VCIX instructions can not reorder between each other.
|
|
define void @test_reorder(<vscale x 1 x i64> %vreg) {
|
|
; CHECK-LABEL: test_reorder:
|
|
; CHECK: # %bb.0: # %entry
|
|
; CHECK-NEXT: vsetivli zero, 0, e64, m1, ta, ma
|
|
; CHECK-NEXT: sf.vc.iv 0, 0, v8, 0
|
|
; CHECK-NEXT: #APP
|
|
; CHECK-NEXT: sf.vc.vv 3, 0, v8, v8
|
|
; CHECK-EMPTY:
|
|
; CHECK-NEXT: #NO_APP
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
call void @llvm.riscv.sf.vc.iv.se.iXLen.nxv1i64.iXLen.iXLen(iXLen 0, iXLen 0, <vscale x 1 x i64> %vreg, iXLen 0, iXLen 0)
|
|
call iXLen asm sideeffect "sf.vc.vv 0x3, 0x0, $1, $1;", "=r,^vr,~{memory},~{vl},~{sf.vcix_state}"(<vscale x 1 x i64> %vreg)
|
|
ret void
|
|
}
|