1 /* PR target/92686 */
2 /* { dg-do compile } */
3 /* { dg-options "-Ofast -mavx512bw -mno-avx512dq -mno-avx512vl -mno-xop -mprefer-vector-width=512" } */
4 /* { dg-final { scan-assembler-times "vpcmp\[bwdq\]\[\t ]" 8 } } */
5 /* { dg-final { scan-assembler-times "vpcmpu\[bwdq\]\[\t ]" 8 } } */
6 /* { dg-final { scan-assembler-times "vmovdq\[au\]8\[^\{\n\]*%zmm0+\[^\n\]*\{%k\[1-7\]\}" 4 } } */
7 /* { dg-final { scan-assembler-times "vmovdq\[au\]16\[^\{\n\]*%zmm0+\[^\n\]*\{%k\[1-7\]\}" 4 } } */
8 /* { dg-final { scan-assembler-times "vmovdq\[au\]32\[^\{\n\]*%zmm0+\[^\n\]*\{%k\[1-7\]\}" 4 } } */
9 /* { dg-final { scan-assembler-times "vmovdq\[au\]64\[^\{\n\]*%zmm0+\[^\n\]*\{%k\[1-7\]\}" 4 } } */
10 
11 __attribute__((noipa)) void
f1(char * __restrict dst,char * __restrict src1,char * __restrict src2)12 f1 (char *__restrict dst, char *__restrict src1, char *__restrict src2)
13 {
14   for (int i = 0; i != 64; i++)
15     dst[i] = src1[i] >= src2[i] ? src1[i] : dst[i];
16 }
17 
18 __attribute__((noipa)) void
f2(unsigned char * __restrict dst,unsigned char * __restrict src1,unsigned char * __restrict src2)19 f2 (unsigned char *__restrict dst, unsigned char *__restrict src1,
20     unsigned char *__restrict src2)
21 {
22   for (int i = 0; i != 64; i++)
23     dst[i] = src1[i] >= src2[i] ? src1[i] : dst[i];
24 }
25 
26 __attribute__((noipa)) void
f3(char * __restrict dst,char * __restrict src1,char * __restrict src2)27 f3 (char *__restrict dst, char *__restrict src1, char *__restrict src2)
28 {
29   for (int i = 0; i != 64; i++)
30     dst[i] = src1[i] <= src2[i] ? src1[i] : dst[i];
31 }
32 
33 __attribute__((noipa)) void
f4(unsigned char * __restrict dst,unsigned char * __restrict src1,unsigned char * __restrict src2)34 f4 (unsigned char *__restrict dst, unsigned char *__restrict src1,
35     unsigned char *__restrict src2)
36 {
37   for (int i = 0; i != 64; i++)
38     dst[i] = src1[i] <= src2[i] ? src1[i] : dst[i];
39 }
40 
41 __attribute__((noipa)) void
f5(short * __restrict dst,short * __restrict src1,short * __restrict src2)42 f5 (short *__restrict dst, short *__restrict src1, short *__restrict src2)
43 {
44   for (int i = 0; i != 32; i++)
45     dst[i] = src1[i] >= src2[i] ? src1[i] : dst[i];
46 }
47 
48 __attribute__((noipa)) void
f6(unsigned short * __restrict dst,unsigned short * __restrict src1,unsigned short * __restrict src2)49 f6 (unsigned short *__restrict dst, unsigned short *__restrict src1,
50     unsigned short *__restrict src2)
51 {
52   for (int i = 0; i != 32; i++)
53     dst[i] = src1[i] >= src2[i] ? src1[i] : dst[i];
54 }
55 
56 __attribute__((noipa)) void
f7(short * __restrict dst,short * __restrict src1,short * __restrict src2)57 f7 (short *__restrict dst, short *__restrict src1, short *__restrict src2)
58 {
59   for (int i = 0; i != 32; i++)
60     dst[i] = src1[i] <= src2[i] ? src1[i] : dst[i];
61 }
62 
63 __attribute__((noipa)) void
f8(unsigned short * __restrict dst,unsigned short * __restrict src1,unsigned short * __restrict src2)64 f8 (unsigned short *__restrict dst, unsigned short *__restrict src1,
65     unsigned short *__restrict src2)
66 {
67   for (int i = 0; i != 32; i++)
68     dst[i] = src1[i] <= src2[i] ? src1[i] : dst[i];
69 }
70 
71 __attribute__((noipa)) void
f9(int * __restrict dst,int * __restrict src1,int * __restrict src2)72 f9 (int *__restrict dst, int *__restrict src1, int *__restrict src2)
73 {
74   for (int i = 0; i != 16; i++)
75     dst[i] = src1[i] >= src2[i] ? src1[i] : dst[i];
76 }
77 
78 __attribute__((noipa)) void
f10(unsigned int * __restrict dst,unsigned int * __restrict src1,unsigned int * __restrict src2)79 f10 (unsigned int *__restrict dst, unsigned int *__restrict src1,
80      unsigned int *__restrict src2)
81 {
82   for (int i = 0; i != 16; i++)
83     dst[i] = src1[i] >= src2[i] ? src1[i] : dst[i];
84 }
85 
86 __attribute__((noipa)) void
f11(int * __restrict dst,int * __restrict src1,int * __restrict src2)87 f11 (int *__restrict dst, int *__restrict src1, int *__restrict src2)
88 {
89   for (int i = 0; i != 16; i++)
90     dst[i] = src1[i] <= src2[i] ? src1[i] : dst[i];
91 }
92 
93 __attribute__((noipa)) void
f12(unsigned int * __restrict dst,unsigned int * __restrict src1,unsigned int * __restrict src2)94 f12 (unsigned int *__restrict dst, unsigned int *__restrict src1,
95      unsigned int *__restrict src2)
96 {
97   for (int i = 0; i != 16; i++)
98     dst[i] = src1[i] <= src2[i] ? src1[i] : dst[i];
99 }
100 
101 __attribute__((noipa)) void
f13(long long int * __restrict dst,long long int * __restrict src1,long long int * __restrict src2)102 f13 (long long int *__restrict dst, long long int *__restrict src1,
103      long long int *__restrict src2)
104 {
105   for (int i = 0; i != 8; i++)
106     dst[i] = src1[i] >= src2[i] ? src1[i] : dst[i];
107 }
108 
109 __attribute__((noipa)) void
f14(unsigned long long int * __restrict dst,unsigned long long int * __restrict src1,unsigned long long int * __restrict src2)110 f14 (unsigned long long int *__restrict dst,
111      unsigned long long int *__restrict src1,
112      unsigned long long int *__restrict src2)
113 {
114   for (int i = 0; i != 8; i++)
115     dst[i] = src1[i] >= src2[i] ? src1[i] : dst[i];
116 }
117 
118 __attribute__((noipa)) void
f15(long long int * __restrict dst,long long int * __restrict src1,long long int * __restrict src2)119 f15 (long long int *__restrict dst, long long int *__restrict src1,
120      long long int *__restrict src2)
121 {
122   for (int i = 0; i != 8; i++)
123     dst[i] = src1[i] <= src2[i] ? src1[i] : dst[i];
124 }
125 
126 __attribute__((noipa)) void
f16(unsigned long long int * __restrict dst,unsigned long long int * __restrict src1,unsigned long long int * __restrict src2)127 f16 (unsigned long long int *__restrict dst,
128      unsigned long long int *__restrict src1,
129      unsigned long long int *__restrict src2)
130 {
131   for (int i = 0; i != 8; i++)
132     dst[i] = src1[i] <= src2[i] ? src1[i] : dst[i];
133 }
134