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