1 struct u {
2 unsigned int f:3;
3 };
4
upostinc(struct u * x)5 unsigned int upostinc(struct u *x)
6 {
7 return x->f++;
8 }
9
upreinc(struct u * x)10 unsigned int upreinc(struct u *x)
11 {
12 return ++x->f;
13 }
14
ucpy(struct u * d,const struct u * s)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
spostinc(struct s * x)25 int spostinc(struct s *x)
26 {
27 return x->f++;
28 }
29
spreinc(struct s * x)30 int spreinc(struct s *x)
31 {
32 return ++x->f;
33 }
34
scpy(struct s * d,const struct s * s)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 */
184