blob: 90a1f7a7efdf8f6f63a5ef72303e916260c2d765 [file] [log] [blame]
Ulrich Weigand2b3482f2017-07-17 17:41:11 +00001; Test vector negative multiply-and-add on z14.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
4
5declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>)
Ulrich Weigand33435c42017-07-17 17:42:48 +00006declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>)
Ulrich Weigand2b3482f2017-07-17 17:41:11 +00007
8; Test a v2f64 negative multiply-and-add.
9define <2 x double> @f1(<2 x double> %dummy, <2 x double> %val1,
10 <2 x double> %val2, <2 x double> %val3) {
11; CHECK-LABEL: f1:
12; CHECK: vfnmadb %v24, %v26, %v28, %v30
13; CHECK: br %r14
14 %ret = call <2 x double> @llvm.fma.v2f64 (<2 x double> %val1,
15 <2 x double> %val2,
16 <2 x double> %val3)
17 %negret = fsub <2 x double> <double -0.0, double -0.0>, %ret
18 ret <2 x double> %negret
19}
20
21; Test a v2f64 negative multiply-and-subtract.
22define <2 x double> @f2(<2 x double> %dummy, <2 x double> %val1,
23 <2 x double> %val2, <2 x double> %val3) {
24; CHECK-LABEL: f2:
25; CHECK: vfnmsdb %v24, %v26, %v28, %v30
26; CHECK: br %r14
27 %negval3 = fsub <2 x double> <double -0.0, double -0.0>, %val3
28 %ret = call <2 x double> @llvm.fma.v2f64 (<2 x double> %val1,
29 <2 x double> %val2,
30 <2 x double> %negval3)
31 %negret = fsub <2 x double> <double -0.0, double -0.0>, %ret
32 ret <2 x double> %negret
33}
Ulrich Weigand33435c42017-07-17 17:42:48 +000034
35; Test a v4f32 negative multiply-and-add.
36define <4 x float> @f3(<4 x float> %dummy, <4 x float> %val1,
37 <4 x float> %val2, <4 x float> %val3) {
38; CHECK-LABEL: f3:
39; CHECK: vfnmasb %v24, %v26, %v28, %v30
40; CHECK: br %r14
41 %ret = call <4 x float> @llvm.fma.v4f32 (<4 x float> %val1,
42 <4 x float> %val2,
43 <4 x float> %val3)
44 %negret = fsub <4 x float> <float -0.0, float -0.0,
45 float -0.0, float -0.0>, %ret
46 ret <4 x float> %negret
47}
48
49; Test a v4f32 negative multiply-and-subtract.
50define <4 x float> @f4(<4 x float> %dummy, <4 x float> %val1,
51 <4 x float> %val2, <4 x float> %val3) {
52; CHECK-LABEL: f4:
53; CHECK: vfnmssb %v24, %v26, %v28, %v30
54; CHECK: br %r14
55 %negval3 = fsub <4 x float> <float -0.0, float -0.0,
56 float -0.0, float -0.0>, %val3
57 %ret = call <4 x float> @llvm.fma.v4f32 (<4 x float> %val1,
58 <4 x float> %val2,
59 <4 x float> %negval3)
60 %negret = fsub <4 x float> <float -0.0, float -0.0,
61 float -0.0, float -0.0>, %ret
62 ret <4 x float> %negret
63}