Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / LoongArch / fsqrt.ll
blob776de7f729ec4302575ecdb663570c5559d5995f
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
7 declare float @llvm.sqrt.f32(float)
8 declare double @llvm.sqrt.f64(double)
10 define float @fsqrt_f32(float %a) nounwind {
11 ; LA32F-LABEL: fsqrt_f32:
12 ; LA32F:       # %bb.0:
13 ; LA32F-NEXT:    fsqrt.s $fa0, $fa0
14 ; LA32F-NEXT:    ret
16 ; LA32D-LABEL: fsqrt_f32:
17 ; LA32D:       # %bb.0:
18 ; LA32D-NEXT:    fsqrt.s $fa0, $fa0
19 ; LA32D-NEXT:    ret
21 ; LA64F-LABEL: fsqrt_f32:
22 ; LA64F:       # %bb.0:
23 ; LA64F-NEXT:    fsqrt.s $fa0, $fa0
24 ; LA64F-NEXT:    ret
26 ; LA64D-LABEL: fsqrt_f32:
27 ; LA64D:       # %bb.0:
28 ; LA64D-NEXT:    fsqrt.s $fa0, $fa0
29 ; LA64D-NEXT:    ret
30   %1 = call float @llvm.sqrt.f32(float %a)
31   ret float %1
34 define double @fsqrt_f64(double %a) nounwind {
35 ; LA32F-LABEL: fsqrt_f64:
36 ; LA32F:       # %bb.0:
37 ; LA32F-NEXT:    addi.w $sp, $sp, -16
38 ; LA32F-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
39 ; LA32F-NEXT:    bl %plt(sqrt)
40 ; LA32F-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
41 ; LA32F-NEXT:    addi.w $sp, $sp, 16
42 ; LA32F-NEXT:    ret
44 ; LA32D-LABEL: fsqrt_f64:
45 ; LA32D:       # %bb.0:
46 ; LA32D-NEXT:    fsqrt.d $fa0, $fa0
47 ; LA32D-NEXT:    ret
49 ; LA64F-LABEL: fsqrt_f64:
50 ; LA64F:       # %bb.0:
51 ; LA64F-NEXT:    addi.d $sp, $sp, -16
52 ; LA64F-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
53 ; LA64F-NEXT:    bl %plt(sqrt)
54 ; LA64F-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
55 ; LA64F-NEXT:    addi.d $sp, $sp, 16
56 ; LA64F-NEXT:    ret
58 ; LA64D-LABEL: fsqrt_f64:
59 ; LA64D:       # %bb.0:
60 ; LA64D-NEXT:    fsqrt.d $fa0, $fa0
61 ; LA64D-NEXT:    ret
62   %1 = call double @llvm.sqrt.f64(double %a)
63   ret double %1
66 define float @frsqrt_f32(float %a) nounwind {
67 ; LA32F-LABEL: frsqrt_f32:
68 ; LA32F:       # %bb.0:
69 ; LA32F-NEXT:    frsqrt.s $fa0, $fa0
70 ; LA32F-NEXT:    ret
72 ; LA32D-LABEL: frsqrt_f32:
73 ; LA32D:       # %bb.0:
74 ; LA32D-NEXT:    frsqrt.s $fa0, $fa0
75 ; LA32D-NEXT:    ret
77 ; LA64F-LABEL: frsqrt_f32:
78 ; LA64F:       # %bb.0:
79 ; LA64F-NEXT:    frsqrt.s $fa0, $fa0
80 ; LA64F-NEXT:    ret
82 ; LA64D-LABEL: frsqrt_f32:
83 ; LA64D:       # %bb.0:
84 ; LA64D-NEXT:    frsqrt.s $fa0, $fa0
85 ; LA64D-NEXT:    ret
86   %1 = call float @llvm.sqrt.f32(float %a)
87   %2 = fdiv float 1.0, %1
88   ret float %2
91 define double @frsqrt_f64(double %a) nounwind {
92 ; LA32F-LABEL: frsqrt_f64:
93 ; LA32F:       # %bb.0:
94 ; LA32F-NEXT:    addi.w $sp, $sp, -16
95 ; LA32F-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
96 ; LA32F-NEXT:    bl %plt(sqrt)
97 ; LA32F-NEXT:    move $a2, $a0
98 ; LA32F-NEXT:    move $a3, $a1
99 ; LA32F-NEXT:    lu12i.w $a1, 261888
100 ; LA32F-NEXT:    move $a0, $zero
101 ; LA32F-NEXT:    bl %plt(__divdf3)
102 ; LA32F-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
103 ; LA32F-NEXT:    addi.w $sp, $sp, 16
104 ; LA32F-NEXT:    ret
106 ; LA32D-LABEL: frsqrt_f64:
107 ; LA32D:       # %bb.0:
108 ; LA32D-NEXT:    frsqrt.d $fa0, $fa0
109 ; LA32D-NEXT:    ret
111 ; LA64F-LABEL: frsqrt_f64:
112 ; LA64F:       # %bb.0:
113 ; LA64F-NEXT:    addi.d $sp, $sp, -16
114 ; LA64F-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
115 ; LA64F-NEXT:    bl %plt(sqrt)
116 ; LA64F-NEXT:    move $a1, $a0
117 ; LA64F-NEXT:    lu52i.d $a0, $zero, 1023
118 ; LA64F-NEXT:    bl %plt(__divdf3)
119 ; LA64F-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
120 ; LA64F-NEXT:    addi.d $sp, $sp, 16
121 ; LA64F-NEXT:    ret
123 ; LA64D-LABEL: frsqrt_f64:
124 ; LA64D:       # %bb.0:
125 ; LA64D-NEXT:    frsqrt.d $fa0, $fa0
126 ; LA64D-NEXT:    ret
127   %1 = call double @llvm.sqrt.f64(double %a)
128   %2 = fdiv double 1.0, %1
129   ret double %2