1; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32
2; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64
3
4;; Exercise the 'fsub' LLVM IR: https://llvm.org/docs/LangRef.html#fsub-instruction
5
6define float @fsub_s(float %x, float %y) {
7; LA32-LABEL: fsub_s:
8; LA32:       # %bb.0:
9; LA32-NEXT:    fsub.s $fa0, $fa0, $fa1
10; LA32-NEXT:    jirl $zero, $ra, 0
11;
12; LA64-LABEL: fsub_s:
13; LA64:       # %bb.0:
14; LA64-NEXT:    fsub.s $fa0, $fa0, $fa1
15; LA64-NEXT:    jirl $zero, $ra, 0
16  %sub = fsub float %x, %y
17  ret float %sub
18}
19
20define double @fsub_d(double %x, double %y) {
21; LA32-LABEL: fsub_d:
22; LA32:       # %bb.0:
23; LA32-NEXT:    fsub.d $fa0, $fa0, $fa1
24; LA32-NEXT:    jirl $zero, $ra, 0
25;
26; LA64-LABEL: fsub_d:
27; LA64:       # %bb.0:
28; LA64-NEXT:    fsub.d $fa0, $fa0, $fa1
29; LA64-NEXT:    jirl $zero, $ra, 0
30  %sub = fsub double %x, %y
31  ret double %sub
32}
33
34define float @fneg_s(float %x) {
35; LA32-LABEL: fneg_s:
36; LA32:       # %bb.0:
37; LA32-NEXT:    fneg.s $fa0, $fa0
38; LA32-NEXT:    jirl $zero, $ra, 0
39;
40; LA64-LABEL: fneg_s:
41; LA64:       # %bb.0:
42; LA64-NEXT:    fneg.s $fa0, $fa0
43; LA64-NEXT:    jirl $zero, $ra, 0
44    %res = fsub float -0.0, %x
45    ret float %res
46}
47
48define double @fneg_d(double %x) {
49; LA32-LABEL: fneg_d:
50; LA32:       # %bb.0:
51; LA32-NEXT:    fneg.d $fa0, $fa0
52; LA32-NEXT:    jirl $zero, $ra, 0
53;
54; LA64-LABEL: fneg_d:
55; LA64:       # %bb.0:
56; LA64-NEXT:    fneg.d $fa0, $fa0
57; LA64-NEXT:    jirl $zero, $ra, 0
58    %res = fsub double -0.0, %x
59    ret double %res
60}
61