(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr78057.c
       1  /* PR target/78057 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -mbmi -mlzcnt -fdump-tree-optimized" } */
       4  
       5  extern void link_error (void);
       6  
       7  int
       8  foo (int x)
       9  {
      10    if (__builtin_ia32_tzcnt_u16 (16) != 4
      11        || __builtin_ia32_tzcnt_u16 (0) != 16
      12        || __builtin_ia32_lzcnt_u16 (0x1ff) != 7
      13        || __builtin_ia32_lzcnt_u16 (0) != 16
      14        || __builtin_ia32_tzcnt_u32 (8) != 3
      15        || __builtin_ia32_tzcnt_u32 (0) != 32
      16        || __builtin_ia32_lzcnt_u32 (0x3fffffff) != 2
      17        || __builtin_ia32_lzcnt_u32 (0) != 32
      18  #ifdef __x86_64__
      19        || __builtin_ia32_tzcnt_u64 (4) != 2
      20        || __builtin_ia32_tzcnt_u64 (0) != 64
      21        || __builtin_ia32_lzcnt_u64 (0x1fffffff) != 35
      22        || __builtin_ia32_lzcnt_u64 (0) != 64
      23  #endif
      24       )
      25      link_error ();
      26    x += 2;
      27    if (x == 0)
      28      return 5;
      29    return __builtin_ia32_tzcnt_u32 (x)
      30           + __builtin_ia32_lzcnt_u32 (x)
      31  #ifdef __x86_64__
      32  	 + __builtin_ia32_tzcnt_u64 (x)
      33  	 + __builtin_ia32_lzcnt_u64 (x)
      34  #endif
      35  	 ;
      36  }
      37  
      38  /* { dg-final { scan-tree-dump-not "link_error" "optimized" } } */
      39  /* { dg-final { scan-tree-dump-not "__builtin_ia32_\[lt]zcnt" "optimized" } } */
      40  /* { dg-final { scan-tree-dump-times "__builtin_ctz " 1 "optimized" } } */
      41  /* { dg-final { scan-tree-dump-times "__builtin_clz " 1 "optimized" } } */
      42  /* { dg-final { scan-tree-dump-times "__builtin_ctzll " 1 "optimized" { target lp64 } } } */