1 struct u {
   2         unsigned int f:3;
   3 };
   4 
   5 unsigned int upostinc(struct u *x)
   6 {
   7         return x->f++;
   8 }
   9 
  10 unsigned int upreinc(struct u *x)
  11 {
  12         return ++x->f;
  13 }
  14 
  15 void ucpy(struct u *d, const struct u *s)
  16 {
  17         d->f = s->f;
  18 }
  19 
  20 
  21 struct s {
  22         int f:3;
  23 };
  24 
  25 int spostinc(struct s *x)
  26 {
  27         return x->f++;
  28 }
  29 
  30 int spreinc(struct s *x)
  31 {
  32         return ++x->f;
  33 }
  34 
  35 void scpy(struct s *d, const struct s *s)
  36 {
  37         d->f = s->f;
  38 }
  39 
  40 /*
  41  * check-name: bitfield-size
  42  * check-command: test-linearize -m64 -Wno-decl -fdump-ir  $file
  43   * check-assert: sizeof(void *) == 8
  44  *
  45  * check-output-start
  46 upostinc:
  47 .L0:
  48         <entry-point>
  49         store.64    %arg1 -> 0[x]
  50         load.64     %r1 <- 0[x]
  51         load.32     %r2 <- 0[%r1]
  52         trunc.3     %r3 <- (32) %r2
  53         zext.32     %r4 <- (3) %r3
  54         add.32      %r5 <- %r4, $1
  55         trunc.3     %r6 <- (32) %r5
  56         load.32     %r7 <- 0[%r1]
  57         zext.32     %r8 <- (3) %r6
  58         and.32      %r9 <- %r7, $0xfffffff8
  59         or.32       %r10 <- %r9, %r8
  60         store.32    %r10 -> 0[%r1]
  61         zext.32     %r11 <- (3) %r4
  62         phisrc.32   %phi1(return) <- %r11
  63         br          .L1
  64 
  65 .L1:
  66         phi.32      %r12 <- %phi1(return)
  67         ret.32      %r12
  68 
  69 
  70 upreinc:
  71 .L2:
  72         <entry-point>
  73         store.64    %arg1 -> 0[x]
  74         load.64     %r13 <- 0[x]
  75         load.32     %r14 <- 0[%r13]
  76         trunc.3     %r15 <- (32) %r14
  77         zext.32     %r16 <- (3) %r15
  78         add.32      %r17 <- %r16, $1
  79         trunc.3     %r18 <- (32) %r17
  80         load.32     %r19 <- 0[%r13]
  81         zext.32     %r20 <- (3) %r18
  82         and.32      %r21 <- %r19, $0xfffffff8
  83         or.32       %r22 <- %r21, %r20
  84         store.32    %r22 -> 0[%r13]
  85         zext.32     %r23 <- (3) %r18
  86         phisrc.32   %phi2(return) <- %r23
  87         br          .L3
  88 
  89 .L3:
  90         phi.32      %r24 <- %phi2(return)
  91         ret.32      %r24
  92 
  93 
  94 ucpy:
  95 .L4:
  96         <entry-point>
  97         store.64    %arg1 -> 0[d]
  98         store.64    %arg2 -> 0[s]
  99         load.64     %r25 <- 0[s]
 100         load.32     %r26 <- 0[%r25]
 101         trunc.3     %r27 <- (32) %r26
 102         load.64     %r28 <- 0[d]
 103         load.32     %r29 <- 0[%r28]
 104         zext.32     %r30 <- (3) %r27
 105         and.32      %r31 <- %r29, $0xfffffff8
 106         or.32       %r32 <- %r31, %r30
 107         store.32    %r32 -> 0[%r28]
 108         br          .L5
 109 
 110 .L5:
 111         ret
 112 
 113 
 114 spostinc:
 115 .L6:
 116         <entry-point>
 117         store.64    %arg1 -> 0[x]
 118         load.64     %r33 <- 0[x]
 119         load.32     %r34 <- 0[%r33]
 120         trunc.3     %r35 <- (32) %r34
 121         zext.32     %r36 <- (3) %r35
 122         add.32      %r37 <- %r36, $1
 123         trunc.3     %r38 <- (32) %r37
 124         load.32     %r39 <- 0[%r33]
 125         zext.32     %r40 <- (3) %r38
 126         and.32      %r41 <- %r39, $0xfffffff8
 127         or.32       %r42 <- %r41, %r40
 128         store.32    %r42 -> 0[%r33]
 129         zext.32     %r43 <- (3) %r36
 130         phisrc.32   %phi3(return) <- %r43
 131         br          .L7
 132 
 133 .L7:
 134         phi.32      %r44 <- %phi3(return)
 135         ret.32      %r44
 136 
 137 
 138 spreinc:
 139 .L8:
 140         <entry-point>
 141         store.64    %arg1 -> 0[x]
 142         load.64     %r45 <- 0[x]
 143         load.32     %r46 <- 0[%r45]
 144         trunc.3     %r47 <- (32) %r46
 145         zext.32     %r48 <- (3) %r47
 146         add.32      %r49 <- %r48, $1
 147         trunc.3     %r50 <- (32) %r49
 148         load.32     %r51 <- 0[%r45]
 149         zext.32     %r52 <- (3) %r50
 150         and.32      %r53 <- %r51, $0xfffffff8
 151         or.32       %r54 <- %r53, %r52
 152         store.32    %r54 -> 0[%r45]
 153         zext.32     %r55 <- (3) %r50
 154         phisrc.32   %phi4(return) <- %r55
 155         br          .L9
 156 
 157 .L9:
 158         phi.32      %r56 <- %phi4(return)
 159         ret.32      %r56
 160 
 161 
 162 scpy:
 163 .L10:
 164         <entry-point>
 165         store.64    %arg1 -> 0[d]
 166         store.64    %arg2 -> 0[s]
 167         load.64     %r57 <- 0[s]
 168         load.32     %r58 <- 0[%r57]
 169         trunc.3     %r59 <- (32) %r58
 170         load.64     %r60 <- 0[d]
 171         load.32     %r61 <- 0[%r60]
 172         zext.32     %r62 <- (3) %r59
 173         and.32      %r63 <- %r61, $0xfffffff8
 174         or.32       %r64 <- %r63, %r62
 175         store.32    %r64 -> 0[%r60]
 176         br          .L11
 177 
 178 .L11:
 179         ret
 180 
 181 
 182  * check-output-end
 183  */