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-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
5 /* { dg-add-options arm_v8_2a_dotprod_neon } */
10 #define SIGNEDNESS_1 signed
11 #define SIGNEDNESS_2 signed
14 SIGNEDNESS_1
int __attribute__ ((noipa
))
15 f (SIGNEDNESS_1
int res
,
20 for (int i
= 0; i
< n
; i
++)
46 #define BASE ((SIGNEDNESS_2 int) -1 < 0 ? -126 : 4)
54 SIGNEDNESS_2
char a
[100], b
[100];
55 int expected
= 0x12345;
61 for (int i
= 0; i
< sizeof (a
) / sizeof (a
[0]); ++i
)
64 b
[i
] = BASE
+ OFFSET
+ i
* 4;
68 for (int i
= 0; i
< n
; i
++)
70 expected
+= a
[t
+ 0] * b
[t
+ 0];
71 expected
+= a
[t
+ 1] * b
[t
+ 1];
72 expected
+= a
[t
+ 2] * b
[t
+ 2];
73 expected
+= a
[t
+ 3] * b
[t
+ 3];
74 expected
+= a
[t
+ 4] * b
[t
+ 4];
75 expected
+= a
[t
+ 5] * b
[t
+ 5];
76 expected
+= a
[t
+ 6] * b
[t
+ 6];
77 expected
+= a
[t
+ 7] * b
[t
+ 7];
78 expected
+= a
[t
+ 8] * b
[t
+ 8];
79 expected
+= a
[t
+ 9] * b
[t
+ 9];
80 expected
+= a
[t
+ 10] * b
[t
+ 10];
81 expected
+= a
[t
+ 11] * b
[t
+ 11];
82 expected
+= a
[t
+ 12] * b
[t
+ 12];
83 expected
+= a
[t
+ 13] * b
[t
+ 13];
84 expected
+= a
[t
+ 14] * b
[t
+ 14];
85 expected
+= a
[t
+ 15] * b
[t
+ 15];
89 if (f (0x12345, a
, b
, step
, n
) != expected
)
93 /* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */
94 /* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_qi } } } */