xref: /llvm-project/llvm/test/CodeGen/PowerPC/vec_abs.ll (revision 92a8b81bdf44560e243c85c78e6289e5c7f35762)
1; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu \
2; RUN:          -mattr=+altivec -mattr=+vsx |  FileCheck %s
3; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu \
4; RUN:          -mattr=+altivec -mattr=-vsx |  FileCheck %s \
5; RUN:          -check-prefix=CHECK-NOVSX
6
7define <4 x float> @test_float(<4 x float> %aa) #0 {
8
9; CHECK-LABEL: test_float
10; CHECK-NOVSX-LABEL: test_float
11; CHECK-NOVSX-LABEL: test_float
12
13  entry:
14    %0 = tail call <4 x float> @llvm.fabs.v4f32(<4 x float> %aa) #2
15    ret <4 x float> %0
16}
17; Function Attrs: nounwind readnone
18declare <4 x float> @llvm.fabs.v4f32(<4 x float>) #1
19
20; CHECK: xvabssp
21; CHECK: blr
22; CHECK-NOVSX: vspltisb
23; CHECK-NOVSX: vslw
24; CHECK-NOVSX: vandc
25; CHECK-NOVSX: blr
26
27define <4 x float> @test2_float(<4 x float> %aa) #0 {
28
29; CHECK-LABEL: test2_float
30; CHECK-NOVSX-LABEL: test2_float
31
32  entry:
33    %0 = tail call <4 x float> @llvm.fabs.v4f32(<4 x float> %aa) #2
34    %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00,
35                             float -0.000000e+00, float -0.000000e+00>, %0
36    ret <4 x float> %sub
37}
38
39; CHECK: xvnabssp
40; CHECK: blr
41; CHECK-NOVSX: vspltisb
42; CHECK-NOVSX: vslw
43; CHECK-NOVSX: vor
44; CHECK-NOVSX: blr
45
46define <2 x double> @test_double(<2 x double> %aa) #0 {
47
48; CHECK-LABEL: test_double
49; CHECK-NOVSX-LABEL: test_double
50
51  entry:
52    %0 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %aa) #2
53    ret <2 x double> %0
54}
55
56; Function Attrs: nounwind readnone
57declare <2 x double> @llvm.fabs.v2f64(<2 x double>) #1
58
59; CHECK: xvabsdp
60; CHECK: blr
61; CHECK-NOVSX: fabs
62; CHECK-NOVSX: fabs
63; CHECK-NOVSX: blr
64
65define <2 x double> @foo(<2 x double> %aa) #0 {
66  entry:
67    %0 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %aa) #2
68    %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %0
69    ret <2 x double> %sub
70}
71
72; CHECK: xvnabsdp
73; CHECK: blr
74; CHECK-NOVSX: fnabs
75; CHECK-NOVSX: fnabs
76; CHECK-NOVSX: blr
77