| /* { dg-do compile } */ | 
 | /* { dg-options "-O -fdump-tree-ifcombine-details-blocks" } */ | 
 |  | 
 | 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 { scan-tree-dump-not "Invalid sum" "ifcombine" } } */ |