xref: /llvm-project/llvm/test/CodeGen/LoongArch/lsx/fsqrt.ll (revision 9f70e708a7d3fce97d63b626520351501455fca0)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s
3
4;; fsqrt
5define void @sqrt_v4f32(ptr %res, ptr %a0) nounwind {
6; CHECK-LABEL: sqrt_v4f32:
7; CHECK:       # %bb.0: # %entry
8; CHECK-NEXT:    vld $vr0, $a1, 0
9; CHECK-NEXT:    vfsqrt.s $vr0, $vr0
10; CHECK-NEXT:    vst $vr0, $a0, 0
11; CHECK-NEXT:    ret
12entry:
13  %v0 = load <4 x float>, ptr %a0, align 16
14  %sqrt = call <4 x float> @llvm.sqrt.v4f32 (<4 x float> %v0)
15  store <4 x float> %sqrt, ptr %res, align 16
16  ret void
17}
18
19define void @sqrt_v2f64(ptr %res, ptr %a0) nounwind {
20; CHECK-LABEL: sqrt_v2f64:
21; CHECK:       # %bb.0: # %entry
22; CHECK-NEXT:    vld $vr0, $a1, 0
23; CHECK-NEXT:    vfsqrt.d $vr0, $vr0
24; CHECK-NEXT:    vst $vr0, $a0, 0
25; CHECK-NEXT:    ret
26entry:
27  %v0 = load <2 x double>, ptr %a0, align 16
28  %sqrt = call <2 x double> @llvm.sqrt.v2f64 (<2 x double> %v0)
29  store <2 x double> %sqrt, ptr %res, align 16
30  ret void
31}
32
33;; 1.0 / (fsqrt vec)
34define void @one_div_sqrt_v4f32(ptr %res, ptr %a0) nounwind {
35; CHECK-LABEL: one_div_sqrt_v4f32:
36; CHECK:       # %bb.0: # %entry
37; CHECK-NEXT:    vld $vr0, $a1, 0
38; CHECK-NEXT:    vfrsqrt.s $vr0, $vr0
39; CHECK-NEXT:    vst $vr0, $a0, 0
40; CHECK-NEXT:    ret
41entry:
42  %v0 = load <4 x float>, ptr %a0, align 16
43  %sqrt = call <4 x float> @llvm.sqrt.v4f32 (<4 x float> %v0)
44  %div = fdiv <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %sqrt
45  store <4 x float> %div, ptr %res, align 16
46  ret void
47}
48
49define void @one_div_sqrt_v2f64(ptr %res, ptr %a0) nounwind {
50; CHECK-LABEL: one_div_sqrt_v2f64:
51; CHECK:       # %bb.0: # %entry
52; CHECK-NEXT:    vld $vr0, $a1, 0
53; CHECK-NEXT:    vfrsqrt.d $vr0, $vr0
54; CHECK-NEXT:    vst $vr0, $a0, 0
55; CHECK-NEXT:    ret
56entry:
57  %v0 = load <2 x double>, ptr %a0, align 16
58  %sqrt = call <2 x double> @llvm.sqrt.v2f64 (<2 x double> %v0)
59  %div = fdiv <2 x double> <double 1.0, double 1.0>, %sqrt
60  store <2 x double> %div, ptr %res, align 16
61  ret void
62}
63
64declare <4 x float> @llvm.sqrt.v4f32(<4 x float>)
65declare <2 x double> @llvm.sqrt.v2f64(<2 x double>)
66