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