Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / LoongArch / fp-reciprocal.ll
blobb858099839cacc4d662650333a3a78b8aade42d8
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=LA32F
3 ; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32D
4 ; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA64F
5 ; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64D
8 define float @f32_reciprocal(float %a) nounwind {
9 ; LA32F-LABEL: f32_reciprocal:
10 ; LA32F:       # %bb.0:
11 ; LA32F-NEXT:    frecip.s $fa0, $fa0
12 ; LA32F-NEXT:    ret
14 ; LA32D-LABEL: f32_reciprocal:
15 ; LA32D:       # %bb.0:
16 ; LA32D-NEXT:    frecip.s $fa0, $fa0
17 ; LA32D-NEXT:    ret
19 ; LA64F-LABEL: f32_reciprocal:
20 ; LA64F:       # %bb.0:
21 ; LA64F-NEXT:    frecip.s $fa0, $fa0
22 ; LA64F-NEXT:    ret
24 ; LA64D-LABEL: f32_reciprocal:
25 ; LA64D:       # %bb.0:
26 ; LA64D-NEXT:    frecip.s $fa0, $fa0
27 ; LA64D-NEXT:    ret
28   %1 = fdiv float 1.0, %a
29   ret float %1
32 define double @f64_reciprocal(double %a) nounwind {
33 ; LA32F-LABEL: f64_reciprocal:
34 ; LA32F:       # %bb.0:
35 ; LA32F-NEXT:    addi.w $sp, $sp, -16
36 ; LA32F-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
37 ; LA32F-NEXT:    move $a3, $a1
38 ; LA32F-NEXT:    move $a2, $a0
39 ; LA32F-NEXT:    lu12i.w $a1, 261888
40 ; LA32F-NEXT:    move $a0, $zero
41 ; LA32F-NEXT:    bl %plt(__divdf3)
42 ; LA32F-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
43 ; LA32F-NEXT:    addi.w $sp, $sp, 16
44 ; LA32F-NEXT:    ret
46 ; LA32D-LABEL: f64_reciprocal:
47 ; LA32D:       # %bb.0:
48 ; LA32D-NEXT:    frecip.d $fa0, $fa0
49 ; LA32D-NEXT:    ret
51 ; LA64F-LABEL: f64_reciprocal:
52 ; LA64F:       # %bb.0:
53 ; LA64F-NEXT:    addi.d $sp, $sp, -16
54 ; LA64F-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
55 ; LA64F-NEXT:    move $a1, $a0
56 ; LA64F-NEXT:    lu52i.d $a0, $zero, 1023
57 ; LA64F-NEXT:    bl %plt(__divdf3)
58 ; LA64F-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
59 ; LA64F-NEXT:    addi.d $sp, $sp, 16
60 ; LA64F-NEXT:    ret
62 ; LA64D-LABEL: f64_reciprocal:
63 ; LA64D:       # %bb.0:
64 ; LA64D-NEXT:    frecip.d $fa0, $fa0
65 ; LA64D-NEXT:    ret
66   %1 = fdiv double 1.0, %a
67   ret double %1