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