1 /* Disabling epilogues until we find a better way to deal with scans. */
2 /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
3 /* { dg-require-effective-target vect_int } */
4 /* { dg-additional-options "-fno-ipa-icf" } */
5
6 #include "tree-vect.h"
7
8 #define N 32
9 #define COEF 32470
10
11 unsigned char in[N];
12 int out[N];
13
14 __attribute__ ((noinline)) void
15 foo ()
16 {
17 int i;
18
19 for (i = 0; i < N; i++)
20 out[i] = in[i] * COEF;
21 }
22
23 __attribute__ ((noinline)) void
24 bar ()
25 {
26 int i;
27
28 for (i = 0; i < N; i++)
29 out[i] = COEF * in[i];
30 }
31
32 int main (void)
33 {
34 int i;
35
36 check_vect ();
37
38 for (i = 0; i < N; i++)
39 {
40 in[i] = i;
41 __asm__ volatile ("");
42 }
43
44 foo ();
45
46 for (i = 0; i < N; i++)
47 if (out[i] != in[i] * COEF)
48 abort ();
49
50 bar ();
51
52 for (i = 0; i < N; i++)
53 if (out[i] != in[i] * COEF)
54 abort ();
55
56 return 0;
57 }
58
59 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_widen_mult_hi_to_si } } } */
60 /* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
61 /* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
62