xref: /llvm-project/llvm/test/CodeGen/LoongArch/fabs.ll (revision a9d46d9af36614e320ae24227e9965414f3aa330)
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
6
7declare float @llvm.fabs.f32(float)
8declare double @llvm.fabs.f64(double)
9
10define float @fabs_f32(float %a) nounwind {
11; LA32F-LABEL: fabs_f32:
12; LA32F:       # %bb.0:
13; LA32F-NEXT:    fabs.s $fa0, $fa0
14; LA32F-NEXT:    ret
15;
16; LA32D-LABEL: fabs_f32:
17; LA32D:       # %bb.0:
18; LA32D-NEXT:    fabs.s $fa0, $fa0
19; LA32D-NEXT:    ret
20;
21; LA64F-LABEL: fabs_f32:
22; LA64F:       # %bb.0:
23; LA64F-NEXT:    fabs.s $fa0, $fa0
24; LA64F-NEXT:    ret
25;
26; LA64D-LABEL: fabs_f32:
27; LA64D:       # %bb.0:
28; LA64D-NEXT:    fabs.s $fa0, $fa0
29; LA64D-NEXT:    ret
30  %1 = call float @llvm.fabs.f32(float %a)
31  ret float %1
32}
33
34define double @fabs_f64(double %a) nounwind {
35; LA32F-LABEL: fabs_f64:
36; LA32F:       # %bb.0:
37; LA32F-NEXT:    bstrpick.w $a1, $a1, 30, 0
38; LA32F-NEXT:    ret
39;
40; LA32D-LABEL: fabs_f64:
41; LA32D:       # %bb.0:
42; LA32D-NEXT:    fabs.d $fa0, $fa0
43; LA32D-NEXT:    ret
44;
45; LA64F-LABEL: fabs_f64:
46; LA64F:       # %bb.0:
47; LA64F-NEXT:    bstrpick.d $a0, $a0, 62, 0
48; LA64F-NEXT:    ret
49;
50; LA64D-LABEL: fabs_f64:
51; LA64D:       # %bb.0:
52; LA64D-NEXT:    fabs.d $fa0, $fa0
53; LA64D-NEXT:    ret
54  %1 = call double @llvm.fabs.f64(double %a)
55  ret double %1
56}
57