(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr46309-2.c
       1  /* PR tree-optimization/46309 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -fno-ipa-icf -fno-jump-tables -fno-bit-tests -fdump-tree-reassoc-details" } */
       4  
       5  int foo (void);
       6  
       7  void
       8  f1 (int a)
       9  {
      10    _Bool v1 = (a == 3);
      11    _Bool v2 = (a == 1);
      12    _Bool v3 = (a == 4);
      13    _Bool v4 = (a == 2);
      14    if (v1 || v2 || v3 || v4)
      15      foo ();
      16  }
      17  
      18  void
      19  f2 (int a)
      20  {
      21    _Bool v1 = (a == 1);
      22    _Bool v2 = (a == 2);
      23    _Bool v3 = (a == 3);
      24    _Bool v4 = (a == 4);
      25    if (v1 || v2 || v3 || v4)
      26      foo ();
      27  }
      28  
      29  void
      30  f3 (unsigned int a)
      31  {
      32    _Bool v1 = (a <= 31);
      33    _Bool v2 = (a >= 64 && a <= 95);
      34    _Bool v3 = (a >= 128 && a <= 159);
      35    _Bool v4 = (a >= 192 && a <= 223);
      36    if (v1 || v2 || v3 || v4)
      37      foo ();
      38  }
      39  
      40  void
      41  f4 (int a)
      42  {
      43    _Bool v1 = (a == 3);
      44    _Bool v2 = (a == 1);
      45    _Bool v3 = (a == 4);
      46    _Bool v4 = (a == 2);
      47    _Bool v5 = (a == 7);
      48    _Bool v6 = (a == 5);
      49    _Bool v7 = (a == 8);
      50    _Bool v8 = (a == 6);
      51    if (v1 || v2 || v3 || v4 || v5 || v6 || v7 || v8)
      52      foo ();
      53  }
      54  
      55  void
      56  f5 (int a)
      57  {
      58    _Bool v1 = (a != 3);
      59    _Bool v2 = (a != 1);
      60    _Bool v3 = (a != 4);
      61    _Bool v4 = (a != 2);
      62    _Bool v5 = (a != 7);
      63    _Bool v6 = (a != 5);
      64    _Bool v7 = (a != 8);
      65    _Bool v8 = (a != 6);
      66    if (v1 && v2 && v3 && v4 && v5 && v6 && v7 && v8)
      67      foo ();
      68  }
      69  
      70  void
      71  f6 (int a)
      72  {
      73    _Bool v1 = (a != 3);
      74    _Bool v2 = (a != 1);
      75    _Bool v3 = (a != 4);
      76    _Bool v4 = (a != 2);
      77    _Bool v5 = (a != 7);
      78    _Bool v6 = (a != 5);
      79    _Bool v7 = (a != 8);
      80    _Bool v8 = (a != 6);
      81    if ((v1 && v2 && v3 && v4) && (v5 && v6 && v7 && v8))
      82      foo ();
      83  }
      84  
      85  int
      86  f7 (int a)
      87  {
      88    _Bool v1 = (a == 3);
      89    _Bool v2 = (a == 1);
      90    _Bool v3 = (a == 4);
      91    _Bool v4 = (a == 2);
      92    _Bool v5 = (a == 7);
      93    _Bool v6 = (a == 5);
      94    _Bool v7 = (a == 8);
      95    _Bool v8 = (a == 6);
      96    return v1 || v2 || v3 || v4 || v5 || v6 || v7 || v8;
      97  }
      98  
      99  _Bool
     100  f8 (int a)
     101  {
     102    _Bool v1 = (a == 3);
     103    _Bool v2 = (a == 1);
     104    _Bool v3 = (a == 4);
     105    _Bool v4 = (a == 2);
     106    _Bool v5 = (a == 7);
     107    _Bool v6 = (a == 5);
     108    _Bool v7 = (a == 8);
     109    _Bool v8 = (a == 6);
     110    return v1 || v2 || v3 || v4 || v5 || v6 || v7 || v8;
     111  }
     112  
     113  int
     114  f9 (int a)
     115  {
     116    _Bool v1 = (a != 3);
     117    _Bool v2 = (a != 1);
     118    _Bool v3 = (a != 4);
     119    _Bool v4 = (a != 2);
     120    _Bool v5 = (a != 7);
     121    _Bool v6 = (a != 5);
     122    _Bool v7 = (a != 8);
     123    _Bool v8 = (a != 6);
     124    return v1 && v2 && v3 && v4 && v5 && v6 && v7 && v8;
     125  }
     126  
     127  _Bool
     128  f10 (int a)
     129  {
     130    _Bool v1 = (a != 3);
     131    _Bool v2 = (a != 1);
     132    _Bool v3 = (a != 4);
     133    _Bool v4 = (a != 2);
     134    _Bool v5 = (a != 7);
     135    _Bool v6 = (a != 5);
     136    _Bool v7 = (a != 8);
     137    _Bool v8 = (a != 6);
     138    return v1 && v2 && v3 && v4 && v5 && v6 && v7 && v8;
     139  }
     140  
     141  /* { dg-final { scan-tree-dump-times "Optimizing range tests a_\[0-9\]*.D. -.1, 1. and -.2, 2. and -.3, 3. and -.4, 4.\[\n\r\]* into" 2 "reassoc1" } } */
     142  /* { dg-final { scan-tree-dump-times "Optimizing range tests a_\[0-9\]*.D. -.0, 31. and -.64, 95.\[\n\r\]* into" 1 "reassoc1" } } */
     143  /* { dg-final { scan-tree-dump-times "Optimizing range tests a_\[0-9\]*.D. -.128, 159. and -.192, 223.\[\n\r\]* into" 1 "reassoc1" } } */
     144  /* { dg-final { scan-tree-dump-times "Optimizing range tests a_\[0-9\]*.D. -.1, 1. and -.2, 2. and -.3, 3. and -.4, 4. and -.5, 5. and -.6, 6. and -.7, 7. and -.8, 8.\[\n\r\]* into" 7 "reassoc1" } } */
     145  /* { dg-final { scan-tree-dump-times "Optimizing range tests \[^\r\n\]*_\[0-9\]* -.0, 0. and -.128, 128.\[\n\r\]* into" 1 "reassoc2" } } */