/* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-forwprop1" } */ /* PR tree-optimization/106164 */ /* PR tree-optimization/111456 */ _Bool f(int a) { _Bool t = a == 3; unsigned t1 = a; _Bool t2 = t1 >= 3; return t | t2; } /* Should be able to optimize down to just `a > 2` during forwprop1 */ /* { dg-final { scan-tree-dump-not "a_\[0-9\]+.D. == 3" "forwprop1" } } */ _Bool f1(int b) { _Bool t = b == 3; short t1 = b; _Bool t2 = t1 >= 3; return t | t2; } /* Should be able to optimize down to just `a > 2` during forwprop1 as `((short)a) >= 3` is true already when `a == 3`. */ /* { dg-final { scan-tree-dump-not "b_\[0-9\]+.D. == 3" "forwprop1" } } */ /* { dg-final { scan-tree-dump-times "_\[0-9\]+ > 2" 2 "forwprop1" } } */