xref: /llvm-project/llvm/test/CodeGen/RISCV/inline-asm-zfinx-constraint-r.ll (revision 1bc1a79a65a93a0224b5e5f69584219f9981bd23)
1228f88fdSSam Elliott; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2228f88fdSSam Elliott; RUN: llc -mtriple=riscv32 -mattr=+zfinx -target-abi=ilp32 -verify-machineinstrs < %s \
3228f88fdSSam Elliott; RUN:   | FileCheck -check-prefix=RV32FINX %s
4228f88fdSSam Elliott; RUN: llc -mtriple=riscv64 -mattr=+zfinx -target-abi=lp64 -verify-machineinstrs < %s \
5228f88fdSSam Elliott; RUN:   | FileCheck -check-prefix=RV64FINX %s
6228f88fdSSam Elliott
7228f88fdSSam Elliott@gf = external global float
8228f88fdSSam Elliott
9228f88fdSSam Elliottdefine float @constraint_r_float(float %a) nounwind {
10228f88fdSSam Elliott; RV32FINX-LABEL: constraint_r_float:
11228f88fdSSam Elliott; RV32FINX:       # %bb.0:
12228f88fdSSam Elliott; RV32FINX-NEXT:    lui a1, %hi(gf)
13228f88fdSSam Elliott; RV32FINX-NEXT:    lw a1, %lo(gf)(a1)
14228f88fdSSam Elliott; RV32FINX-NEXT:    #APP
15228f88fdSSam Elliott; RV32FINX-NEXT:    fadd.s a0, a0, a1
16228f88fdSSam Elliott; RV32FINX-NEXT:    #NO_APP
17228f88fdSSam Elliott; RV32FINX-NEXT:    ret
18228f88fdSSam Elliott;
19228f88fdSSam Elliott; RV64FINX-LABEL: constraint_r_float:
20228f88fdSSam Elliott; RV64FINX:       # %bb.0:
21228f88fdSSam Elliott; RV64FINX-NEXT:    lui a1, %hi(gf)
22228f88fdSSam Elliott; RV64FINX-NEXT:    lw a1, %lo(gf)(a1)
23228f88fdSSam Elliott; RV64FINX-NEXT:    #APP
24228f88fdSSam Elliott; RV64FINX-NEXT:    fadd.s a0, a0, a1
25228f88fdSSam Elliott; RV64FINX-NEXT:    #NO_APP
26228f88fdSSam Elliott; RV64FINX-NEXT:    ret
27228f88fdSSam Elliott  %1 = load float, ptr @gf
28228f88fdSSam Elliott  %2 = tail call float asm "fadd.s $0, $1, $2", "=r,r,r"(float %a, float %1)
29228f88fdSSam Elliott  ret float %2
30228f88fdSSam Elliott}
31228f88fdSSam Elliott
32228f88fdSSam Elliottdefine float @constraint_cr_float(float %a) nounwind {
33228f88fdSSam Elliott; RV32FINX-LABEL: constraint_cr_float:
34228f88fdSSam Elliott; RV32FINX:       # %bb.0:
35228f88fdSSam Elliott; RV32FINX-NEXT:    lui a1, %hi(gf)
36228f88fdSSam Elliott; RV32FINX-NEXT:    lw a1, %lo(gf)(a1)
37228f88fdSSam Elliott; RV32FINX-NEXT:    #APP
38228f88fdSSam Elliott; RV32FINX-NEXT:    fadd.s a0, a0, a1
39228f88fdSSam Elliott; RV32FINX-NEXT:    #NO_APP
40228f88fdSSam Elliott; RV32FINX-NEXT:    ret
41228f88fdSSam Elliott;
42228f88fdSSam Elliott; RV64FINX-LABEL: constraint_cr_float:
43228f88fdSSam Elliott; RV64FINX:       # %bb.0:
44228f88fdSSam Elliott; RV64FINX-NEXT:    lui a1, %hi(gf)
45228f88fdSSam Elliott; RV64FINX-NEXT:    lw a1, %lo(gf)(a1)
46228f88fdSSam Elliott; RV64FINX-NEXT:    #APP
47228f88fdSSam Elliott; RV64FINX-NEXT:    fadd.s a0, a0, a1
48228f88fdSSam Elliott; RV64FINX-NEXT:    #NO_APP
49228f88fdSSam Elliott; RV64FINX-NEXT:    ret
50228f88fdSSam Elliott  %1 = load float, ptr @gf
51228f88fdSSam Elliott  %2 = tail call float asm "fadd.s $0, $1, $2", "=^cr,cr,cr"(float %a, float %1)
52228f88fdSSam Elliott  ret float %2
53228f88fdSSam Elliott}
54228f88fdSSam Elliott
55228f88fdSSam Elliottdefine float @constraint_float_abi_name(float %a) nounwind {
56228f88fdSSam Elliott; RV32FINX-LABEL: constraint_float_abi_name:
57228f88fdSSam Elliott; RV32FINX:       # %bb.0:
58228f88fdSSam Elliott; RV32FINX-NEXT:    addi sp, sp, -16
59228f88fdSSam Elliott; RV32FINX-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
60228f88fdSSam Elliott; RV32FINX-NEXT:    lui a1, %hi(gf)
61228f88fdSSam Elliott; RV32FINX-NEXT:    lw s0, %lo(gf)(a1)
62228f88fdSSam Elliott; RV32FINX-NEXT:    # kill: def $x10_w killed $x10_w def $x10
63228f88fdSSam Elliott; RV32FINX-NEXT:    #APP
64228f88fdSSam Elliott; RV32FINX-NEXT:    fadd.s t0, a0, s0
65228f88fdSSam Elliott; RV32FINX-NEXT:    #NO_APP
66228f88fdSSam Elliott; RV32FINX-NEXT:    mv a0, t0
67228f88fdSSam Elliott; RV32FINX-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
68228f88fdSSam Elliott; RV32FINX-NEXT:    addi sp, sp, 16
69228f88fdSSam Elliott; RV32FINX-NEXT:    ret
70228f88fdSSam Elliott;
71228f88fdSSam Elliott; RV64FINX-LABEL: constraint_float_abi_name:
72228f88fdSSam Elliott; RV64FINX:       # %bb.0:
73228f88fdSSam Elliott; RV64FINX-NEXT:    addi sp, sp, -16
74228f88fdSSam Elliott; RV64FINX-NEXT:    sd s0, 8(sp) # 8-byte Folded Spill
75228f88fdSSam Elliott; RV64FINX-NEXT:    lui a1, %hi(gf)
76228f88fdSSam Elliott; RV64FINX-NEXT:    lw s0, %lo(gf)(a1)
77228f88fdSSam Elliott; RV64FINX-NEXT:    # kill: def $x10_w killed $x10_w def $x10
78228f88fdSSam Elliott; RV64FINX-NEXT:    #APP
79228f88fdSSam Elliott; RV64FINX-NEXT:    fadd.s t0, a0, s0
80228f88fdSSam Elliott; RV64FINX-NEXT:    #NO_APP
81228f88fdSSam Elliott; RV64FINX-NEXT:    mv a0, t0
82228f88fdSSam Elliott; RV64FINX-NEXT:    ld s0, 8(sp) # 8-byte Folded Reload
83228f88fdSSam Elliott; RV64FINX-NEXT:    addi sp, sp, 16
84228f88fdSSam Elliott; RV64FINX-NEXT:    ret
85228f88fdSSam Elliott  %1 = load float, ptr @gf
86228f88fdSSam Elliott  %2 = tail call float asm "fadd.s $0, $1, $2", "={t0},{a0},{s0}"(float %a, float %1)
87228f88fdSSam Elliott  ret float %2
88228f88fdSSam Elliott}
89228f88fdSSam Elliott
90*1bc1a79aSCraig Topperdefine float @constraint_f_float(float %a) nounwind {
91*1bc1a79aSCraig Topper; RV32FINX-LABEL: constraint_f_float:
92*1bc1a79aSCraig Topper; RV32FINX:       # %bb.0:
93*1bc1a79aSCraig Topper; RV32FINX-NEXT:    lui a1, %hi(gf)
94*1bc1a79aSCraig Topper; RV32FINX-NEXT:    lw a1, %lo(gf)(a1)
95*1bc1a79aSCraig Topper; RV32FINX-NEXT:    #APP
96*1bc1a79aSCraig Topper; RV32FINX-NEXT:    fadd.s a0, a0, a1
97*1bc1a79aSCraig Topper; RV32FINX-NEXT:    #NO_APP
98*1bc1a79aSCraig Topper; RV32FINX-NEXT:    ret
99*1bc1a79aSCraig Topper;
100*1bc1a79aSCraig Topper; RV64FINX-LABEL: constraint_f_float:
101*1bc1a79aSCraig Topper; RV64FINX:       # %bb.0:
102*1bc1a79aSCraig Topper; RV64FINX-NEXT:    lui a1, %hi(gf)
103*1bc1a79aSCraig Topper; RV64FINX-NEXT:    lw a1, %lo(gf)(a1)
104*1bc1a79aSCraig Topper; RV64FINX-NEXT:    #APP
105*1bc1a79aSCraig Topper; RV64FINX-NEXT:    fadd.s a0, a0, a1
106*1bc1a79aSCraig Topper; RV64FINX-NEXT:    #NO_APP
107*1bc1a79aSCraig Topper; RV64FINX-NEXT:    ret
108*1bc1a79aSCraig Topper  %1 = load float, ptr @gf
109*1bc1a79aSCraig Topper  %2 = tail call float asm "fadd.s $0, $1, $2", "=f,f,f"(float %a, float %1)
110*1bc1a79aSCraig Topper  ret float %2
111*1bc1a79aSCraig Topper}
112*1bc1a79aSCraig Topper
113*1bc1a79aSCraig Topperdefine float @constraint_cf_float(float %a) nounwind {
114*1bc1a79aSCraig Topper; RV32FINX-LABEL: constraint_cf_float:
115*1bc1a79aSCraig Topper; RV32FINX:       # %bb.0:
116*1bc1a79aSCraig Topper; RV32FINX-NEXT:    lui a1, %hi(gf)
117*1bc1a79aSCraig Topper; RV32FINX-NEXT:    lw a1, %lo(gf)(a1)
118*1bc1a79aSCraig Topper; RV32FINX-NEXT:    #APP
119*1bc1a79aSCraig Topper; RV32FINX-NEXT:    fadd.s a0, a0, a1
120*1bc1a79aSCraig Topper; RV32FINX-NEXT:    #NO_APP
121*1bc1a79aSCraig Topper; RV32FINX-NEXT:    ret
122*1bc1a79aSCraig Topper;
123*1bc1a79aSCraig Topper; RV64FINX-LABEL: constraint_cf_float:
124*1bc1a79aSCraig Topper; RV64FINX:       # %bb.0:
125*1bc1a79aSCraig Topper; RV64FINX-NEXT:    lui a1, %hi(gf)
126*1bc1a79aSCraig Topper; RV64FINX-NEXT:    lw a1, %lo(gf)(a1)
127*1bc1a79aSCraig Topper; RV64FINX-NEXT:    #APP
128*1bc1a79aSCraig Topper; RV64FINX-NEXT:    fadd.s a0, a0, a1
129*1bc1a79aSCraig Topper; RV64FINX-NEXT:    #NO_APP
130*1bc1a79aSCraig Topper; RV64FINX-NEXT:    ret
131*1bc1a79aSCraig Topper  %1 = load float, ptr @gf
132*1bc1a79aSCraig Topper  %2 = tail call float asm "fadd.s $0, $1, $2", "=^cf,cf,cf"(float %a, float %1)
133*1bc1a79aSCraig Topper  ret float %2
134*1bc1a79aSCraig Topper}
135