blob: d6926e2571abdf85e4be1f55f0f7f8878e0c78f3 [file] [log] [blame]
Elena Demikhovsky12f24672013-08-27 08:39:25 +00001; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -fp-contract=fast | FileCheck %s
2
3; CHECK-LABEL: test_x86_fmadd_ps_z
4; CHECK: vfmadd213ps %zmm2, %zmm1, %zmm0
5; CHECK: ret
6define <16 x float> @test_x86_fmadd_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {
7 %x = fmul <16 x float> %a0, %a1
8 %res = fadd <16 x float> %x, %a2
9 ret <16 x float> %res
10}
11
12; CHECK-LABEL: test_x86_fmsub_ps_z
13; CHECK: vfmsub213ps %zmm2, %zmm1, %zmm0
14; CHECK: ret
15define <16 x float> @test_x86_fmsub_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {
16 %x = fmul <16 x float> %a0, %a1
17 %res = fsub <16 x float> %x, %a2
18 ret <16 x float> %res
19}
20
21; CHECK-LABEL: test_x86_fnmadd_ps_z
22; CHECK: vfnmadd213ps %zmm2, %zmm1, %zmm0
23; CHECK: ret
24define <16 x float> @test_x86_fnmadd_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {
25 %x = fmul <16 x float> %a0, %a1
26 %res = fsub <16 x float> %a2, %x
27 ret <16 x float> %res
28}
29
30; CHECK-LABEL: test_x86_fnmsub_ps_z
31; CHECK: vfnmsub213ps %zmm2, %zmm1, %zmm0
32; CHECK: ret
33define <16 x float> @test_x86_fnmsub_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {
34 %x = fmul <16 x float> %a0, %a1
35 %y = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00,
36 float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00,
37 float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00,
38 float -0.000000e+00>, %x
39 %res = fsub <16 x float> %y, %a2
40 ret <16 x float> %res
41}
42
43; CHECK-LABEL: test_x86_fmadd_pd_z
44; CHECK: vfmadd213pd %zmm2, %zmm1, %zmm0
45; CHECK: ret
46define <8 x double> @test_x86_fmadd_pd_z(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {
47 %x = fmul <8 x double> %a0, %a1
48 %res = fadd <8 x double> %x, %a2
49 ret <8 x double> %res
50}
51
52; CHECK-LABEL: test_x86_fmsub_pd_z
53; CHECK: vfmsub213pd %zmm2, %zmm1, %zmm0
54; CHECK: ret
55define <8 x double> @test_x86_fmsub_pd_z(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {
56 %x = fmul <8 x double> %a0, %a1
57 %res = fsub <8 x double> %x, %a2
58 ret <8 x double> %res
59}
60
61define double @test_x86_fmsub_sd_z(double %a0, double %a1, double %a2) {
62 %x = fmul double %a0, %a1
63 %res = fsub double %x, %a2
64 ret double %res
65}
66
67;CHECK-LABEL: test132_br
68;CHECK: vfmadd132ps LCP{{.*}}(%rip){1to16}
69;CHECK: ret
70define <16 x float> @test132_br(<16 x float> %a1, <16 x float> %a2) nounwind {
71 %b1 = fmul <16 x float> %a1, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000>
72 %b2 = fadd <16 x float> %b1, %a2
73 ret <16 x float> %b2
74}
75
76;CHECK-LABEL: test213_br
77;CHECK: vfmadd213ps LCP{{.*}}(%rip){1to16}
78;CHECK: ret
79define <16 x float> @test213_br(<16 x float> %a1, <16 x float> %a2) nounwind {
80 %b1 = fmul <16 x float> %a1, %a2
81 %b2 = fadd <16 x float> %b1, <float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000, float 0x3FB99999A0000000>
82 ret <16 x float> %b2
83}