/* { dg-do compile } */ /* { dg-options "-O -fdump-tree-ifcombine" } */ void bar (void); void foo1 (unsigned int a) { if (a & 1) goto heaven; if (a & 4) goto heaven; return; heaven: bar (); } void foo2 (unsigned int a) { if (a & 1) if (a & 4) goto heaven; return; heaven: bar (); } /* The special treatment of a & 1 != 0 in fold caused the pattern not to be recognized due to extra conversions inserted. */ /* { dg-final { scan-tree-dump "optimizing bits or bits test" "ifcombine" } } */ /* { dg-final { scan-tree-dump "optimizing double bit test" "ifcombine" } } */ /* { dg-final { cleanup-tree-dump "ifcombine" } } */