testsuite: Add testcase coverage for already fixed [PR96671]

The fix for this PR didn't come with any test coverage, I've added
tests that make sure we optimize it no matter what order of the x ^ y ^ z
operands is used.

2021-01-15  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/96671
	* gcc.dg/tree-ssa/pr96671-1.c: New test.
	* gcc.dg/tree-ssa/pr96671-2.c: New test.
This commit is contained in:
Jakub Jelinek 2021-01-15 19:26:01 +01:00
parent a3128bf012
commit aaec739250
2 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,51 @@
/* PR tree-optimization/96671 */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
/* { dg-final { scan-tree-dump-times " \\^ " 6 "optimized" } } */
/* { dg-final { scan-tree-dump-times " ~" 6 "optimized" } } */
/* { dg-final { scan-tree-dump-times " & " 6 "optimized" } } */
int
foo (int a, int b, int c)
{
return (a ^ b) & ((b ^ c) ^ a);
}
int
bar (int a, int b, int c)
{
return (a ^ b) & ((b ^ a) ^ c);
}
int
baz (int a, int b, int c)
{
return (a ^ b) & ((a ^ c) ^ b);
}
int
qux (int a, int b, int c)
{
int d = a ^ b;
int e = b ^ c;
int f = e ^ a;
return d & f;
}
int
corge (int a, int b, int c)
{
int d = a ^ b;
int e = b ^ a;
int f = c ^ e;
return d & f;
}
int
garply (int a, int b, int c)
{
int d = a ^ b;
int e = a ^ c;
int f = b ^ e;
return d & f;
}

View File

@ -0,0 +1,51 @@
/* PR tree-optimization/96671 */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
/* { dg-final { scan-tree-dump-times " \\^ " 6 "optimized" } } */
/* { dg-final { scan-tree-dump-not " ~" "optimized" } } */
/* { dg-final { scan-tree-dump-times " \\| " 6 "optimized" } } */
int
foo (int a, int b, int c)
{
return (a ^ b) | ((b ^ c) ^ a);
}
int
bar (int a, int b, int c)
{
return (a ^ b) | ((b ^ a) ^ c);
}
int
baz (int a, int b, int c)
{
return (a ^ b) | ((a ^ c) ^ b);
}
int
qux (int a, int b, int c)
{
int d = a ^ b;
int e = b ^ c;
int f = e ^ a;
return d | f;
}
int
corge (int a, int b, int c)
{
int d = a ^ b;
int e = b ^ a;
int f = c ^ e;
return d | f;
}
int
garply (int a, int b, int c)
{
int d = a ^ b;
int e = a ^ c;
int f = b ^ e;
return d | f;
}