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 */