xref: /llvm-project/llvm/test/CodeGen/LoongArch/double-imm.ll (revision 1897bf61f0bc85c8637997d0f2aa7d94d375d787)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32
3; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64
4
5define double @f64_positive_zero() nounwind {
6; LA32-LABEL: f64_positive_zero:
7; LA32:       # %bb.0:
8; LA32-NEXT:    movgr2fr.w $fa0, $zero
9; LA32-NEXT:    movgr2frh.w $fa0, $zero
10; LA32-NEXT:    ret
11;
12; LA64-LABEL: f64_positive_zero:
13; LA64:       # %bb.0:
14; LA64-NEXT:    movgr2fr.d $fa0, $zero
15; LA64-NEXT:    ret
16  ret double 0.0
17}
18
19define double @f64_negative_zero() nounwind {
20; LA32-LABEL: f64_negative_zero:
21; LA32:       # %bb.0:
22; LA32-NEXT:    movgr2fr.w $fa0, $zero
23; LA32-NEXT:    movgr2frh.w $fa0, $zero
24; LA32-NEXT:    fneg.d $fa0, $fa0
25; LA32-NEXT:    ret
26;
27; LA64-LABEL: f64_negative_zero:
28; LA64:       # %bb.0:
29; LA64-NEXT:    movgr2fr.d $fa0, $zero
30; LA64-NEXT:    fneg.d $fa0, $fa0
31; LA64-NEXT:    ret
32  ret double -0.0
33}
34
35define double @f64_constant_pi() nounwind {
36; LA32-LABEL: f64_constant_pi:
37; LA32:       # %bb.0:
38; LA32-NEXT:    pcalau12i $a0, %pc_hi20(.LCPI2_0)
39; LA32-NEXT:    fld.d $fa0, $a0, %pc_lo12(.LCPI2_0)
40; LA32-NEXT:    ret
41;
42; LA64-LABEL: f64_constant_pi:
43; LA64:       # %bb.0:
44; LA64-NEXT:    pcalau12i $a0, %pc_hi20(.LCPI2_0)
45; LA64-NEXT:    fld.d $fa0, $a0, %pc_lo12(.LCPI2_0)
46; LA64-NEXT:    ret
47  ret double 3.1415926535897931159979634685441851615905761718750
48}
49
50define double @f64_add_fimm1(double %a) nounwind {
51; LA32-LABEL: f64_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:    fcvt.d.s $fa1, $fa1
57; LA32-NEXT:    fadd.d $fa0, $fa0, $fa1
58; LA32-NEXT:    ret
59;
60; LA64-LABEL: f64_add_fimm1:
61; LA64:       # %bb.0:
62; LA64-NEXT:    vldi $vr1, -912
63; LA64-NEXT:    fadd.d $fa0, $fa0, $fa1
64; LA64-NEXT:    ret
65  %1 = fadd double %a, 1.0
66  ret double %1
67}
68
69define double @f64_positive_fimm1() nounwind {
70; LA32-LABEL: f64_positive_fimm1:
71; LA32:       # %bb.0:
72; LA32-NEXT:    addi.w $a0, $zero, 1
73; LA32-NEXT:    movgr2fr.w $fa0, $a0
74; LA32-NEXT:    ffint.s.w $fa0, $fa0
75; LA32-NEXT:    fcvt.d.s $fa0, $fa0
76; LA32-NEXT:    ret
77;
78; LA64-LABEL: f64_positive_fimm1:
79; LA64:       # %bb.0:
80; LA64-NEXT:    vldi $vr0, -912
81; LA64-NEXT:    ret
82  ret double 1.0
83}
84