xref: /llvm-project/llvm/test/CodeGen/RISCV/repeated-fp-divisors.ll (revision 7b0c41841eb7e1c2f56384c421918ff3fb2d9058)
1619f455dSAnton Sidorenko; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2619f455dSAnton Sidorenko; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s | FileCheck %s
3619f455dSAnton Sidorenko
437f9eec1SAnton Sidorenko; Negative test
5619f455dSAnton Sidorenkodefine void @single_fdiv(double %a0, double %a1, ptr %res) {
6619f455dSAnton Sidorenko; CHECK-LABEL: single_fdiv:
7619f455dSAnton Sidorenko; CHECK:       # %bb.0: # %entry
8*7b0c4184SCraig Topper; CHECK-NEXT:    fdiv.d fa5, fa1, fa0
9*7b0c4184SCraig Topper; CHECK-NEXT:    fsd fa5, 0(a0)
10619f455dSAnton Sidorenko; CHECK-NEXT:    ret
11619f455dSAnton Sidorenkoentry:
12619f455dSAnton Sidorenko  %div = fdiv arcp double %a1, %a0
13619f455dSAnton Sidorenko  store double %div, ptr %res
14619f455dSAnton Sidorenko  ret void
15619f455dSAnton Sidorenko}
16619f455dSAnton Sidorenko
17619f455dSAnton Sidorenkodefine void @two_fdivs(double %a0, double %a1, double %a2, ptr %res) {
18619f455dSAnton Sidorenko; CHECK-LABEL: two_fdivs:
19619f455dSAnton Sidorenko; CHECK:       # %bb.0: # %entry
2037f9eec1SAnton Sidorenko; CHECK-NEXT:    lui a1, %hi(.LCPI1_0)
21*7b0c4184SCraig Topper; CHECK-NEXT:    fld fa5, %lo(.LCPI1_0)(a1)
22*7b0c4184SCraig Topper; CHECK-NEXT:    fdiv.d fa5, fa5, fa0
23*7b0c4184SCraig Topper; CHECK-NEXT:    fmul.d fa4, fa1, fa5
24*7b0c4184SCraig Topper; CHECK-NEXT:    fmul.d fa5, fa2, fa5
25*7b0c4184SCraig Topper; CHECK-NEXT:    fsd fa4, 0(a0)
26*7b0c4184SCraig Topper; CHECK-NEXT:    fsd fa5, 8(a0)
27619f455dSAnton Sidorenko; CHECK-NEXT:    ret
28619f455dSAnton Sidorenkoentry:
29619f455dSAnton Sidorenko  %div = fdiv arcp double %a1, %a0
30619f455dSAnton Sidorenko  %div1 = fdiv arcp double %a2, %a0
31619f455dSAnton Sidorenko  store double %div, ptr %res
32619f455dSAnton Sidorenko  %arrayidx2 = getelementptr inbounds double, ptr %res, i64 1
33619f455dSAnton Sidorenko  store double %div1, ptr %arrayidx2
34619f455dSAnton Sidorenko  ret void
35619f455dSAnton Sidorenko}
36619f455dSAnton Sidorenko
3737f9eec1SAnton Sidorenko; Negative test
38619f455dSAnton Sidorenkodefine void @no_arcp(double %a0, double %a1, double %a2, ptr %res) {
39619f455dSAnton Sidorenko; CHECK-LABEL: no_arcp:
40619f455dSAnton Sidorenko; CHECK:       # %bb.0: # %entry
41*7b0c4184SCraig Topper; CHECK-NEXT:    fdiv.d fa5, fa1, fa0
42*7b0c4184SCraig Topper; CHECK-NEXT:    fdiv.d fa4, fa2, fa0
43*7b0c4184SCraig Topper; CHECK-NEXT:    fsd fa5, 0(a0)
44*7b0c4184SCraig Topper; CHECK-NEXT:    fsd fa4, 8(a0)
45619f455dSAnton Sidorenko; CHECK-NEXT:    ret
46619f455dSAnton Sidorenkoentry:
47619f455dSAnton Sidorenko  %div = fdiv arcp double %a1, %a0
48619f455dSAnton Sidorenko  %div1 = fdiv double %a2, %a0
49619f455dSAnton Sidorenko  store double %div, ptr %res
50619f455dSAnton Sidorenko  %arrayidx2 = getelementptr inbounds double, ptr %res, i64 1
51619f455dSAnton Sidorenko  store double %div1, ptr %arrayidx2
52619f455dSAnton Sidorenko  ret void
53619f455dSAnton Sidorenko}
54