/* { dg-do compile } */
/* { dg-options "-O -fno-rounding-math -fno-signed-zeros -fdump-tree-optimized-raw" } */

double f(double a, double b){
    double c = a - b;
    return -c;
}

int g(unsigned x){
    unsigned y = ~x;
    int z = (int) y;
    return -z;
}

unsigned h(unsigned a, unsigned b, unsigned c){
    unsigned d = b - c;
    unsigned e = a + d;
    return -e;
}

/* { dg-final { scan-tree-dump-not "negate_expr" "optimized"} } */