xref: /llvm-project/llvm/test/CodeGen/LoongArch/float-imm.ll (revision b2e69f52bb5da067109b9a7d1f73d0dd1a6bb5ad)
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:    ret
10;
11; LA64-LABEL: f32_positive_zero:
12; LA64:       # %bb.0:
13; LA64-NEXT:    movgr2fr.w $fa0, $zero
14; LA64-NEXT:    ret
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:    ret
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:    ret
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, %pc_hi20(.LCPI2_0)
37; LA32-NEXT:    fld.s $fa0, $a0, %pc_lo12(.LCPI2_0)
38; LA32-NEXT:    ret
39;
40; LA64-LABEL: f32_constant_pi:
41; LA64:       # %bb.0:
42; LA64-NEXT:    pcalau12i $a0, %pc_hi20(.LCPI2_0)
43; LA64-NEXT:    fld.s $fa0, $a0, %pc_lo12(.LCPI2_0)
44; LA64-NEXT:    ret
45  ret float 3.14159274101257324218750
46}
47
48define float @f32_add_fimm1(float %a) nounwind {
49; LA32-LABEL: f32_add_fimm1:
50; LA32:       # %bb.0:
51; LA32-NEXT:    addi.w $a0, $zero, 1
52; LA32-NEXT:    movgr2fr.w $fa1, $a0
53; LA32-NEXT:    ffint.s.w $fa1, $fa1
54; LA32-NEXT:    fadd.s $fa0, $fa0, $fa1
55; LA32-NEXT:    ret
56;
57; LA64-LABEL: f32_add_fimm1:
58; LA64:       # %bb.0:
59; LA64-NEXT:    addi.w $a0, $zero, 1
60; LA64-NEXT:    movgr2fr.w $fa1, $a0
61; LA64-NEXT:    ffint.s.w $fa1, $fa1
62; LA64-NEXT:    fadd.s $fa0, $fa0, $fa1
63; LA64-NEXT:    ret
64  %1 = fadd float %a, 1.0
65  ret float %1
66}
67
68define float @f32_positive_fimm1() nounwind {
69; LA32-LABEL: f32_positive_fimm1:
70; LA32:       # %bb.0:
71; LA32-NEXT:    addi.w $a0, $zero, 1
72; LA32-NEXT:    movgr2fr.w $fa0, $a0
73; LA32-NEXT:    ffint.s.w $fa0, $fa0
74; LA32-NEXT:    ret
75;
76; LA64-LABEL: f32_positive_fimm1:
77; LA64:       # %bb.0:
78; LA64-NEXT:    addi.w $a0, $zero, 1
79; LA64-NEXT:    movgr2fr.w $fa0, $a0
80; LA64-NEXT:    ffint.s.w $fa0, $fa0
81; LA64-NEXT:    ret
82  ret float 1.0
83}
84