blob: 126b00478d256dbef26f8e9bd105de277d87c2ec [file] [log] [blame]
/* PR tree-optimization/94920 */
/* { dg-do compile } */
/* { dg-options "-O2 -Wno-psabi -fdump-tree-optimized" } */
typedef int __attribute__((vector_size(4*sizeof(int)))) vint;
/* Same form as PR. */
__attribute__((noipa)) unsigned int foo(int x) {
return (x >= 0 ? x : 0) + (x <= 0 ? -x : 0);
}
/* Test for forward propogation. */
__attribute__((noipa)) unsigned int corge(int x) {
int w = (x >= 0 ? x : 0);
int y = -x;
int z = (y >= 0 ? y : 0);
return w + z;
}
/* Vector case. */
__attribute__((noipa)) vint thud(vint x) {
vint t = (x >= 0 ? x : 0) ;
vint xx = -x;
vint t1 = (xx >= 0 ? xx : 0);
return t + t1;
}
/* Signed function. */
__attribute__((noipa)) int bar(int x) {
return (x >= 0 ? x : 0) + (x <= 0 ? -x : 0);
}
/* Commutative property. */
__attribute__((noipa)) unsigned int baz(int x) {
return (x <= 0 ? -x : 0) + (x >= 0 ? x : 0);
}
/* Flipped order for max expressions. */
__attribute__((noipa)) unsigned int quux(int x) {
return (0 <= x ? x : 0) + (0 >= x ? -x : 0);
}
/* Not zero so should not optimize. */
__attribute__((noipa)) unsigned int waldo(int x) {
return (x >= 4 ? x : 4) + (x <= 4 ? -x : 4);
}
/* Not zero so should not optimize. */
__attribute__((noipa)) unsigned int fred(int x) {
return (x >= -4 ? x : -4) + (x <= -4 ? -x : -4);
}
/* Incorrect pattern. */
__attribute__((noipa)) unsigned int goo(int x) {
return (x <= 0 ? x : 0) + (x >= 0 ? -x : 0);
}
/* Incorrect pattern. */
__attribute__((noipa)) int qux(int x) {
return (x >= 0 ? x : 0) + (x >= 0 ? x : 0);
}
/* { dg-final {scan-tree-dump-times " ABS_EXPR " 6 "optimized" } } */