xref: /llvm-project/llvm/test/CodeGen/LoongArch/lasx/inline-asm-reg-names.ll (revision d25c79dc70008b835312e5cc7ef48b199fda3165)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
3
4define void @register_xr1() nounwind {
5; CHECK-LABEL: register_xr1:
6; CHECK:       # %bb.0: # %entry
7; CHECK-NEXT:    #APP
8; CHECK-NEXT:    xvldi $xr1, 1
9; CHECK-NEXT:    #NO_APP
10; CHECK-NEXT:    ret
11entry:
12  %0 = tail call <4 x i64> asm sideeffect "xvldi ${0:u}, 1", "={$xr1}"()
13  ret void
14}
15
16define void @register_xr7() nounwind {
17; CHECK-LABEL: register_xr7:
18; CHECK:       # %bb.0: # %entry
19; CHECK-NEXT:    #APP
20; CHECK-NEXT:    xvldi $xr7, 1
21; CHECK-NEXT:    #NO_APP
22; CHECK-NEXT:    ret
23entry:
24  %0 = tail call <4 x i64> asm sideeffect "xvldi ${0:u}, 1", "={$xr7}"()
25  ret void
26}
27
28define void @register_xr23() nounwind {
29; CHECK-LABEL: register_xr23:
30; CHECK:       # %bb.0: # %entry
31; CHECK-NEXT:    #APP
32; CHECK-NEXT:    xvldi $xr23, 1
33; CHECK-NEXT:    #NO_APP
34; CHECK-NEXT:    ret
35entry:
36  %0 = tail call <4 x i64> asm sideeffect "xvldi ${0:u}, 1", "={$xr23}"()
37  ret void
38}
39
40;; The lower 64-bit of the vector register '$xr31' is overlapped with
41;; the floating-point register '$f31' ('$fs7'). And '$f31' ('$fs7')
42;; is a callee-saved register which is preserved across calls.
43;; That's why the fst.d and fld.d instructions are emitted.
44define void @register_xr31() nounwind {
45; CHECK-LABEL: register_xr31:
46; CHECK:       # %bb.0: # %entry
47; CHECK-NEXT:    addi.d $sp, $sp, -16
48; CHECK-NEXT:    fst.d $fs7, $sp, 8 # 8-byte Folded Spill
49; CHECK-NEXT:    #APP
50; CHECK-NEXT:    xvldi $xr31, 1
51; CHECK-NEXT:    #NO_APP
52; CHECK-NEXT:    fld.d $fs7, $sp, 8 # 8-byte Folded Reload
53; CHECK-NEXT:    addi.d $sp, $sp, 16
54; CHECK-NEXT:    ret
55entry:
56  %0 = tail call <4 x i64> asm sideeffect "xvldi ${0:u}, 1", "={$xr31}"()
57  ret void
58}
59