aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/linear/bitfield-size.c
blob: 719b0ab85fcc6cf3220659e35820dc6173317eca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
struct u {
	unsigned int f:3;
};

unsigned int upostinc(struct u *x)
{
	return x->f++;
}

unsigned int upreinc(struct u *x)
{
	return ++x->f;
}

void ucpy(struct u *d, const struct u *s)
{
	d->f = s->f;
}


struct s {
	signed int f:3;
};

int spostinc(struct s *x)
{
	return x->f++;
}

int spreinc(struct s *x)
{
	return ++x->f;
}

void scpy(struct s *d, const struct s *s)
{
	d->f = s->f;
}

/*
 * check-name: bitfield-size
 * check-command: test-linearize -m64 -Wno-decl -fdump-ir  $file
  * check-assert: sizeof(void *) == 8
 *
 * check-output-start
upostinc:
.L0:
	<entry-point>
	store.64    %arg1 -> 0[x]
	load.64     %r1 <- 0[x]
	load.32     %r2 <- 0[%r1]
	trunc.3     %r3 <- (32) %r2
	zext.32     %r4 <- (3) %r3
	add.32      %r5 <- %r4, $1
	trunc.3     %r6 <- (32) %r5
	load.32     %r7 <- 0[%r1]
	zext.32     %r8 <- (3) %r6
	and.32      %r9 <- %r7, $0xfffffff8
	or.32       %r10 <- %r9, %r8
	store.32    %r10 -> 0[%r1]
	zext.32     %r11 <- (3) %r4
	phisrc.32   %phi1(return) <- %r11
	br          .L1

.L1:
	phi.32      %r12 <- %phi1(return)
	ret.32      %r12


upreinc:
.L2:
	<entry-point>
	store.64    %arg1 -> 0[x]
	load.64     %r13 <- 0[x]
	load.32     %r14 <- 0[%r13]
	trunc.3     %r15 <- (32) %r14
	zext.32     %r16 <- (3) %r15
	add.32      %r17 <- %r16, $1
	trunc.3     %r18 <- (32) %r17
	load.32     %r19 <- 0[%r13]
	zext.32     %r20 <- (3) %r18
	and.32      %r21 <- %r19, $0xfffffff8
	or.32       %r22 <- %r21, %r20
	store.32    %r22 -> 0[%r13]
	zext.32     %r23 <- (3) %r18
	phisrc.32   %phi2(return) <- %r23
	br          .L3

.L3:
	phi.32      %r24 <- %phi2(return)
	ret.32      %r24


ucpy:
.L4:
	<entry-point>
	store.64    %arg1 -> 0[d]
	store.64    %arg2 -> 0[s]
	load.64     %r25 <- 0[s]
	load.32     %r26 <- 0[%r25]
	trunc.3     %r27 <- (32) %r26
	load.64     %r28 <- 0[d]
	load.32     %r29 <- 0[%r28]
	zext.32     %r30 <- (3) %r27
	and.32      %r31 <- %r29, $0xfffffff8
	or.32       %r32 <- %r31, %r30
	store.32    %r32 -> 0[%r28]
	br          .L5

.L5:
	ret


spostinc:
.L6:
	<entry-point>
	store.64    %arg1 -> 0[x]
	load.64     %r33 <- 0[x]
	load.32     %r34 <- 0[%r33]
	trunc.3     %r35 <- (32) %r34
	sext.32     %r36 <- (3) %r35
	add.32      %r37 <- %r36, $1
	trunc.3     %r38 <- (32) %r37
	load.32     %r39 <- 0[%r33]
	zext.32     %r40 <- (3) %r38
	and.32      %r41 <- %r39, $0xfffffff8
	or.32       %r42 <- %r41, %r40
	store.32    %r42 -> 0[%r33]
	sext.32     %r43 <- (3) %r36
	phisrc.32   %phi3(return) <- %r43
	br          .L7

.L7:
	phi.32      %r44 <- %phi3(return)
	ret.32      %r44


spreinc:
.L8:
	<entry-point>
	store.64    %arg1 -> 0[x]
	load.64     %r45 <- 0[x]
	load.32     %r46 <- 0[%r45]
	trunc.3     %r47 <- (32) %r46
	sext.32     %r48 <- (3) %r47
	add.32      %r49 <- %r48, $1
	trunc.3     %r50 <- (32) %r49
	load.32     %r51 <- 0[%r45]
	zext.32     %r52 <- (3) %r50
	and.32      %r53 <- %r51, $0xfffffff8
	or.32       %r54 <- %r53, %r52
	store.32    %r54 -> 0[%r45]
	sext.32     %r55 <- (3) %r50
	phisrc.32   %phi4(return) <- %r55
	br          .L9

.L9:
	phi.32      %r56 <- %phi4(return)
	ret.32      %r56


scpy:
.L10:
	<entry-point>
	store.64    %arg1 -> 0[d]
	store.64    %arg2 -> 0[s]
	load.64     %r57 <- 0[s]
	load.32     %r58 <- 0[%r57]
	trunc.3     %r59 <- (32) %r58
	load.64     %r60 <- 0[d]
	load.32     %r61 <- 0[%r60]
	zext.32     %r62 <- (3) %r59
	and.32      %r63 <- %r61, $0xfffffff8
	or.32       %r64 <- %r63, %r62
	store.32    %r64 -> 0[%r60]
	br          .L11

.L11:
	ret


 * check-output-end
 */