testsuite: XFAIL some Wstringop-overflow tests ...

... for targets that support vectorization of 2-byte char stores
with unaligned address at plain O2.

2021-12-31  Uroš Bizjak  <ubizjak@gmail.com>

gcc/testsuite/ChangeLog:

	* lib/target-supports.exp (check_vect_slp_store_usage):
	Handle TEST_V2QI_2.
	(check_effective_target_vect_slp_v2qi_store_unalign): New procedure.
	* c-c++-common/Wstringop-overflow-2.c: XFAIL specific tests for
	vect_slp_v2qi_store_unalign targets.
	* g++.dg/warn/Wstringop-overflow-3.C: Ditto.
	* gcc.dg/Wstringop-overflow-28.c: Ditto.
	* gcc.dg/Wstringop-overflow-68.c: Ditto.
	* gcc.dg/Wstringop-overflow-75.c: Ditto.
	* gcc.dg/Wstringop-overflow-76.c: Ditto.
This commit is contained in:
Uros Bizjak 2021-12-31 14:06:07 +01:00
parent 84790a9d4b
commit d9da496a82
7 changed files with 96 additions and 80 deletions

View File

@ -19,7 +19,7 @@ struct Ax ax_;
void gax_ (void) void gax_ (void)
{ {
ax_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
ax_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } ax_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
ax_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } ax_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -30,7 +30,7 @@ struct Ax ax0 = { 0 };
void gax0 (void) void gax0 (void)
{ {
ax0.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax0.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
ax0.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } ax0.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
ax0.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } ax0.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -41,7 +41,7 @@ struct Ax ax0_ = { 0, { } };
void gax0_ (void) void gax0_ (void)
{ {
ax0_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax0_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
ax0_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } ax0_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
ax0_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } ax0_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -51,8 +51,8 @@ struct Ax ax1 = { 1, { 0 } };
void gax1 (void) void gax1 (void)
{ {
ax1.a[0] = 0; ax1.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
ax1.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } ax1.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
ax1.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } ax1.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -100,7 +100,7 @@ struct A0 a0_;
void ga0_ (void) void ga0_ (void)
{ {
a0_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a0_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
a0_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a0_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a0_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a0_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -111,7 +111,7 @@ struct A0 a00 = { 0 };
void ga00 (void) void ga00 (void)
{ {
a00.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a00.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
a00.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a00.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a00.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a00.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -122,7 +122,7 @@ struct A0 a00_ = { 0, { } };
void ga00_ (void) void ga00_ (void)
{ {
a00_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a00_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
a00_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a00_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a00_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a00_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -166,13 +166,13 @@ struct A1 a1_;
void ga1_ (void) void ga1_ (void)
{ {
a1_.a[0] = 0; a1_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a1_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a1_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
struct A1 a; struct A1 a;
a.a[0] = 0; a.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
sink (&a); sink (&a);
} }
@ -183,8 +183,8 @@ struct A1 a1__ = { 0 };
void ga1__ (void) void ga1__ (void)
{ {
a1__.a[0] = 0; a1__.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1__.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a1__.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1__.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a1__.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
struct A1 a = { 1 }; struct A1 a = { 1 };
@ -200,8 +200,8 @@ struct A1 a1_0 = { 0, { } };
void ga1_0_ (void) void ga1_0_ (void)
{ {
a1_0.a[0] = 0; a1_0.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1_0.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a1_0.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1_0.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a1_0.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
struct A1 a = { 1, { } }; struct A1 a = { 1, { } };
@ -217,8 +217,8 @@ struct A1 a1_1 = { 0, { 1 } };
void ga1_1 (void) void ga1_1 (void)
{ {
a1_1.a[0] = 0; a1_1.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1_1.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a1_1.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1_1.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a1_1.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
struct A1 a = { 0, { 1 } }; // { dg-warning "\\\[-Wstringop-overflow" "pr102706" { target { vect_slp_v4qi_store_align } } } struct A1 a = { 0, { 1 } }; // { dg-warning "\\\[-Wstringop-overflow" "pr102706" { target { vect_slp_v4qi_store_align } } }
@ -266,12 +266,12 @@ struct A1i a1i_;
void ga1i_ (void) void ga1i_ (void)
{ {
a1i_.a[0] = 0; a1i_.a[0] = 0;
a1i_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a1i_.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1i_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a1i_.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
struct A1i a; struct A1i a;
a.a[0] = 1; a.a[0] = 1;
a.a[1] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a.a[1] = 2; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a.a[2] = 3; // { dg-warning "\\\[-Wstringop-overflow" } a.a[2] = 3; // { dg-warning "\\\[-Wstringop-overflow" }
sink (&a); sink (&a);
} }
@ -283,7 +283,7 @@ struct A1i a1i__ = { 0 };
void ga1i__ (void) void ga1i__ (void)
{ {
a1i__.a[0] = 0; a1i__.a[0] = 0;
a1i__.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a1i__.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1i__.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a1i__.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
struct A1i a = { 0 }; struct A1i a = { 0 };
@ -299,8 +299,8 @@ struct A1 a1i_0 = { 0, { } };
void ga1i_0_ (void) void ga1i_0_ (void)
{ {
a1i_0.a[0] = 0; a1i_0.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1i_0.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a1i_0.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1i_0.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a1i_0.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
struct A1 a = { 0, { } }; struct A1 a = { 0, { } };
@ -316,8 +316,8 @@ struct A1 a1i_1 = { 0, { 1 } };
void ga1i_1 (void) void ga1i_1 (void)
{ {
a1i_1.a[0] = 0; a1i_1.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1i_1.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" } a1i_1.a[1] = 1; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1i_1.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" } a1i_1.a[2] = 2; // { dg-warning "\\\[-Wstringop-overflow" }
struct A1 a = { 0, { 1 } }; // { dg-warning "\\\[-Wstringop-overflow" "pr102462" { target { vect_slp_v4qi_store_align } } } struct A1 a = { 0, { 1 } }; // { dg-warning "\\\[-Wstringop-overflow" "pr102462" { target { vect_slp_v4qi_store_align } } }

View File

@ -21,7 +21,7 @@ Ax ax_;
NOIPA void gax_ () NOIPA void gax_ ()
{ {
ax_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
ax_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
ax_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -32,7 +32,7 @@ Ax ax0 = { 0 };
NOIPA void gax0 () NOIPA void gax0 ()
{ {
ax0.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax0.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
ax0.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax0.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
ax0.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax0.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -43,7 +43,7 @@ Ax ax0_ = { 0, { } };
NOIPA void gax0_ () NOIPA void gax0_ ()
{ {
ax0_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax0_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
ax0_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax0_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
ax0_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax0_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -53,8 +53,8 @@ Ax ax1 = { 1, { 0 } };
NOIPA void gax1 () NOIPA void gax1 ()
{ {
ax1.a[0] = 0; ax1.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
ax1.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax1.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
ax1.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } ax1.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -102,7 +102,7 @@ A0 a0_;
NOIPA void ga0_ () NOIPA void ga0_ ()
{ {
a0_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a0_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
a0_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a0_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a0_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a0_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -113,7 +113,7 @@ A0 a00 = { 0 };
NOIPA void ga00 () NOIPA void ga00 ()
{ {
a00.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a00.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
a00.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a00.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a00.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a00.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -124,7 +124,7 @@ A0 a00_ = { 0, { } };
NOIPA void ga00_ () NOIPA void ga00_ ()
{ {
a00_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a00_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
a00_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a00_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a00_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a00_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -168,8 +168,8 @@ A1 a1_;
NOIPA void ga1_ () NOIPA void ga1_ ()
{ {
a1_.a[0] = 0; a1_.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -179,8 +179,8 @@ A1 a1__ = { 0 };
NOIPA void ga1__ () NOIPA void ga1__ ()
{ {
a1__.a[0] = 0; a1__.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1__.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1__.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1__.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1__.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -190,8 +190,8 @@ A1 a1_0 = { 0, { } };
NOIPA void ga1_0_ () NOIPA void ga1_0_ ()
{ {
a1_0.a[0] = 0; a1_0.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1_0.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1_0.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1_0.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1_0.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -201,8 +201,8 @@ A1 a1_1 = { 0, { 1 } };
NOIPA void ga1_1 () NOIPA void ga1_1 ()
{ {
a1_1.a[0] = 0; a1_1.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1_1.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1_1.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1_1.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1_1.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -244,7 +244,7 @@ A1i a1i_;
NOIPA void ga1i_ () NOIPA void ga1i_ ()
{ {
a1i_.a[0] = 0; a1i_.a[0] = 0;
a1i_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1i_.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1i_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1i_.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -255,7 +255,7 @@ A1i a1i__ = { 0 };
NOIPA void ga1i__ () NOIPA void ga1i__ ()
{ {
a1i__.a[0] = 0; a1i__.a[0] = 0;
a1i__.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1i__.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1i__.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1i__.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -265,8 +265,8 @@ A1 a1i_0 = { 0, { } };
NOIPA void ga1i_0_ () NOIPA void ga1i_0_ ()
{ {
a1i_0.a[0] = 0; a1i_0.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1i_0.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1i_0.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1i_0.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1i_0.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }
@ -276,8 +276,8 @@ A1 a1i_1 = { 0, { 1 } };
NOIPA void ga1i_1 () NOIPA void ga1i_1 ()
{ {
a1i_1.a[0] = 0; a1i_1.a[0] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
a1i_1.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1i_1.a[1] = 0; // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
a1i_1.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" } a1i_1.a[2] = 0; // { dg-warning "\\\[-Wstringop-overflow" }
} }

View File

@ -152,8 +152,8 @@ void ptr_add_2 (int n, int i0, int i1)
q += i0; q += i0;
q[0] = 0; // p[0] q[0] = 0; // p[0]
q += i1; q += i1;
q[0] = 1; // p[1] q[0] = 1; // p[1] // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
q[1] = 2; // p[2] // { dg-warning "\\\[-Wstringop-overflow" } q[1] = 2; // p[2] // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
sink (p, q); sink (p, q);
} }
@ -175,8 +175,8 @@ void ptr_add_3 (int n, int i0, int i1, int i2)
q[0] = 1; // p[1] q[0] = 1; // p[1]
q[1] = 2; // p[2] q[1] = 2; // p[2]
q += i2; q += i2;
q[0] = 3; // p[3] q[0] = 3; // p[3] // { dg-warning "\\\[-Wstringop-overflow" "" { target { vect_slp_v2qi_store_unalign } } }
q[1] = 4; // p[4] // { dg-warning "\\\[-Wstringop-overflow" } q[1] = 4; // p[4] // { dg-warning "\\\[-Wstringop-overflow" "" { xfail { vect_slp_v2qi_store_unalign } } }
sink (p, q); sink (p, q);
} }

View File

@ -57,7 +57,7 @@ void warn_comp_lit_zero (void)
void warn_comp_lit (void) void warn_comp_lit (void)
{ {
*(AC2*)a1 = Ac2; // { dg-warning "writing 2 bytes into a region of size 1" "pr101475" { xfail *-*-* } } *(AC2*)a1 = Ac2; // { dg-warning "writing 2 bytes into a region of size 1" "pr101475" { target { vect_slp_v2qi_store_unalign } } }
// After vectorization, below codes are optimized to // After vectorization, below codes are optimized to
// MEM <vector(4) char> [(char *)&a2] = { 0, 1, 2, 3 }; // MEM <vector(4) char> [(char *)&a2] = { 0, 1, 2, 3 };
// MEM <vector(4) char> [(char *)&a3] = { 0, 1, 2, 3 }; // MEM <vector(4) char> [(char *)&a3] = { 0, 1, 2, 3 };

View File

@ -9,7 +9,7 @@
the offset into it (although the offset might be better included in the offset into it (although the offset might be better included in
the warning). */ the warning). */
extern char a3[3]; extern char a3[3];
extern char a5[5]; // { dg-message "at offset 5 into destination object 'a5' of size 5" "note" } extern char a5[5]; // { dg-message "at offset \[^a-zA-Z\n\r\]*5\[^a-zA-Z0-9\]* into destination object 'a5' of size 5" "note" }
void min_a3_a5 (int i) void min_a3_a5 (int i)
{ {
@ -20,14 +20,14 @@ void min_a3_a5 (int i)
by its own warning independently of -Wstringop-overflow. */ by its own warning independently of -Wstringop-overflow. */
char *d = p < q ? p : q; char *d = p < q ? p : q;
d[4] = 0; d[4] = 0; // { dg-warning "writing 2 bytes into a region of size 1" "" { target { vect_slp_v2qi_store_unalign } } }
d[5] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[5] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }
// Same as above but with the larger array as the first MIN_EXPR operand. // Same as above but with the larger array as the first MIN_EXPR operand.
extern char b4[4]; extern char b4[4];
extern char b6[6]; // { dg-message "at offset 6 into destination object 'b6' of size 6" "note" } extern char b6[6]; // { dg-message "at offset \[^a-zA-Z\n\r\]*6\[^a-zA-Z0-9\]* into destination object 'b6' of size 6" "note" }
void min_b6_b4 (int i) void min_b6_b4 (int i)
{ {
@ -35,36 +35,36 @@ void min_b6_b4 (int i)
char *q = b4 + i; char *q = b4 + i;
char *d = p < q ? p : q; char *d = p < q ? p : q;
d[5] = 0; d[5] = 0; // { dg-warning "writing 2 bytes into a region of size 1" "" { target { vect_slp_v2qi_store_unalign } } }
d[6] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[6] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }
/* Same as above but with the first MIN_EXPR operand pointing to an unknown /* Same as above but with the first MIN_EXPR operand pointing to an unknown
object. */ object. */
extern char c7[7]; // { dg-message "at offset 7 into destination object 'c7' of size 7" "note" } extern char c7[7]; // { dg-message "at offset 7 into destination object 'c7' of size 7" "note" { xfail { vect_slp_v2qi_store_unalign } } }
void min_p_c7 (char *p, int i) void min_p_c7 (char *p, int i)
{ {
char *q = c7 + i; char *q = c7 + i;
char *d = p < q ? p : q; char *d = p < q ? p : q;
d[6] = 0; d[6] = 0; // { dg-warning "writing 2 bytes into a region of size 1" "" { target { vect_slp_v2qi_store_unalign } } }
d[7] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[7] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }
/* Same as above but with the second MIN_EXPR operand pointing to an unknown /* Same as above but with the second MIN_EXPR operand pointing to an unknown
object. */ object. */
extern char d8[8]; // { dg-message "at offset 8 into destination object 'd8' of size 8" "note" } extern char d8[8]; // { dg-message "at offset 8 into destination object 'd8' of size 8" "note" { xfail { vect_slp_v2qi_store_unalign } } }
void min_d8_p (char *q, int i) void min_d8_p (char *q, int i)
{ {
char *p = d8 + i; char *p = d8 + i;
char *d = p < q ? p : q; char *d = p < q ? p : q;
d[7] = 0; d[7] = 0; // { dg-warning "writing 2 bytes into a region of size 1" "" { target { vect_slp_v2qi_store_unalign } } }
d[8] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[8] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }
@ -89,7 +89,7 @@ void min_A3_A5 (int i, struct A3_5 *pa3_5)
struct B4_B6 struct B4_B6
{ {
char b4[4]; char b4[4];
char b6[6]; // { dg-message "at offset 6 into destination object 'b6' of size 6" "note" } char b6[6]; // { dg-message "at offset 6 into destination object 'b6' of size 6" "note" { xfail { vect_slp_v2qi_store_unalign } } }
}; };
void min_B6_B4 (int i, struct B4_B6 *pb4_b6) void min_B6_B4 (int i, struct B4_B6 *pb4_b6)
@ -99,13 +99,13 @@ void min_B6_B4 (int i, struct B4_B6 *pb4_b6)
char *d = p < q ? p : q; char *d = p < q ? p : q;
d[5] = 0; d[5] = 0;
d[6] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[6] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }
struct C7 struct C7
{ {
char c7[7]; // { dg-message "at offset 7 into destination object 'c7' of size 7" "note" } char c7[7]; // { dg-message "at offset 7 into destination object 'c7' of size 7" "note" { xfail { vect_slp_v2qi_store_unalign } } }
}; };
void min_p_C7 (char *p, int i, struct C7 *pc7) void min_p_C7 (char *p, int i, struct C7 *pc7)
@ -114,13 +114,13 @@ void min_p_C7 (char *p, int i, struct C7 *pc7)
char *d = p < q ? p : q; char *d = p < q ? p : q;
d[6] = 0; d[6] = 0;
d[7] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[7] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }
struct D8 struct D8
{ {
char d8[8]; // { dg-message "at offset 8 into destination object 'd8' of size 8" "note" } char d8[8]; // { dg-message "at offset 8 into destination object 'd8' of size 8" "note" { xfail { vect_slp_v2qi_store_unalign } } }
}; };
void min_D8_p (char *q, int i, struct D8 *pd8) void min_D8_p (char *q, int i, struct D8 *pd8)
@ -129,5 +129,5 @@ void min_D8_p (char *q, int i, struct D8 *pd8)
char *d = p < q ? p : q; char *d = p < q ? p : q;
d[7] = 0; d[7] = 0;
d[8] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[8] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }

View File

@ -53,29 +53,29 @@ void max_b6_b4 (int i)
/* Same as above but with the first MAX_EXPR operand pointing to an unknown /* Same as above but with the first MAX_EXPR operand pointing to an unknown
object. */ object. */
extern char c7[7]; // { dg-message "at offset 7 into destination object 'c7' of size 7" "note" } extern char c7[7]; // { dg-message "at offset 7 into destination object 'c7' of size 7" "note" { xfail { vect_slp_v2qi_store_unalign } } }
void max_p_c7 (char *p, int i) void max_p_c7 (char *p, int i)
{ {
char *q = c7 + i; char *q = c7 + i;
char *d = MAX (p, q); char *d = MAX (p, q);
d[6] = 0; d[6] = 0; // { dg-warning "writing 2 bytes into a region of size 1" "" { target { vect_slp_v2qi_store_unalign } } }
d[7] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[7] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }
/* Same as above but with the second MIN_EXPR operand pointing to an unknown /* Same as above but with the second MIN_EXPR operand pointing to an unknown
object. */ object. */
extern char d8[8]; // { dg-message "at offset 8 into destination object 'd8' of size 8" "note" } extern char d8[8]; // { dg-message "at offset 8 into destination object 'd8' of size 8" "note" { xfail { vect_slp_v2qi_store_unalign } } }
void max_d8_p (char *q, int i) void max_d8_p (char *q, int i)
{ {
char *p = d8 + i; char *p = d8 + i;
char *d = MAX (p, q); char *d = MAX (p, q);
d[7] = 0; d[7] = 0; // { dg-warning "writing 2 bytes into a region of size 1" "" { target { vect_slp_v2qi_store_unalign } } }
d[8] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[8] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }
@ -122,7 +122,7 @@ void max_B6_B4 (int i, struct B4_B6 *pb4_b6)
struct C7 struct C7
{ {
char c7[7]; // { dg-message "at offset 7 into destination object 'c7' of size 7" "note" } char c7[7]; // { dg-message "at offset 7 into destination object 'c7' of size 7" "note" { xfail { vect_slp_v2qi_store_unalign } } }
}; };
void max_p_C7 (char *p, int i, struct C7 *pc7) void max_p_C7 (char *p, int i, struct C7 *pc7)
@ -131,13 +131,13 @@ void max_p_C7 (char *p, int i, struct C7 *pc7)
char *d = MAX (p, q); char *d = MAX (p, q);
d[6] = 0; d[6] = 0;
d[7] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[7] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }
struct D8 struct D8
{ {
char d8[8]; // { dg-message "at offset 8 into destination object 'd8' of size 8" "note" } char d8[8]; // { dg-message "at offset 8 into destination object 'd8' of size 8" "note" { xfail { vect_slp_v2qi_store_unalign } } }
}; };
void max_D8_p (char *q, int i, struct D8 *pd8) void max_D8_p (char *q, int i, struct D8 *pd8)
@ -146,5 +146,5 @@ void max_D8_p (char *q, int i, struct D8 *pd8)
char *d = MAX (p, q); char *d = MAX (p, q);
d[7] = 0; d[7] = 0;
d[8] = 0; // { dg-warning "writing 1 byte into a region of size 0" } d[8] = 0; // { dg-warning "writing 1 byte into a region of size 0" "" { xfail { vect_slp_v2qi_store_unalign } } }
} }

View File

@ -7665,6 +7665,14 @@ proc check_vect_slp_store_usage { pattern macro } {
a.a[1] = 4; a.a[1] = 4;
sink (&a); sink (&a);
} }
#elif TEST_V2QI_2
extern char p[2];
void
foo3_2 ()
{
p[0] = 0;
p[1] = 1;
}
#elif TEST_V4HI #elif TEST_V4HI
struct Ax struct Ax
{ {
@ -7763,7 +7771,15 @@ proc check_effective_target_vect_slp_v2qi_store_align { } {
set macro "TEST_V2QI" set macro "TEST_V2QI"
return [check_cached_effective_target vect_slp_v2qi_store_align { return [check_cached_effective_target vect_slp_v2qi_store_align {
expr [check_vect_slp_store_usage $pattern $macro] }] expr [check_vect_slp_store_usage $pattern $macro] }]
}
# Return the true if target support vectorization of 2-byte char stores
# with unaligned address at plain O2.
proc check_effective_target_vect_slp_v2qi_store_unalign { } {
set pattern {add new stmt: MEM <vector\(2\) char>}
set macro "TEST_V2QI_2"
return [check_cached_effective_target vect_slp_v2qi_store_unalign {
expr [check_vect_slp_store_usage $pattern $macro ] }]
} }
# Return the true if target support vectorization of 4-byte char stores # Return the true if target support vectorization of 4-byte char stores