(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
bpf/
core-builtin-fieldinfo-offset-1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O0 -dA -gbtf -mco-re" } */
       3  
       4  struct S {
       5    unsigned int a1: 7;
       6    unsigned int a2: 4;
       7    unsigned int a3: 13;
       8    unsigned int a4: 5;
       9    int x;
      10  };
      11  
      12  struct T {
      13    unsigned int y;
      14    struct S s[2];
      15    char c;
      16    char d;
      17  };
      18  
      19  enum {
      20    FIELD_BYTE_OFFSET = 0,
      21  };
      22  
      23  
      24  unsigned int foo (struct T *t)
      25  {
      26    unsigned s0a1 = __builtin_preserve_field_info (t->s[0].a1, FIELD_BYTE_OFFSET);
      27    unsigned s0a4 = __builtin_preserve_field_info (t->s[0].a4, FIELD_BYTE_OFFSET);
      28    unsigned s0x  = __builtin_preserve_field_info (t->s[0].x, FIELD_BYTE_OFFSET);
      29  
      30    unsigned s1a1 = __builtin_preserve_field_info (t->s[1].a1, FIELD_BYTE_OFFSET);
      31    unsigned s1a4 = __builtin_preserve_field_info (t->s[1].a4, FIELD_BYTE_OFFSET);
      32    unsigned s1x  = __builtin_preserve_field_info (t->s[1].x, FIELD_BYTE_OFFSET);
      33  
      34    unsigned c = __builtin_preserve_field_info (t->c, FIELD_BYTE_OFFSET);
      35    unsigned d = __builtin_preserve_field_info (t->d, FIELD_BYTE_OFFSET);
      36  
      37    return s0a1 + s0a4 + s0x + s1a1 + s1a4 + s1x + c + d;
      38  }
      39  
      40  /* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],4" 2 } } */
      41  /* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],8" 1 } } */
      42  /* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],12" 2 } } */
      43  /* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],16" 1 } } */
      44  /* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],20" 1 } } */
      45  /* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],21" 1 } } */
      46  
      47  /* { dg-final { scan-assembler-times "ascii \"0:1:0:0.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      48  /* { dg-final { scan-assembler-times "ascii \"0:1:0:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      49  /* { dg-final { scan-assembler-times "ascii \"0:1:0:4.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      50  /* { dg-final { scan-assembler-times "ascii \"0:1:1:0.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      51  /* { dg-final { scan-assembler-times "ascii \"0:1:1:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      52  /* { dg-final { scan-assembler-times "ascii \"0:1:1:4.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      53  /* { dg-final { scan-assembler-times "ascii \"0:2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      54  /* { dg-final { scan-assembler-times "ascii \"0:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
      55  
      56  /* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bpfcr_kind" 8 } } */