xref: /llvm-project/llvm/test/CodeGen/RISCV/bf16-promote.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1934b4905SJun Sha (Joshua); NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2934b4905SJun Sha (Joshua); RUN: llc -mtriple=riscv64 -mattr=+d -target-abi=lp64d < %s | FileCheck --check-prefixes=CHECK,RV64 %s
3934b4905SJun Sha (Joshua); RUN: llc -mtriple=riscv32 -mattr=+d -target-abi=ilp32d < %s | FileCheck --check-prefixes=CHECK,RV32 %s
4934b4905SJun Sha (Joshua)
5934b4905SJun Sha (Joshua)define void @test_load_store(ptr %p, ptr %q) nounwind {
6934b4905SJun Sha (Joshua); CHECK-LABEL: test_load_store:
7934b4905SJun Sha (Joshua); CHECK:       # %bb.0:
8934b4905SJun Sha (Joshua); CHECK-NEXT:    lh a0, 0(a0)
9934b4905SJun Sha (Joshua); CHECK-NEXT:    sh a0, 0(a1)
10934b4905SJun Sha (Joshua); CHECK-NEXT:    ret
11934b4905SJun Sha (Joshua)  %a = load bfloat, ptr %p
12934b4905SJun Sha (Joshua)  store bfloat %a, ptr %q
13934b4905SJun Sha (Joshua)  ret void
14934b4905SJun Sha (Joshua)}
15934b4905SJun Sha (Joshua)
16934b4905SJun Sha (Joshua)define float @test_fpextend_float(ptr %p) nounwind {
17934b4905SJun Sha (Joshua); CHECK-LABEL: test_fpextend_float:
18934b4905SJun Sha (Joshua); CHECK:       # %bb.0:
19934b4905SJun Sha (Joshua); CHECK-NEXT:    lhu a0, 0(a0)
20934b4905SJun Sha (Joshua); CHECK-NEXT:    slli a0, a0, 16
21934b4905SJun Sha (Joshua); CHECK-NEXT:    fmv.w.x fa0, a0
22934b4905SJun Sha (Joshua); CHECK-NEXT:    ret
23934b4905SJun Sha (Joshua)  %a = load bfloat, ptr %p
24934b4905SJun Sha (Joshua)  %r = fpext bfloat %a to float
25934b4905SJun Sha (Joshua)  ret float %r
26934b4905SJun Sha (Joshua)}
27934b4905SJun Sha (Joshua)
28934b4905SJun Sha (Joshua)define double @test_fpextend_double(ptr %p) nounwind {
29934b4905SJun Sha (Joshua); CHECK-LABEL: test_fpextend_double:
30934b4905SJun Sha (Joshua); CHECK:       # %bb.0:
31934b4905SJun Sha (Joshua); CHECK-NEXT:    lhu a0, 0(a0)
32934b4905SJun Sha (Joshua); CHECK-NEXT:    slli a0, a0, 16
33934b4905SJun Sha (Joshua); CHECK-NEXT:    fmv.w.x fa5, a0
34934b4905SJun Sha (Joshua); CHECK-NEXT:    fcvt.d.s fa0, fa5
35934b4905SJun Sha (Joshua); CHECK-NEXT:    ret
36934b4905SJun Sha (Joshua)  %a = load bfloat, ptr %p
37934b4905SJun Sha (Joshua)  %r = fpext bfloat %a to double
38934b4905SJun Sha (Joshua)  ret double %r
39934b4905SJun Sha (Joshua)}
40934b4905SJun Sha (Joshua)
41934b4905SJun Sha (Joshua)define void @test_fptrunc_float(float %f, ptr %p) nounwind {
42934b4905SJun Sha (Joshua); RV64-LABEL: test_fptrunc_float:
43934b4905SJun Sha (Joshua); RV64:       # %bb.0:
44934b4905SJun Sha (Joshua); RV64-NEXT:    addi sp, sp, -16
45934b4905SJun Sha (Joshua); RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
46934b4905SJun Sha (Joshua); RV64-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
47934b4905SJun Sha (Joshua); RV64-NEXT:    mv s0, a0
48eabaee0cSFangrui Song; RV64-NEXT:    call __truncsfbf2
49934b4905SJun Sha (Joshua); RV64-NEXT:    fmv.x.w a0, fa0
50934b4905SJun Sha (Joshua); RV64-NEXT:    sh a0, 0(s0)
51934b4905SJun Sha (Joshua); RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
52934b4905SJun Sha (Joshua); RV64-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
53934b4905SJun Sha (Joshua); RV64-NEXT:    addi sp, sp, 16
54934b4905SJun Sha (Joshua); RV64-NEXT:    ret
55934b4905SJun Sha (Joshua);
56934b4905SJun Sha (Joshua); RV32-LABEL: test_fptrunc_float:
57934b4905SJun Sha (Joshua); RV32:       # %bb.0:
58934b4905SJun Sha (Joshua); RV32-NEXT:    addi sp, sp, -16
59934b4905SJun Sha (Joshua); RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
60934b4905SJun Sha (Joshua); RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
61934b4905SJun Sha (Joshua); RV32-NEXT:    mv s0, a0
62eabaee0cSFangrui Song; RV32-NEXT:    call __truncsfbf2
63934b4905SJun Sha (Joshua); RV32-NEXT:    fmv.x.w a0, fa0
64934b4905SJun Sha (Joshua); RV32-NEXT:    sh a0, 0(s0)
65934b4905SJun Sha (Joshua); RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
66934b4905SJun Sha (Joshua); RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
67934b4905SJun Sha (Joshua); RV32-NEXT:    addi sp, sp, 16
68934b4905SJun Sha (Joshua); RV32-NEXT:    ret
69934b4905SJun Sha (Joshua)  %a = fptrunc float %f to bfloat
70934b4905SJun Sha (Joshua)  store bfloat %a, ptr %p
71934b4905SJun Sha (Joshua)  ret void
72934b4905SJun Sha (Joshua)}
73934b4905SJun Sha (Joshua)
74934b4905SJun Sha (Joshua)define void @test_fptrunc_double(double %d, ptr %p) nounwind {
75934b4905SJun Sha (Joshua); RV64-LABEL: test_fptrunc_double:
76934b4905SJun Sha (Joshua); RV64:       # %bb.0:
77934b4905SJun Sha (Joshua); RV64-NEXT:    addi sp, sp, -16
78934b4905SJun Sha (Joshua); RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
79934b4905SJun Sha (Joshua); RV64-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
80934b4905SJun Sha (Joshua); RV64-NEXT:    mv s0, a0
81eabaee0cSFangrui Song; RV64-NEXT:    call __truncdfbf2
82934b4905SJun Sha (Joshua); RV64-NEXT:    fmv.x.w a0, fa0
83934b4905SJun Sha (Joshua); RV64-NEXT:    sh a0, 0(s0)
84934b4905SJun Sha (Joshua); RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
85934b4905SJun Sha (Joshua); RV64-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
86934b4905SJun Sha (Joshua); RV64-NEXT:    addi sp, sp, 16
87934b4905SJun Sha (Joshua); RV64-NEXT:    ret
88934b4905SJun Sha (Joshua);
89934b4905SJun Sha (Joshua); RV32-LABEL: test_fptrunc_double:
90934b4905SJun Sha (Joshua); RV32:       # %bb.0:
91934b4905SJun Sha (Joshua); RV32-NEXT:    addi sp, sp, -16
92934b4905SJun Sha (Joshua); RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
93934b4905SJun Sha (Joshua); RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
94934b4905SJun Sha (Joshua); RV32-NEXT:    mv s0, a0
95eabaee0cSFangrui Song; RV32-NEXT:    call __truncdfbf2
96934b4905SJun Sha (Joshua); RV32-NEXT:    fmv.x.w a0, fa0
97934b4905SJun Sha (Joshua); RV32-NEXT:    sh a0, 0(s0)
98934b4905SJun Sha (Joshua); RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
99934b4905SJun Sha (Joshua); RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
100934b4905SJun Sha (Joshua); RV32-NEXT:    addi sp, sp, 16
101934b4905SJun Sha (Joshua); RV32-NEXT:    ret
102934b4905SJun Sha (Joshua)  %a = fptrunc double %d to bfloat
103934b4905SJun Sha (Joshua)  store bfloat %a, ptr %p
104934b4905SJun Sha (Joshua)  ret void
105934b4905SJun Sha (Joshua)}
106934b4905SJun Sha (Joshua)
107934b4905SJun Sha (Joshua)define void @test_fadd(ptr %p, ptr %q) nounwind {
108934b4905SJun Sha (Joshua); RV64-LABEL: test_fadd:
109934b4905SJun Sha (Joshua); RV64:       # %bb.0:
110934b4905SJun Sha (Joshua); RV64-NEXT:    addi sp, sp, -16
111934b4905SJun Sha (Joshua); RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
112934b4905SJun Sha (Joshua); RV64-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
113934b4905SJun Sha (Joshua); RV64-NEXT:    mv s0, a0
114*9122c523SPengcheng Wang; RV64-NEXT:    lhu a0, 0(a1)
115*9122c523SPengcheng Wang; RV64-NEXT:    lhu a1, 0(s0)
116934b4905SJun Sha (Joshua); RV64-NEXT:    slli a0, a0, 16
117*9122c523SPengcheng Wang; RV64-NEXT:    slli a1, a1, 16
118*9122c523SPengcheng Wang; RV64-NEXT:    fmv.w.x fa5, a0
119*9122c523SPengcheng Wang; RV64-NEXT:    fmv.w.x fa4, a1
120934b4905SJun Sha (Joshua); RV64-NEXT:    fadd.s fa0, fa4, fa5
121eabaee0cSFangrui Song; RV64-NEXT:    call __truncsfbf2
122934b4905SJun Sha (Joshua); RV64-NEXT:    fmv.x.w a0, fa0
123934b4905SJun Sha (Joshua); RV64-NEXT:    sh a0, 0(s0)
124934b4905SJun Sha (Joshua); RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
125934b4905SJun Sha (Joshua); RV64-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
126934b4905SJun Sha (Joshua); RV64-NEXT:    addi sp, sp, 16
127934b4905SJun Sha (Joshua); RV64-NEXT:    ret
128934b4905SJun Sha (Joshua);
129934b4905SJun Sha (Joshua); RV32-LABEL: test_fadd:
130934b4905SJun Sha (Joshua); RV32:       # %bb.0:
131934b4905SJun Sha (Joshua); RV32-NEXT:    addi sp, sp, -16
132934b4905SJun Sha (Joshua); RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
133934b4905SJun Sha (Joshua); RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
134934b4905SJun Sha (Joshua); RV32-NEXT:    mv s0, a0
135*9122c523SPengcheng Wang; RV32-NEXT:    lhu a0, 0(a1)
136*9122c523SPengcheng Wang; RV32-NEXT:    lhu a1, 0(s0)
137934b4905SJun Sha (Joshua); RV32-NEXT:    slli a0, a0, 16
138*9122c523SPengcheng Wang; RV32-NEXT:    slli a1, a1, 16
139*9122c523SPengcheng Wang; RV32-NEXT:    fmv.w.x fa5, a0
140*9122c523SPengcheng Wang; RV32-NEXT:    fmv.w.x fa4, a1
141934b4905SJun Sha (Joshua); RV32-NEXT:    fadd.s fa0, fa4, fa5
142eabaee0cSFangrui Song; RV32-NEXT:    call __truncsfbf2
143934b4905SJun Sha (Joshua); RV32-NEXT:    fmv.x.w a0, fa0
144934b4905SJun Sha (Joshua); RV32-NEXT:    sh a0, 0(s0)
145934b4905SJun Sha (Joshua); RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
146934b4905SJun Sha (Joshua); RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
147934b4905SJun Sha (Joshua); RV32-NEXT:    addi sp, sp, 16
148934b4905SJun Sha (Joshua); RV32-NEXT:    ret
149934b4905SJun Sha (Joshua)  %a = load bfloat, ptr %p
150934b4905SJun Sha (Joshua)  %b = load bfloat, ptr %q
151934b4905SJun Sha (Joshua)  %r = fadd bfloat %a, %b
152934b4905SJun Sha (Joshua)  store bfloat %r, ptr %p
153934b4905SJun Sha (Joshua)  ret void
154934b4905SJun Sha (Joshua)}
155