|
3 | 3 | ; RUN: llc < %s -mtriple=x86_64-apple-macosx10.10.0 -mattr=+avx512vl,+avx512dq | FileCheck %s --check-prefix=CHECK --check-prefix=AVX512VLDQ
|
4 | 4 |
|
5 | 5 | define <4 x float> @v4f32(<4 x float> %a, <4 x float> %b) nounwind {
|
6 |
| -; AVX512VL-LABEL: v4f32: |
7 |
| -; AVX512VL: ## %bb.0: |
8 |
| -; AVX512VL-NEXT: vpandd {{.*}}(%rip){1to4}, %xmm1, %xmm1 |
9 |
| -; AVX512VL-NEXT: vpandd {{.*}}(%rip){1to4}, %xmm0, %xmm0 |
10 |
| -; AVX512VL-NEXT: vpor %xmm1, %xmm0, %xmm0 |
11 |
| -; AVX512VL-NEXT: retq |
12 |
| -; |
13 |
| -; AVX512VLDQ-LABEL: v4f32: |
14 |
| -; AVX512VLDQ: ## %bb.0: |
15 |
| -; AVX512VLDQ-NEXT: vandps {{.*}}(%rip){1to4}, %xmm1, %xmm1 |
16 |
| -; AVX512VLDQ-NEXT: vandps {{.*}}(%rip){1to4}, %xmm0, %xmm0 |
17 |
| -; AVX512VLDQ-NEXT: vorps %xmm1, %xmm0, %xmm0 |
18 |
| -; AVX512VLDQ-NEXT: retq |
| 6 | +; CHECK-LABEL: v4f32: |
| 7 | +; CHECK: ## %bb.0: |
| 8 | +; CHECK-NEXT: vpbroadcastd {{.*#+}} xmm2 = [NaN,NaN,NaN,NaN] |
| 9 | +; CHECK-NEXT: vpternlogq $226, %xmm1, %xmm2, %xmm0 |
| 10 | +; CHECK-NEXT: retq |
19 | 11 | %tmp = tail call <4 x float> @llvm.copysign.v4f32( <4 x float> %a, <4 x float> %b )
|
20 | 12 | ret <4 x float> %tmp
|
21 | 13 | }
|
22 | 14 |
|
23 | 15 | define <8 x float> @v8f32(<8 x float> %a, <8 x float> %b) nounwind {
|
24 |
| -; AVX512VL-LABEL: v8f32: |
25 |
| -; AVX512VL: ## %bb.0: |
26 |
| -; AVX512VL-NEXT: vpandd {{.*}}(%rip){1to8}, %ymm1, %ymm1 |
27 |
| -; AVX512VL-NEXT: vpandd {{.*}}(%rip){1to8}, %ymm0, %ymm0 |
28 |
| -; AVX512VL-NEXT: vpor %ymm1, %ymm0, %ymm0 |
29 |
| -; AVX512VL-NEXT: retq |
30 |
| -; |
31 |
| -; AVX512VLDQ-LABEL: v8f32: |
32 |
| -; AVX512VLDQ: ## %bb.0: |
33 |
| -; AVX512VLDQ-NEXT: vandps {{.*}}(%rip){1to8}, %ymm1, %ymm1 |
34 |
| -; AVX512VLDQ-NEXT: vandps {{.*}}(%rip){1to8}, %ymm0, %ymm0 |
35 |
| -; AVX512VLDQ-NEXT: vorps %ymm1, %ymm0, %ymm0 |
36 |
| -; AVX512VLDQ-NEXT: retq |
| 16 | +; CHECK-LABEL: v8f32: |
| 17 | +; CHECK: ## %bb.0: |
| 18 | +; CHECK-NEXT: vpbroadcastd {{.*#+}} ymm2 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN] |
| 19 | +; CHECK-NEXT: vpternlogq $226, %ymm1, %ymm2, %ymm0 |
| 20 | +; CHECK-NEXT: retq |
37 | 21 | %tmp = tail call <8 x float> @llvm.copysign.v8f32( <8 x float> %a, <8 x float> %b )
|
38 | 22 | ret <8 x float> %tmp
|
39 | 23 | }
|
40 | 24 |
|
41 | 25 | define <16 x float> @v16f32(<16 x float> %a, <16 x float> %b) nounwind {
|
42 |
| -; AVX512VL-LABEL: v16f32: |
43 |
| -; AVX512VL: ## %bb.0: |
44 |
| -; AVX512VL-NEXT: vpandd {{.*}}(%rip){1to16}, %zmm1, %zmm1 |
45 |
| -; AVX512VL-NEXT: vpandd {{.*}}(%rip){1to16}, %zmm0, %zmm0 |
46 |
| -; AVX512VL-NEXT: vpord %zmm1, %zmm0, %zmm0 |
47 |
| -; AVX512VL-NEXT: retq |
48 |
| -; |
49 |
| -; AVX512VLDQ-LABEL: v16f32: |
50 |
| -; AVX512VLDQ: ## %bb.0: |
51 |
| -; AVX512VLDQ-NEXT: vandps {{.*}}(%rip){1to16}, %zmm1, %zmm1 |
52 |
| -; AVX512VLDQ-NEXT: vandps {{.*}}(%rip){1to16}, %zmm0, %zmm0 |
53 |
| -; AVX512VLDQ-NEXT: vorps %zmm1, %zmm0, %zmm0 |
54 |
| -; AVX512VLDQ-NEXT: retq |
| 26 | +; CHECK-LABEL: v16f32: |
| 27 | +; CHECK: ## %bb.0: |
| 28 | +; CHECK-NEXT: vpbroadcastd {{.*#+}} zmm2 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN] |
| 29 | +; CHECK-NEXT: vpternlogq $226, %zmm1, %zmm2, %zmm0 |
| 30 | +; CHECK-NEXT: retq |
55 | 31 | %tmp = tail call <16 x float> @llvm.copysign.v16f32( <16 x float> %a, <16 x float> %b )
|
56 | 32 | ret <16 x float> %tmp
|
57 | 33 | }
|
58 | 34 |
|
59 | 35 | define <2 x double> @v2f64(<2 x double> %a, <2 x double> %b) nounwind {
|
60 | 36 | ; CHECK-LABEL: v2f64:
|
61 | 37 | ; CHECK: ## %bb.0:
|
62 |
| -; CHECK-NEXT: vandps {{.*}}(%rip), %xmm1, %xmm1 |
63 |
| -; CHECK-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 |
64 |
| -; CHECK-NEXT: vorps %xmm1, %xmm0, %xmm0 |
| 38 | +; CHECK-NEXT: vpternlogq $228, {{.*}}(%rip), %xmm1, %xmm0 |
65 | 39 | ; CHECK-NEXT: retq
|
66 | 40 | %tmp = tail call <2 x double> @llvm.copysign.v2f64( <2 x double> %a, <2 x double> %b )
|
67 | 41 | ret <2 x double> %tmp
|
68 | 42 | }
|
69 | 43 |
|
70 | 44 | define <4 x double> @v4f64(<4 x double> %a, <4 x double> %b) nounwind {
|
71 |
| -; AVX512VL-LABEL: v4f64: |
72 |
| -; AVX512VL: ## %bb.0: |
73 |
| -; AVX512VL-NEXT: vpandq {{.*}}(%rip){1to4}, %ymm1, %ymm1 |
74 |
| -; AVX512VL-NEXT: vpandq {{.*}}(%rip){1to4}, %ymm0, %ymm0 |
75 |
| -; AVX512VL-NEXT: vpor %ymm1, %ymm0, %ymm0 |
76 |
| -; AVX512VL-NEXT: retq |
77 |
| -; |
78 |
| -; AVX512VLDQ-LABEL: v4f64: |
79 |
| -; AVX512VLDQ: ## %bb.0: |
80 |
| -; AVX512VLDQ-NEXT: vandpd {{.*}}(%rip){1to4}, %ymm1, %ymm1 |
81 |
| -; AVX512VLDQ-NEXT: vandpd {{.*}}(%rip){1to4}, %ymm0, %ymm0 |
82 |
| -; AVX512VLDQ-NEXT: vorpd %ymm1, %ymm0, %ymm0 |
83 |
| -; AVX512VLDQ-NEXT: retq |
| 45 | +; CHECK-LABEL: v4f64: |
| 46 | +; CHECK: ## %bb.0: |
| 47 | +; CHECK-NEXT: vpbroadcastq {{.*#+}} ymm2 = [NaN,NaN,NaN,NaN] |
| 48 | +; CHECK-NEXT: vpternlogq $226, %ymm1, %ymm2, %ymm0 |
| 49 | +; CHECK-NEXT: retq |
84 | 50 | %tmp = tail call <4 x double> @llvm.copysign.v4f64( <4 x double> %a, <4 x double> %b )
|
85 | 51 | ret <4 x double> %tmp
|
86 | 52 | }
|
87 | 53 |
|
88 | 54 | define <8 x double> @v8f64(<8 x double> %a, <8 x double> %b) nounwind {
|
89 |
| -; AVX512VL-LABEL: v8f64: |
90 |
| -; AVX512VL: ## %bb.0: |
91 |
| -; AVX512VL-NEXT: vpandq {{.*}}(%rip){1to8}, %zmm1, %zmm1 |
92 |
| -; AVX512VL-NEXT: vpandq {{.*}}(%rip){1to8}, %zmm0, %zmm0 |
93 |
| -; AVX512VL-NEXT: vporq %zmm1, %zmm0, %zmm0 |
94 |
| -; AVX512VL-NEXT: retq |
95 |
| -; |
96 |
| -; AVX512VLDQ-LABEL: v8f64: |
97 |
| -; AVX512VLDQ: ## %bb.0: |
98 |
| -; AVX512VLDQ-NEXT: vandpd {{.*}}(%rip){1to8}, %zmm1, %zmm1 |
99 |
| -; AVX512VLDQ-NEXT: vandpd {{.*}}(%rip){1to8}, %zmm0, %zmm0 |
100 |
| -; AVX512VLDQ-NEXT: vorpd %zmm1, %zmm0, %zmm0 |
101 |
| -; AVX512VLDQ-NEXT: retq |
| 55 | +; CHECK-LABEL: v8f64: |
| 56 | +; CHECK: ## %bb.0: |
| 57 | +; CHECK-NEXT: vpbroadcastq {{.*#+}} zmm2 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN] |
| 58 | +; CHECK-NEXT: vpternlogq $226, %zmm1, %zmm2, %zmm0 |
| 59 | +; CHECK-NEXT: retq |
102 | 60 | %tmp = tail call <8 x double> @llvm.copysign.v8f64( <8 x double> %a, <8 x double> %b )
|
103 | 61 | ret <8 x double> %tmp
|
104 | 62 | }
|
|
0 commit comments