1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc --mtriple=loongarch32 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA32
3; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA64
4
5define float @f32_positive_zero() nounwind {
6; LA32-LABEL: f32_positive_zero:
7; LA32:       # %bb.0:
8; LA32-NEXT:    movgr2fr.w $fa0, $zero
9; LA32-NEXT:    jirl $zero, $ra, 0
10;
11; LA64-LABEL: f32_positive_zero:
12; LA64:       # %bb.0:
13; LA64-NEXT:    movgr2fr.w $fa0, $zero
14; LA64-NEXT:    jirl $zero, $ra, 0
15  ret float 0.0
16}
17
18define float @f32_negative_zero() nounwind {
19; LA32-LABEL: f32_negative_zero:
20; LA32:       # %bb.0:
21; LA32-NEXT:    movgr2fr.w $fa0, $zero
22; LA32-NEXT:    fneg.s $fa0, $fa0
23; LA32-NEXT:    jirl $zero, $ra, 0
24;
25; LA64-LABEL: f32_negative_zero:
26; LA64:       # %bb.0:
27; LA64-NEXT:    movgr2fr.w $fa0, $zero
28; LA64-NEXT:    fneg.s $fa0, $fa0
29; LA64-NEXT:    jirl $zero, $ra, 0
30  ret float -0.0
31}
32
33define float @f32_constant_pi() nounwind {
34; LA32-LABEL: f32_constant_pi:
35; LA32:       # %bb.0:
36; LA32-NEXT:    pcalau12i $a0, .LCPI2_0
37; LA32-NEXT:    addi.w $a0, $a0, .LCPI2_0
38; LA32-NEXT:    fld.s $fa0, $a0, 0
39; LA32-NEXT:    jirl $zero, $ra, 0
40;
41; LA64-LABEL: f32_constant_pi:
42; LA64:       # %bb.0:
43; LA64-NEXT:    pcalau12i $a0, .LCPI2_0
44; LA64-NEXT:    addi.d $a0, $a0, .LCPI2_0
45; LA64-NEXT:    fld.s $fa0, $a0, 0
46; LA64-NEXT:    jirl $zero, $ra, 0
47  ret float 3.14159274101257324218750
48}
49
50define float @f32_add_fimm1(float %a) nounwind {
51; LA32-LABEL: f32_add_fimm1:
52; LA32:       # %bb.0:
53; LA32-NEXT:    addi.w $a0, $zero, 1
54; LA32-NEXT:    movgr2fr.w $fa1, $a0
55; LA32-NEXT:    ffint.s.w $fa1, $fa1
56; LA32-NEXT:    fadd.s $fa0, $fa0, $fa1
57; LA32-NEXT:    jirl $zero, $ra, 0
58;
59; LA64-LABEL: f32_add_fimm1:
60; LA64:       # %bb.0:
61; LA64-NEXT:    addi.w $a0, $zero, 1
62; LA64-NEXT:    movgr2fr.w $fa1, $a0
63; LA64-NEXT:    ffint.s.w $fa1, $fa1
64; LA64-NEXT:    fadd.s $fa0, $fa0, $fa1
65; LA64-NEXT:    jirl $zero, $ra, 0
66  %1 = fadd float %a, 1.0
67  ret float %1
68}
69
70define float @f32_positive_fimm1() nounwind {
71; LA32-LABEL: f32_positive_fimm1:
72; LA32:       # %bb.0:
73; LA32-NEXT:    addi.w $a0, $zero, 1
74; LA32-NEXT:    movgr2fr.w $fa0, $a0
75; LA32-NEXT:    ffint.s.w $fa0, $fa0
76; LA32-NEXT:    jirl $zero, $ra, 0
77;
78; LA64-LABEL: f32_positive_fimm1:
79; LA64:       # %bb.0:
80; LA64-NEXT:    addi.w $a0, $zero, 1
81; LA64-NEXT:    movgr2fr.w $fa0, $a0
82; LA64-NEXT:    ffint.s.w $fa0, $fa0
83; LA64-NEXT:    jirl $zero, $ra, 0
84  ret float 1.0
85}
86