1 struct S { 2 int :1; 3 signed int s:2; 4 unsigned int u:3; 5 long l; 6 double d; 7 }; 8 9 int os(int i, struct S *b) { return i || b->s; } 10 int ou(int i, struct S *b) { return i || b->u; } 11 int ol(int i, struct S *b) { return i || b->l; } 12 int od(int i, struct S *b) { return i || b->d; } 13 14 int as(int i, struct S *b) { return i && b->s; } 15 int au(int i, struct S *b) { return i && b->u; } 16 int al(int i, struct S *b) { return i && b->l; } 17 int ad(int i, struct S *b) { return i && b->d; } 18 19 /* 20 * check-name: logical 21 * check-command: test-linearize -m64 -fdump-ir -Wno-decl $file 22 * check-assert: sizeof(void *) == 8 && sizeof(long) == 8 && sizeof(double) == 8 23 * 24 * check-output-start 25 os: 26 .L0: 27 <entry-point> 28 store.32 %arg1 -> 0[i] 29 store.64 %arg2 -> 0[b] 30 load.32 %r2 <- 0[i] 31 setne.1 %r3 <- %r2, $0 32 phisrc.32 %phi1 <- $1 33 cbr %r3, .L3, .L2 34 35 .L2: 36 load.64 %r4 <- 0[b] 37 load.32 %r5 <- 0[%r4] 38 lsr.32 %r6 <- %r5, $1 39 trunc.2 %r7 <- (32) %r6 40 setne.1 %r8 <- %r7, $0 41 zext.32 %r9 <- (1) %r8 42 phisrc.32 %phi2 <- %r9 43 br .L3 44 45 .L3: 46 phi.32 %r1 <- %phi1, %phi2 47 phisrc.32 %phi3(return) <- %r1 48 br .L1 49 50 .L1: 51 phi.32 %r10 <- %phi3(return) 52 ret.32 %r10 53 54 55 ou: 56 .L4: 57 <entry-point> 58 store.32 %arg1 -> 0[i] 59 store.64 %arg2 -> 0[b] 60 load.32 %r12 <- 0[i] 61 setne.1 %r13 <- %r12, $0 62 phisrc.32 %phi4 <- $1 63 cbr %r13, .L7, .L6 64 65 .L6: 66 load.64 %r14 <- 0[b] 67 load.32 %r15 <- 0[%r14] 68 lsr.32 %r16 <- %r15, $3 69 trunc.3 %r17 <- (32) %r16 70 setne.1 %r18 <- %r17, $0 71 zext.32 %r19 <- (1) %r18 72 phisrc.32 %phi5 <- %r19 73 br .L7 74 75 .L7: 76 phi.32 %r11 <- %phi4, %phi5 77 phisrc.32 %phi6(return) <- %r11 78 br .L5 79 80 .L5: 81 phi.32 %r20 <- %phi6(return) 82 ret.32 %r20 83 84 85 ol: 86 .L8: 87 <entry-point> 88 store.32 %arg1 -> 0[i] 89 store.64 %arg2 -> 0[b] 90 load.32 %r22 <- 0[i] 91 setne.1 %r23 <- %r22, $0 92 phisrc.32 %phi7 <- $1 93 cbr %r23, .L11, .L10 94 95 .L10: 96 load.64 %r24 <- 0[b] 97 load.64 %r25 <- 8[%r24] 98 setne.1 %r26 <- %r25, $0 99 zext.32 %r27 <- (1) %r26 100 phisrc.32 %phi8 <- %r27 101 br .L11 102 103 .L11: 104 phi.32 %r21 <- %phi7, %phi8 105 phisrc.32 %phi9(return) <- %r21 106 br .L9 107 108 .L9: 109 phi.32 %r28 <- %phi9(return) 110 ret.32 %r28 111 112 113 od: 114 .L12: 115 <entry-point> 116 store.32 %arg1 -> 0[i] 117 store.64 %arg2 -> 0[b] 118 load.32 %r30 <- 0[i] 119 setne.1 %r31 <- %r30, $0 120 phisrc.32 %phi10 <- $1 121 cbr %r31, .L15, .L14 122 123 .L14: 124 load.64 %r32 <- 0[b] 125 load.64 %r33 <- 16[%r32] 126 setfval.64 %r34 <- 0.000000e+00 127 fcmpune.1 %r35 <- %r33, %r34 128 zext.32 %r36 <- (1) %r35 129 phisrc.32 %phi11 <- %r36 130 br .L15 131 132 .L15: 133 phi.32 %r29 <- %phi10, %phi11 134 phisrc.32 %phi12(return) <- %r29 135 br .L13 136 137 .L13: 138 phi.32 %r37 <- %phi12(return) 139 ret.32 %r37 140 141 142 as: 143 .L16: 144 <entry-point> 145 store.32 %arg1 -> 0[i] 146 store.64 %arg2 -> 0[b] 147 load.32 %r39 <- 0[i] 148 setne.1 %r40 <- %r39, $0 149 phisrc.32 %phi13 <- $0 150 cbr %r40, .L18, .L19 151 152 .L18: 153 load.64 %r41 <- 0[b] 154 load.32 %r42 <- 0[%r41] 155 lsr.32 %r43 <- %r42, $1 156 trunc.2 %r44 <- (32) %r43 157 setne.1 %r45 <- %r44, $0 158 zext.32 %r46 <- (1) %r45 159 phisrc.32 %phi14 <- %r46 160 br .L19 161 162 .L19: 163 phi.32 %r38 <- %phi13, %phi14 164 phisrc.32 %phi15(return) <- %r38 165 br .L17 166 167 .L17: 168 phi.32 %r47 <- %phi15(return) 169 ret.32 %r47 170 171 172 au: 173 .L20: 174 <entry-point> 175 store.32 %arg1 -> 0[i] 176 store.64 %arg2 -> 0[b] 177 load.32 %r49 <- 0[i] 178 setne.1 %r50 <- %r49, $0 179 phisrc.32 %phi16 <- $0 180 cbr %r50, .L22, .L23 181 182 .L22: 183 load.64 %r51 <- 0[b] 184 load.32 %r52 <- 0[%r51] 185 lsr.32 %r53 <- %r52, $3 186 trunc.3 %r54 <- (32) %r53 187 setne.1 %r55 <- %r54, $0 188 zext.32 %r56 <- (1) %r55 189 phisrc.32 %phi17 <- %r56 190 br .L23 191 192 .L23: 193 phi.32 %r48 <- %phi16, %phi17 194 phisrc.32 %phi18(return) <- %r48 195 br .L21 196 197 .L21: 198 phi.32 %r57 <- %phi18(return) 199 ret.32 %r57 200 201 202 al: 203 .L24: 204 <entry-point> 205 store.32 %arg1 -> 0[i] 206 store.64 %arg2 -> 0[b] 207 load.32 %r59 <- 0[i] 208 setne.1 %r60 <- %r59, $0 209 phisrc.32 %phi19 <- $0 210 cbr %r60, .L26, .L27 211 212 .L26: 213 load.64 %r61 <- 0[b] 214 load.64 %r62 <- 8[%r61] 215 setne.1 %r63 <- %r62, $0 216 zext.32 %r64 <- (1) %r63 217 phisrc.32 %phi20 <- %r64 218 br .L27 219 220 .L27: 221 phi.32 %r58 <- %phi19, %phi20 222 phisrc.32 %phi21(return) <- %r58 223 br .L25 224 225 .L25: 226 phi.32 %r65 <- %phi21(return) 227 ret.32 %r65 228 229 230 ad: 231 .L28: 232 <entry-point> 233 store.32 %arg1 -> 0[i] 234 store.64 %arg2 -> 0[b] 235 load.32 %r67 <- 0[i] 236 setne.1 %r68 <- %r67, $0 237 phisrc.32 %phi22 <- $0 238 cbr %r68, .L30, .L31 239 240 .L30: 241 load.64 %r69 <- 0[b] 242 load.64 %r70 <- 16[%r69] 243 setfval.64 %r71 <- 0.000000e+00 244 fcmpune.1 %r72 <- %r70, %r71 245 zext.32 %r73 <- (1) %r72 246 phisrc.32 %phi23 <- %r73 247 br .L31 248 249 .L31: 250 phi.32 %r66 <- %phi22, %phi23 251 phisrc.32 %phi24(return) <- %r66 252 br .L29 253 254 .L29: 255 phi.32 %r74 <- %phi24(return) 256 ret.32 %r74 257 258 259 * check-output-end 260 */