1; Test f32 and v4f32 absolute on z14.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
4
5declare float @llvm.fabs.f32(float)
6declare <4 x float> @llvm.fabs.v4f32(<4 x float>)
7
8; Test a plain absolute.
9define <4 x float> @f1(<4 x float> %val) {
10; CHECK-LABEL: f1:
11; CHECK: vflpsb %v24, %v24
12; CHECK: br %r14
13  %ret = call <4 x float> @llvm.fabs.v4f32(<4 x float> %val)
14  ret <4 x float> %ret
15}
16
17; Test a negative absolute.
18define <4 x float> @f2(<4 x float> %val) {
19; CHECK-LABEL: f2:
20; CHECK: vflnsb %v24, %v24
21; CHECK: br %r14
22  %abs = call <4 x float> @llvm.fabs.v4f32(<4 x float> %val)
23  %ret = fsub <4 x float> <float -0.0, float -0.0,
24                           float -0.0, float -0.0>, %abs
25  ret <4 x float> %ret
26}
27
28; Test an f32 absolute that uses vector registers.
29define float @f3(<4 x float> %val) {
30; CHECK-LABEL: f3:
31; CHECK: wflpsb %f0, %v24
32; CHECK: br %r14
33  %scalar = extractelement <4 x float> %val, i32 0
34  %ret = call float @llvm.fabs.f32(float %scalar)
35  ret float %ret
36}
37
38; Test an f32 negative absolute that uses vector registers.
39define float @f4(<4 x float> %val) {
40; CHECK-LABEL: f4:
41; CHECK: wflnsb %f0, %v24
42; CHECK: br %r14
43  %scalar = extractelement <4 x float> %val, i32 0
44  %abs = call float @llvm.fabs.f32(float %scalar)
45  %ret = fsub float -0.0, %abs
46  ret float %ret
47}
48