1 ; RUN: llc -march=hexagon -mcpu=hexagonv5 < %s | FileCheck %s 2 ; Generate MemOps for V4 and above. 3 4 define void @memop_unsigned_char_add5(i8* nocapture %p) nounwind { 5 entry: 6 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 7 %0 = load i8* %p, align 1, !tbaa !0 8 %conv = zext i8 %0 to i32 9 %add = add nsw i32 %conv, 5 10 %conv1 = trunc i32 %add to i8 11 store i8 %conv1, i8* %p, align 1, !tbaa !0 12 ret void 13 } 14 15 define void @memop_unsigned_char_add(i8* nocapture %p, i8 zeroext %x) nounwind { 16 entry: 17 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 18 %conv = zext i8 %x to i32 19 %0 = load i8* %p, align 1, !tbaa !0 20 %conv1 = zext i8 %0 to i32 21 %add = add nsw i32 %conv1, %conv 22 %conv2 = trunc i32 %add to i8 23 store i8 %conv2, i8* %p, align 1, !tbaa !0 24 ret void 25 } 26 27 define void @memop_unsigned_char_sub(i8* nocapture %p, i8 zeroext %x) nounwind { 28 entry: 29 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 30 %conv = zext i8 %x to i32 31 %0 = load i8* %p, align 1, !tbaa !0 32 %conv1 = zext i8 %0 to i32 33 %sub = sub nsw i32 %conv1, %conv 34 %conv2 = trunc i32 %sub to i8 35 store i8 %conv2, i8* %p, align 1, !tbaa !0 36 ret void 37 } 38 39 define void @memop_unsigned_char_or(i8* nocapture %p, i8 zeroext %x) nounwind { 40 entry: 41 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 42 %0 = load i8* %p, align 1, !tbaa !0 43 %or3 = or i8 %0, %x 44 store i8 %or3, i8* %p, align 1, !tbaa !0 45 ret void 46 } 47 48 define void @memop_unsigned_char_and(i8* nocapture %p, i8 zeroext %x) nounwind { 49 entry: 50 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 51 %0 = load i8* %p, align 1, !tbaa !0 52 %and3 = and i8 %0, %x 53 store i8 %and3, i8* %p, align 1, !tbaa !0 54 ret void 55 } 56 57 define void @memop_unsigned_char_clrbit(i8* nocapture %p) nounwind { 58 entry: 59 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 60 %0 = load i8* %p, align 1, !tbaa !0 61 %conv = zext i8 %0 to i32 62 %and = and i32 %conv, 223 63 %conv1 = trunc i32 %and to i8 64 store i8 %conv1, i8* %p, align 1, !tbaa !0 65 ret void 66 } 67 68 define void @memop_unsigned_char_setbit(i8* nocapture %p) nounwind { 69 entry: 70 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 71 %0 = load i8* %p, align 1, !tbaa !0 72 %conv = zext i8 %0 to i32 73 %or = or i32 %conv, 128 74 %conv1 = trunc i32 %or to i8 75 store i8 %conv1, i8* %p, align 1, !tbaa !0 76 ret void 77 } 78 79 define void @memop_unsigned_char_add5_index(i8* nocapture %p, i32 %i) nounwind { 80 entry: 81 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 82 %add.ptr = getelementptr inbounds i8* %p, i32 %i 83 %0 = load i8* %add.ptr, align 1, !tbaa !0 84 %conv = zext i8 %0 to i32 85 %add = add nsw i32 %conv, 5 86 %conv1 = trunc i32 %add to i8 87 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 88 ret void 89 } 90 91 define void @memop_unsigned_char_add_index(i8* nocapture %p, i32 %i, i8 zeroext %x) nounwind { 92 entry: 93 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 94 %conv = zext i8 %x to i32 95 %add.ptr = getelementptr inbounds i8* %p, i32 %i 96 %0 = load i8* %add.ptr, align 1, !tbaa !0 97 %conv1 = zext i8 %0 to i32 98 %add = add nsw i32 %conv1, %conv 99 %conv2 = trunc i32 %add to i8 100 store i8 %conv2, i8* %add.ptr, align 1, !tbaa !0 101 ret void 102 } 103 104 define void @memop_unsigned_char_sub_index(i8* nocapture %p, i32 %i, i8 zeroext %x) nounwind { 105 entry: 106 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 107 %conv = zext i8 %x to i32 108 %add.ptr = getelementptr inbounds i8* %p, i32 %i 109 %0 = load i8* %add.ptr, align 1, !tbaa !0 110 %conv1 = zext i8 %0 to i32 111 %sub = sub nsw i32 %conv1, %conv 112 %conv2 = trunc i32 %sub to i8 113 store i8 %conv2, i8* %add.ptr, align 1, !tbaa !0 114 ret void 115 } 116 117 define void @memop_unsigned_char_or_index(i8* nocapture %p, i32 %i, i8 zeroext %x) nounwind { 118 entry: 119 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 120 %add.ptr = getelementptr inbounds i8* %p, i32 %i 121 %0 = load i8* %add.ptr, align 1, !tbaa !0 122 %or3 = or i8 %0, %x 123 store i8 %or3, i8* %add.ptr, align 1, !tbaa !0 124 ret void 125 } 126 127 define void @memop_unsigned_char_and_index(i8* nocapture %p, i32 %i, i8 zeroext %x) nounwind { 128 entry: 129 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 130 %add.ptr = getelementptr inbounds i8* %p, i32 %i 131 %0 = load i8* %add.ptr, align 1, !tbaa !0 132 %and3 = and i8 %0, %x 133 store i8 %and3, i8* %add.ptr, align 1, !tbaa !0 134 ret void 135 } 136 137 define void @memop_unsigned_char_clrbit_index(i8* nocapture %p, i32 %i) nounwind { 138 entry: 139 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 140 %add.ptr = getelementptr inbounds i8* %p, i32 %i 141 %0 = load i8* %add.ptr, align 1, !tbaa !0 142 %conv = zext i8 %0 to i32 143 %and = and i32 %conv, 223 144 %conv1 = trunc i32 %and to i8 145 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 146 ret void 147 } 148 149 define void @memop_unsigned_char_setbit_index(i8* nocapture %p, i32 %i) nounwind { 150 entry: 151 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 152 %add.ptr = getelementptr inbounds i8* %p, i32 %i 153 %0 = load i8* %add.ptr, align 1, !tbaa !0 154 %conv = zext i8 %0 to i32 155 %or = or i32 %conv, 128 156 %conv1 = trunc i32 %or to i8 157 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 158 ret void 159 } 160 161 define void @memop_unsigned_char_add5_index5(i8* nocapture %p) nounwind { 162 entry: 163 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}+={{ *}}#5 164 %add.ptr = getelementptr inbounds i8* %p, i32 5 165 %0 = load i8* %add.ptr, align 1, !tbaa !0 166 %conv = zext i8 %0 to i32 167 %add = add nsw i32 %conv, 5 168 %conv1 = trunc i32 %add to i8 169 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 170 ret void 171 } 172 173 define void @memop_unsigned_char_add_index5(i8* nocapture %p, i8 zeroext %x) nounwind { 174 entry: 175 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}+={{ *}}r{{[0-9]+}} 176 %conv = zext i8 %x to i32 177 %add.ptr = getelementptr inbounds i8* %p, i32 5 178 %0 = load i8* %add.ptr, align 1, !tbaa !0 179 %conv1 = zext i8 %0 to i32 180 %add = add nsw i32 %conv1, %conv 181 %conv2 = trunc i32 %add to i8 182 store i8 %conv2, i8* %add.ptr, align 1, !tbaa !0 183 ret void 184 } 185 186 define void @memop_unsigned_char_sub_index5(i8* nocapture %p, i8 zeroext %x) nounwind { 187 entry: 188 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}-={{ *}}r{{[0-9]+}} 189 %conv = zext i8 %x to i32 190 %add.ptr = getelementptr inbounds i8* %p, i32 5 191 %0 = load i8* %add.ptr, align 1, !tbaa !0 192 %conv1 = zext i8 %0 to i32 193 %sub = sub nsw i32 %conv1, %conv 194 %conv2 = trunc i32 %sub to i8 195 store i8 %conv2, i8* %add.ptr, align 1, !tbaa !0 196 ret void 197 } 198 199 define void @memop_unsigned_char_or_index5(i8* nocapture %p, i8 zeroext %x) nounwind { 200 entry: 201 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}|={{ *}}r{{[0-9]+}} 202 %add.ptr = getelementptr inbounds i8* %p, i32 5 203 %0 = load i8* %add.ptr, align 1, !tbaa !0 204 %or3 = or i8 %0, %x 205 store i8 %or3, i8* %add.ptr, align 1, !tbaa !0 206 ret void 207 } 208 209 define void @memop_unsigned_char_and_index5(i8* nocapture %p, i8 zeroext %x) nounwind { 210 entry: 211 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}&={{ *}}r{{[0-9]+}} 212 %add.ptr = getelementptr inbounds i8* %p, i32 5 213 %0 = load i8* %add.ptr, align 1, !tbaa !0 214 %and3 = and i8 %0, %x 215 store i8 %and3, i8* %add.ptr, align 1, !tbaa !0 216 ret void 217 } 218 219 define void @memop_unsigned_char_clrbit_index5(i8* nocapture %p) nounwind { 220 entry: 221 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 222 %add.ptr = getelementptr inbounds i8* %p, i32 5 223 %0 = load i8* %add.ptr, align 1, !tbaa !0 224 %conv = zext i8 %0 to i32 225 %and = and i32 %conv, 223 226 %conv1 = trunc i32 %and to i8 227 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 228 ret void 229 } 230 231 define void @memop_unsigned_char_setbit_index5(i8* nocapture %p) nounwind { 232 entry: 233 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 234 %add.ptr = getelementptr inbounds i8* %p, i32 5 235 %0 = load i8* %add.ptr, align 1, !tbaa !0 236 %conv = zext i8 %0 to i32 237 %or = or i32 %conv, 128 238 %conv1 = trunc i32 %or to i8 239 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 240 ret void 241 } 242 243 define void @memop_signed_char_add5(i8* nocapture %p) nounwind { 244 entry: 245 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 246 %0 = load i8* %p, align 1, !tbaa !0 247 %conv2 = zext i8 %0 to i32 248 %add = add nsw i32 %conv2, 5 249 %conv1 = trunc i32 %add to i8 250 store i8 %conv1, i8* %p, align 1, !tbaa !0 251 ret void 252 } 253 254 define void @memop_signed_char_add(i8* nocapture %p, i8 signext %x) nounwind { 255 entry: 256 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 257 %conv4 = zext i8 %x to i32 258 %0 = load i8* %p, align 1, !tbaa !0 259 %conv13 = zext i8 %0 to i32 260 %add = add nsw i32 %conv13, %conv4 261 %conv2 = trunc i32 %add to i8 262 store i8 %conv2, i8* %p, align 1, !tbaa !0 263 ret void 264 } 265 266 define void @memop_signed_char_sub(i8* nocapture %p, i8 signext %x) nounwind { 267 entry: 268 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 269 %conv4 = zext i8 %x to i32 270 %0 = load i8* %p, align 1, !tbaa !0 271 %conv13 = zext i8 %0 to i32 272 %sub = sub nsw i32 %conv13, %conv4 273 %conv2 = trunc i32 %sub to i8 274 store i8 %conv2, i8* %p, align 1, !tbaa !0 275 ret void 276 } 277 278 define void @memop_signed_char_or(i8* nocapture %p, i8 signext %x) nounwind { 279 entry: 280 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 281 %0 = load i8* %p, align 1, !tbaa !0 282 %or3 = or i8 %0, %x 283 store i8 %or3, i8* %p, align 1, !tbaa !0 284 ret void 285 } 286 287 define void @memop_signed_char_and(i8* nocapture %p, i8 signext %x) nounwind { 288 entry: 289 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 290 %0 = load i8* %p, align 1, !tbaa !0 291 %and3 = and i8 %0, %x 292 store i8 %and3, i8* %p, align 1, !tbaa !0 293 ret void 294 } 295 296 define void @memop_signed_char_clrbit(i8* nocapture %p) nounwind { 297 entry: 298 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 299 %0 = load i8* %p, align 1, !tbaa !0 300 %conv2 = zext i8 %0 to i32 301 %and = and i32 %conv2, 223 302 %conv1 = trunc i32 %and to i8 303 store i8 %conv1, i8* %p, align 1, !tbaa !0 304 ret void 305 } 306 307 define void @memop_signed_char_setbit(i8* nocapture %p) nounwind { 308 entry: 309 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 310 %0 = load i8* %p, align 1, !tbaa !0 311 %conv2 = zext i8 %0 to i32 312 %or = or i32 %conv2, 128 313 %conv1 = trunc i32 %or to i8 314 store i8 %conv1, i8* %p, align 1, !tbaa !0 315 ret void 316 } 317 318 define void @memop_signed_char_add5_index(i8* nocapture %p, i32 %i) nounwind { 319 entry: 320 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 321 %add.ptr = getelementptr inbounds i8* %p, i32 %i 322 %0 = load i8* %add.ptr, align 1, !tbaa !0 323 %conv2 = zext i8 %0 to i32 324 %add = add nsw i32 %conv2, 5 325 %conv1 = trunc i32 %add to i8 326 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 327 ret void 328 } 329 330 define void @memop_signed_char_add_index(i8* nocapture %p, i32 %i, i8 signext %x) nounwind { 331 entry: 332 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 333 %conv4 = zext i8 %x to i32 334 %add.ptr = getelementptr inbounds i8* %p, i32 %i 335 %0 = load i8* %add.ptr, align 1, !tbaa !0 336 %conv13 = zext i8 %0 to i32 337 %add = add nsw i32 %conv13, %conv4 338 %conv2 = trunc i32 %add to i8 339 store i8 %conv2, i8* %add.ptr, align 1, !tbaa !0 340 ret void 341 } 342 343 define void @memop_signed_char_sub_index(i8* nocapture %p, i32 %i, i8 signext %x) nounwind { 344 entry: 345 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 346 %conv4 = zext i8 %x to i32 347 %add.ptr = getelementptr inbounds i8* %p, i32 %i 348 %0 = load i8* %add.ptr, align 1, !tbaa !0 349 %conv13 = zext i8 %0 to i32 350 %sub = sub nsw i32 %conv13, %conv4 351 %conv2 = trunc i32 %sub to i8 352 store i8 %conv2, i8* %add.ptr, align 1, !tbaa !0 353 ret void 354 } 355 356 define void @memop_signed_char_or_index(i8* nocapture %p, i32 %i, i8 signext %x) nounwind { 357 entry: 358 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 359 %add.ptr = getelementptr inbounds i8* %p, i32 %i 360 %0 = load i8* %add.ptr, align 1, !tbaa !0 361 %or3 = or i8 %0, %x 362 store i8 %or3, i8* %add.ptr, align 1, !tbaa !0 363 ret void 364 } 365 366 define void @memop_signed_char_and_index(i8* nocapture %p, i32 %i, i8 signext %x) nounwind { 367 entry: 368 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 369 %add.ptr = getelementptr inbounds i8* %p, i32 %i 370 %0 = load i8* %add.ptr, align 1, !tbaa !0 371 %and3 = and i8 %0, %x 372 store i8 %and3, i8* %add.ptr, align 1, !tbaa !0 373 ret void 374 } 375 376 define void @memop_signed_char_clrbit_index(i8* nocapture %p, i32 %i) nounwind { 377 entry: 378 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 379 %add.ptr = getelementptr inbounds i8* %p, i32 %i 380 %0 = load i8* %add.ptr, align 1, !tbaa !0 381 %conv2 = zext i8 %0 to i32 382 %and = and i32 %conv2, 223 383 %conv1 = trunc i32 %and to i8 384 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 385 ret void 386 } 387 388 define void @memop_signed_char_setbit_index(i8* nocapture %p, i32 %i) nounwind { 389 entry: 390 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 391 %add.ptr = getelementptr inbounds i8* %p, i32 %i 392 %0 = load i8* %add.ptr, align 1, !tbaa !0 393 %conv2 = zext i8 %0 to i32 394 %or = or i32 %conv2, 128 395 %conv1 = trunc i32 %or to i8 396 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 397 ret void 398 } 399 400 define void @memop_signed_char_add5_index5(i8* nocapture %p) nounwind { 401 entry: 402 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}+={{ *}}#5 403 %add.ptr = getelementptr inbounds i8* %p, i32 5 404 %0 = load i8* %add.ptr, align 1, !tbaa !0 405 %conv2 = zext i8 %0 to i32 406 %add = add nsw i32 %conv2, 5 407 %conv1 = trunc i32 %add to i8 408 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 409 ret void 410 } 411 412 define void @memop_signed_char_add_index5(i8* nocapture %p, i8 signext %x) nounwind { 413 entry: 414 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}+={{ *}}r{{[0-9]+}} 415 %conv4 = zext i8 %x to i32 416 %add.ptr = getelementptr inbounds i8* %p, i32 5 417 %0 = load i8* %add.ptr, align 1, !tbaa !0 418 %conv13 = zext i8 %0 to i32 419 %add = add nsw i32 %conv13, %conv4 420 %conv2 = trunc i32 %add to i8 421 store i8 %conv2, i8* %add.ptr, align 1, !tbaa !0 422 ret void 423 } 424 425 define void @memop_signed_char_sub_index5(i8* nocapture %p, i8 signext %x) nounwind { 426 entry: 427 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}-={{ *}}r{{[0-9]+}} 428 %conv4 = zext i8 %x to i32 429 %add.ptr = getelementptr inbounds i8* %p, i32 5 430 %0 = load i8* %add.ptr, align 1, !tbaa !0 431 %conv13 = zext i8 %0 to i32 432 %sub = sub nsw i32 %conv13, %conv4 433 %conv2 = trunc i32 %sub to i8 434 store i8 %conv2, i8* %add.ptr, align 1, !tbaa !0 435 ret void 436 } 437 438 define void @memop_signed_char_or_index5(i8* nocapture %p, i8 signext %x) nounwind { 439 entry: 440 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}|={{ *}}r{{[0-9]+}} 441 %add.ptr = getelementptr inbounds i8* %p, i32 5 442 %0 = load i8* %add.ptr, align 1, !tbaa !0 443 %or3 = or i8 %0, %x 444 store i8 %or3, i8* %add.ptr, align 1, !tbaa !0 445 ret void 446 } 447 448 define void @memop_signed_char_and_index5(i8* nocapture %p, i8 signext %x) nounwind { 449 entry: 450 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}&={{ *}}r{{[0-9]+}} 451 %add.ptr = getelementptr inbounds i8* %p, i32 5 452 %0 = load i8* %add.ptr, align 1, !tbaa !0 453 %and3 = and i8 %0, %x 454 store i8 %and3, i8* %add.ptr, align 1, !tbaa !0 455 ret void 456 } 457 458 define void @memop_signed_char_clrbit_index5(i8* nocapture %p) nounwind { 459 entry: 460 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 461 %add.ptr = getelementptr inbounds i8* %p, i32 5 462 %0 = load i8* %add.ptr, align 1, !tbaa !0 463 %conv2 = zext i8 %0 to i32 464 %and = and i32 %conv2, 223 465 %conv1 = trunc i32 %and to i8 466 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 467 ret void 468 } 469 470 define void @memop_signed_char_setbit_index5(i8* nocapture %p) nounwind { 471 entry: 472 ; CHECK: memb(r{{[0-9]+}}{{ *}}+{{ *}}#5){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 473 %add.ptr = getelementptr inbounds i8* %p, i32 5 474 %0 = load i8* %add.ptr, align 1, !tbaa !0 475 %conv2 = zext i8 %0 to i32 476 %or = or i32 %conv2, 128 477 %conv1 = trunc i32 %or to i8 478 store i8 %conv1, i8* %add.ptr, align 1, !tbaa !0 479 ret void 480 } 481 482 define void @memop_unsigned_short_add5(i16* nocapture %p) nounwind { 483 entry: 484 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 485 %0 = load i16* %p, align 2, !tbaa !2 486 %conv = zext i16 %0 to i32 487 %add = add nsw i32 %conv, 5 488 %conv1 = trunc i32 %add to i16 489 store i16 %conv1, i16* %p, align 2, !tbaa !2 490 ret void 491 } 492 493 define void @memop_unsigned_short_add(i16* nocapture %p, i16 zeroext %x) nounwind { 494 entry: 495 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 496 %conv = zext i16 %x to i32 497 %0 = load i16* %p, align 2, !tbaa !2 498 %conv1 = zext i16 %0 to i32 499 %add = add nsw i32 %conv1, %conv 500 %conv2 = trunc i32 %add to i16 501 store i16 %conv2, i16* %p, align 2, !tbaa !2 502 ret void 503 } 504 505 define void @memop_unsigned_short_sub(i16* nocapture %p, i16 zeroext %x) nounwind { 506 entry: 507 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 508 %conv = zext i16 %x to i32 509 %0 = load i16* %p, align 2, !tbaa !2 510 %conv1 = zext i16 %0 to i32 511 %sub = sub nsw i32 %conv1, %conv 512 %conv2 = trunc i32 %sub to i16 513 store i16 %conv2, i16* %p, align 2, !tbaa !2 514 ret void 515 } 516 517 define void @memop_unsigned_short_or(i16* nocapture %p, i16 zeroext %x) nounwind { 518 entry: 519 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 520 %0 = load i16* %p, align 2, !tbaa !2 521 %or3 = or i16 %0, %x 522 store i16 %or3, i16* %p, align 2, !tbaa !2 523 ret void 524 } 525 526 define void @memop_unsigned_short_and(i16* nocapture %p, i16 zeroext %x) nounwind { 527 entry: 528 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 529 %0 = load i16* %p, align 2, !tbaa !2 530 %and3 = and i16 %0, %x 531 store i16 %and3, i16* %p, align 2, !tbaa !2 532 ret void 533 } 534 535 define void @memop_unsigned_short_clrbit(i16* nocapture %p) nounwind { 536 entry: 537 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 538 %0 = load i16* %p, align 2, !tbaa !2 539 %conv = zext i16 %0 to i32 540 %and = and i32 %conv, 65503 541 %conv1 = trunc i32 %and to i16 542 store i16 %conv1, i16* %p, align 2, !tbaa !2 543 ret void 544 } 545 546 define void @memop_unsigned_short_setbit(i16* nocapture %p) nounwind { 547 entry: 548 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 549 %0 = load i16* %p, align 2, !tbaa !2 550 %conv = zext i16 %0 to i32 551 %or = or i32 %conv, 128 552 %conv1 = trunc i32 %or to i16 553 store i16 %conv1, i16* %p, align 2, !tbaa !2 554 ret void 555 } 556 557 define void @memop_unsigned_short_add5_index(i16* nocapture %p, i32 %i) nounwind { 558 entry: 559 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 560 %add.ptr = getelementptr inbounds i16* %p, i32 %i 561 %0 = load i16* %add.ptr, align 2, !tbaa !2 562 %conv = zext i16 %0 to i32 563 %add = add nsw i32 %conv, 5 564 %conv1 = trunc i32 %add to i16 565 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 566 ret void 567 } 568 569 define void @memop_unsigned_short_add_index(i16* nocapture %p, i32 %i, i16 zeroext %x) nounwind { 570 entry: 571 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 572 %conv = zext i16 %x to i32 573 %add.ptr = getelementptr inbounds i16* %p, i32 %i 574 %0 = load i16* %add.ptr, align 2, !tbaa !2 575 %conv1 = zext i16 %0 to i32 576 %add = add nsw i32 %conv1, %conv 577 %conv2 = trunc i32 %add to i16 578 store i16 %conv2, i16* %add.ptr, align 2, !tbaa !2 579 ret void 580 } 581 582 define void @memop_unsigned_short_sub_index(i16* nocapture %p, i32 %i, i16 zeroext %x) nounwind { 583 entry: 584 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 585 %conv = zext i16 %x to i32 586 %add.ptr = getelementptr inbounds i16* %p, i32 %i 587 %0 = load i16* %add.ptr, align 2, !tbaa !2 588 %conv1 = zext i16 %0 to i32 589 %sub = sub nsw i32 %conv1, %conv 590 %conv2 = trunc i32 %sub to i16 591 store i16 %conv2, i16* %add.ptr, align 2, !tbaa !2 592 ret void 593 } 594 595 define void @memop_unsigned_short_or_index(i16* nocapture %p, i32 %i, i16 zeroext %x) nounwind { 596 entry: 597 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 598 %add.ptr = getelementptr inbounds i16* %p, i32 %i 599 %0 = load i16* %add.ptr, align 2, !tbaa !2 600 %or3 = or i16 %0, %x 601 store i16 %or3, i16* %add.ptr, align 2, !tbaa !2 602 ret void 603 } 604 605 define void @memop_unsigned_short_and_index(i16* nocapture %p, i32 %i, i16 zeroext %x) nounwind { 606 entry: 607 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 608 %add.ptr = getelementptr inbounds i16* %p, i32 %i 609 %0 = load i16* %add.ptr, align 2, !tbaa !2 610 %and3 = and i16 %0, %x 611 store i16 %and3, i16* %add.ptr, align 2, !tbaa !2 612 ret void 613 } 614 615 define void @memop_unsigned_short_clrbit_index(i16* nocapture %p, i32 %i) nounwind { 616 entry: 617 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 618 %add.ptr = getelementptr inbounds i16* %p, i32 %i 619 %0 = load i16* %add.ptr, align 2, !tbaa !2 620 %conv = zext i16 %0 to i32 621 %and = and i32 %conv, 65503 622 %conv1 = trunc i32 %and to i16 623 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 624 ret void 625 } 626 627 define void @memop_unsigned_short_setbit_index(i16* nocapture %p, i32 %i) nounwind { 628 entry: 629 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 630 %add.ptr = getelementptr inbounds i16* %p, i32 %i 631 %0 = load i16* %add.ptr, align 2, !tbaa !2 632 %conv = zext i16 %0 to i32 633 %or = or i32 %conv, 128 634 %conv1 = trunc i32 %or to i16 635 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 636 ret void 637 } 638 639 define void @memop_unsigned_short_add5_index5(i16* nocapture %p) nounwind { 640 entry: 641 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}+={{ *}}#5 642 %add.ptr = getelementptr inbounds i16* %p, i32 5 643 %0 = load i16* %add.ptr, align 2, !tbaa !2 644 %conv = zext i16 %0 to i32 645 %add = add nsw i32 %conv, 5 646 %conv1 = trunc i32 %add to i16 647 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 648 ret void 649 } 650 651 define void @memop_unsigned_short_add_index5(i16* nocapture %p, i16 zeroext %x) nounwind { 652 entry: 653 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}+={{ *}}r{{[0-9]+}} 654 %conv = zext i16 %x to i32 655 %add.ptr = getelementptr inbounds i16* %p, i32 5 656 %0 = load i16* %add.ptr, align 2, !tbaa !2 657 %conv1 = zext i16 %0 to i32 658 %add = add nsw i32 %conv1, %conv 659 %conv2 = trunc i32 %add to i16 660 store i16 %conv2, i16* %add.ptr, align 2, !tbaa !2 661 ret void 662 } 663 664 define void @memop_unsigned_short_sub_index5(i16* nocapture %p, i16 zeroext %x) nounwind { 665 entry: 666 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}-={{ *}}r{{[0-9]+}} 667 %conv = zext i16 %x to i32 668 %add.ptr = getelementptr inbounds i16* %p, i32 5 669 %0 = load i16* %add.ptr, align 2, !tbaa !2 670 %conv1 = zext i16 %0 to i32 671 %sub = sub nsw i32 %conv1, %conv 672 %conv2 = trunc i32 %sub to i16 673 store i16 %conv2, i16* %add.ptr, align 2, !tbaa !2 674 ret void 675 } 676 677 define void @memop_unsigned_short_or_index5(i16* nocapture %p, i16 zeroext %x) nounwind { 678 entry: 679 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}|={{ *}}r{{[0-9]+}} 680 %add.ptr = getelementptr inbounds i16* %p, i32 5 681 %0 = load i16* %add.ptr, align 2, !tbaa !2 682 %or3 = or i16 %0, %x 683 store i16 %or3, i16* %add.ptr, align 2, !tbaa !2 684 ret void 685 } 686 687 define void @memop_unsigned_short_and_index5(i16* nocapture %p, i16 zeroext %x) nounwind { 688 entry: 689 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}&={{ *}}r{{[0-9]+}} 690 %add.ptr = getelementptr inbounds i16* %p, i32 5 691 %0 = load i16* %add.ptr, align 2, !tbaa !2 692 %and3 = and i16 %0, %x 693 store i16 %and3, i16* %add.ptr, align 2, !tbaa !2 694 ret void 695 } 696 697 define void @memop_unsigned_short_clrbit_index5(i16* nocapture %p) nounwind { 698 entry: 699 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 700 %add.ptr = getelementptr inbounds i16* %p, i32 5 701 %0 = load i16* %add.ptr, align 2, !tbaa !2 702 %conv = zext i16 %0 to i32 703 %and = and i32 %conv, 65503 704 %conv1 = trunc i32 %and to i16 705 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 706 ret void 707 } 708 709 define void @memop_unsigned_short_setbit_index5(i16* nocapture %p) nounwind { 710 entry: 711 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 712 %add.ptr = getelementptr inbounds i16* %p, i32 5 713 %0 = load i16* %add.ptr, align 2, !tbaa !2 714 %conv = zext i16 %0 to i32 715 %or = or i32 %conv, 128 716 %conv1 = trunc i32 %or to i16 717 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 718 ret void 719 } 720 721 define void @memop_signed_short_add5(i16* nocapture %p) nounwind { 722 entry: 723 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 724 %0 = load i16* %p, align 2, !tbaa !2 725 %conv2 = zext i16 %0 to i32 726 %add = add nsw i32 %conv2, 5 727 %conv1 = trunc i32 %add to i16 728 store i16 %conv1, i16* %p, align 2, !tbaa !2 729 ret void 730 } 731 732 define void @memop_signed_short_add(i16* nocapture %p, i16 signext %x) nounwind { 733 entry: 734 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 735 %conv4 = zext i16 %x to i32 736 %0 = load i16* %p, align 2, !tbaa !2 737 %conv13 = zext i16 %0 to i32 738 %add = add nsw i32 %conv13, %conv4 739 %conv2 = trunc i32 %add to i16 740 store i16 %conv2, i16* %p, align 2, !tbaa !2 741 ret void 742 } 743 744 define void @memop_signed_short_sub(i16* nocapture %p, i16 signext %x) nounwind { 745 entry: 746 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 747 %conv4 = zext i16 %x to i32 748 %0 = load i16* %p, align 2, !tbaa !2 749 %conv13 = zext i16 %0 to i32 750 %sub = sub nsw i32 %conv13, %conv4 751 %conv2 = trunc i32 %sub to i16 752 store i16 %conv2, i16* %p, align 2, !tbaa !2 753 ret void 754 } 755 756 define void @memop_signed_short_or(i16* nocapture %p, i16 signext %x) nounwind { 757 entry: 758 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 759 %0 = load i16* %p, align 2, !tbaa !2 760 %or3 = or i16 %0, %x 761 store i16 %or3, i16* %p, align 2, !tbaa !2 762 ret void 763 } 764 765 define void @memop_signed_short_and(i16* nocapture %p, i16 signext %x) nounwind { 766 entry: 767 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 768 %0 = load i16* %p, align 2, !tbaa !2 769 %and3 = and i16 %0, %x 770 store i16 %and3, i16* %p, align 2, !tbaa !2 771 ret void 772 } 773 774 define void @memop_signed_short_clrbit(i16* nocapture %p) nounwind { 775 entry: 776 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 777 %0 = load i16* %p, align 2, !tbaa !2 778 %conv2 = zext i16 %0 to i32 779 %and = and i32 %conv2, 65503 780 %conv1 = trunc i32 %and to i16 781 store i16 %conv1, i16* %p, align 2, !tbaa !2 782 ret void 783 } 784 785 define void @memop_signed_short_setbit(i16* nocapture %p) nounwind { 786 entry: 787 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 788 %0 = load i16* %p, align 2, !tbaa !2 789 %conv2 = zext i16 %0 to i32 790 %or = or i32 %conv2, 128 791 %conv1 = trunc i32 %or to i16 792 store i16 %conv1, i16* %p, align 2, !tbaa !2 793 ret void 794 } 795 796 define void @memop_signed_short_add5_index(i16* nocapture %p, i32 %i) nounwind { 797 entry: 798 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 799 %add.ptr = getelementptr inbounds i16* %p, i32 %i 800 %0 = load i16* %add.ptr, align 2, !tbaa !2 801 %conv2 = zext i16 %0 to i32 802 %add = add nsw i32 %conv2, 5 803 %conv1 = trunc i32 %add to i16 804 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 805 ret void 806 } 807 808 define void @memop_signed_short_add_index(i16* nocapture %p, i32 %i, i16 signext %x) nounwind { 809 entry: 810 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 811 %conv4 = zext i16 %x to i32 812 %add.ptr = getelementptr inbounds i16* %p, i32 %i 813 %0 = load i16* %add.ptr, align 2, !tbaa !2 814 %conv13 = zext i16 %0 to i32 815 %add = add nsw i32 %conv13, %conv4 816 %conv2 = trunc i32 %add to i16 817 store i16 %conv2, i16* %add.ptr, align 2, !tbaa !2 818 ret void 819 } 820 821 define void @memop_signed_short_sub_index(i16* nocapture %p, i32 %i, i16 signext %x) nounwind { 822 entry: 823 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 824 %conv4 = zext i16 %x to i32 825 %add.ptr = getelementptr inbounds i16* %p, i32 %i 826 %0 = load i16* %add.ptr, align 2, !tbaa !2 827 %conv13 = zext i16 %0 to i32 828 %sub = sub nsw i32 %conv13, %conv4 829 %conv2 = trunc i32 %sub to i16 830 store i16 %conv2, i16* %add.ptr, align 2, !tbaa !2 831 ret void 832 } 833 834 define void @memop_signed_short_or_index(i16* nocapture %p, i32 %i, i16 signext %x) nounwind { 835 entry: 836 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 837 %add.ptr = getelementptr inbounds i16* %p, i32 %i 838 %0 = load i16* %add.ptr, align 2, !tbaa !2 839 %or3 = or i16 %0, %x 840 store i16 %or3, i16* %add.ptr, align 2, !tbaa !2 841 ret void 842 } 843 844 define void @memop_signed_short_and_index(i16* nocapture %p, i32 %i, i16 signext %x) nounwind { 845 entry: 846 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 847 %add.ptr = getelementptr inbounds i16* %p, i32 %i 848 %0 = load i16* %add.ptr, align 2, !tbaa !2 849 %and3 = and i16 %0, %x 850 store i16 %and3, i16* %add.ptr, align 2, !tbaa !2 851 ret void 852 } 853 854 define void @memop_signed_short_clrbit_index(i16* nocapture %p, i32 %i) nounwind { 855 entry: 856 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 857 %add.ptr = getelementptr inbounds i16* %p, i32 %i 858 %0 = load i16* %add.ptr, align 2, !tbaa !2 859 %conv2 = zext i16 %0 to i32 860 %and = and i32 %conv2, 65503 861 %conv1 = trunc i32 %and to i16 862 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 863 ret void 864 } 865 866 define void @memop_signed_short_setbit_index(i16* nocapture %p, i32 %i) nounwind { 867 entry: 868 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 869 %add.ptr = getelementptr inbounds i16* %p, i32 %i 870 %0 = load i16* %add.ptr, align 2, !tbaa !2 871 %conv2 = zext i16 %0 to i32 872 %or = or i32 %conv2, 128 873 %conv1 = trunc i32 %or to i16 874 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 875 ret void 876 } 877 878 define void @memop_signed_short_add5_index5(i16* nocapture %p) nounwind { 879 entry: 880 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}+={{ *}}#5 881 %add.ptr = getelementptr inbounds i16* %p, i32 5 882 %0 = load i16* %add.ptr, align 2, !tbaa !2 883 %conv2 = zext i16 %0 to i32 884 %add = add nsw i32 %conv2, 5 885 %conv1 = trunc i32 %add to i16 886 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 887 ret void 888 } 889 890 define void @memop_signed_short_add_index5(i16* nocapture %p, i16 signext %x) nounwind { 891 entry: 892 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}+={{ *}}r{{[0-9]+}} 893 %conv4 = zext i16 %x to i32 894 %add.ptr = getelementptr inbounds i16* %p, i32 5 895 %0 = load i16* %add.ptr, align 2, !tbaa !2 896 %conv13 = zext i16 %0 to i32 897 %add = add nsw i32 %conv13, %conv4 898 %conv2 = trunc i32 %add to i16 899 store i16 %conv2, i16* %add.ptr, align 2, !tbaa !2 900 ret void 901 } 902 903 define void @memop_signed_short_sub_index5(i16* nocapture %p, i16 signext %x) nounwind { 904 entry: 905 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}-={{ *}}r{{[0-9]+}} 906 %conv4 = zext i16 %x to i32 907 %add.ptr = getelementptr inbounds i16* %p, i32 5 908 %0 = load i16* %add.ptr, align 2, !tbaa !2 909 %conv13 = zext i16 %0 to i32 910 %sub = sub nsw i32 %conv13, %conv4 911 %conv2 = trunc i32 %sub to i16 912 store i16 %conv2, i16* %add.ptr, align 2, !tbaa !2 913 ret void 914 } 915 916 define void @memop_signed_short_or_index5(i16* nocapture %p, i16 signext %x) nounwind { 917 entry: 918 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}|={{ *}}r{{[0-9]+}} 919 %add.ptr = getelementptr inbounds i16* %p, i32 5 920 %0 = load i16* %add.ptr, align 2, !tbaa !2 921 %or3 = or i16 %0, %x 922 store i16 %or3, i16* %add.ptr, align 2, !tbaa !2 923 ret void 924 } 925 926 define void @memop_signed_short_and_index5(i16* nocapture %p, i16 signext %x) nounwind { 927 entry: 928 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}&={{ *}}r{{[0-9]+}} 929 %add.ptr = getelementptr inbounds i16* %p, i32 5 930 %0 = load i16* %add.ptr, align 2, !tbaa !2 931 %and3 = and i16 %0, %x 932 store i16 %and3, i16* %add.ptr, align 2, !tbaa !2 933 ret void 934 } 935 936 define void @memop_signed_short_clrbit_index5(i16* nocapture %p) nounwind { 937 entry: 938 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 939 %add.ptr = getelementptr inbounds i16* %p, i32 5 940 %0 = load i16* %add.ptr, align 2, !tbaa !2 941 %conv2 = zext i16 %0 to i32 942 %and = and i32 %conv2, 65503 943 %conv1 = trunc i32 %and to i16 944 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 945 ret void 946 } 947 948 define void @memop_signed_short_setbit_index5(i16* nocapture %p) nounwind { 949 entry: 950 ; CHECK: memh(r{{[0-9]+}}{{ *}}+{{ *}}#10){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 951 %add.ptr = getelementptr inbounds i16* %p, i32 5 952 %0 = load i16* %add.ptr, align 2, !tbaa !2 953 %conv2 = zext i16 %0 to i32 954 %or = or i32 %conv2, 128 955 %conv1 = trunc i32 %or to i16 956 store i16 %conv1, i16* %add.ptr, align 2, !tbaa !2 957 ret void 958 } 959 960 define void @memop_signed_int_add5(i32* nocapture %p) nounwind { 961 entry: 962 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 963 %0 = load i32* %p, align 4, !tbaa !3 964 %add = add i32 %0, 5 965 store i32 %add, i32* %p, align 4, !tbaa !3 966 ret void 967 } 968 969 define void @memop_signed_int_add(i32* nocapture %p, i32 %x) nounwind { 970 entry: 971 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 972 %0 = load i32* %p, align 4, !tbaa !3 973 %add = add i32 %0, %x 974 store i32 %add, i32* %p, align 4, !tbaa !3 975 ret void 976 } 977 978 define void @memop_signed_int_sub(i32* nocapture %p, i32 %x) nounwind { 979 entry: 980 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 981 %0 = load i32* %p, align 4, !tbaa !3 982 %sub = sub i32 %0, %x 983 store i32 %sub, i32* %p, align 4, !tbaa !3 984 ret void 985 } 986 987 define void @memop_signed_int_or(i32* nocapture %p, i32 %x) nounwind { 988 entry: 989 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 990 %0 = load i32* %p, align 4, !tbaa !3 991 %or = or i32 %0, %x 992 store i32 %or, i32* %p, align 4, !tbaa !3 993 ret void 994 } 995 996 define void @memop_signed_int_and(i32* nocapture %p, i32 %x) nounwind { 997 entry: 998 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 999 %0 = load i32* %p, align 4, !tbaa !3 1000 %and = and i32 %0, %x 1001 store i32 %and, i32* %p, align 4, !tbaa !3 1002 ret void 1003 } 1004 1005 define void @memop_signed_int_clrbit(i32* nocapture %p) nounwind { 1006 entry: 1007 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 1008 %0 = load i32* %p, align 4, !tbaa !3 1009 %and = and i32 %0, -33 1010 store i32 %and, i32* %p, align 4, !tbaa !3 1011 ret void 1012 } 1013 1014 define void @memop_signed_int_setbit(i32* nocapture %p) nounwind { 1015 entry: 1016 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 1017 %0 = load i32* %p, align 4, !tbaa !3 1018 %or = or i32 %0, 128 1019 store i32 %or, i32* %p, align 4, !tbaa !3 1020 ret void 1021 } 1022 1023 define void @memop_signed_int_add5_index(i32* nocapture %p, i32 %i) nounwind { 1024 entry: 1025 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 1026 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1027 %0 = load i32* %add.ptr, align 4, !tbaa !3 1028 %add = add i32 %0, 5 1029 store i32 %add, i32* %add.ptr, align 4, !tbaa !3 1030 ret void 1031 } 1032 1033 define void @memop_signed_int_add_index(i32* nocapture %p, i32 %i, i32 %x) nounwind { 1034 entry: 1035 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 1036 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1037 %0 = load i32* %add.ptr, align 4, !tbaa !3 1038 %add = add i32 %0, %x 1039 store i32 %add, i32* %add.ptr, align 4, !tbaa !3 1040 ret void 1041 } 1042 1043 define void @memop_signed_int_sub_index(i32* nocapture %p, i32 %i, i32 %x) nounwind { 1044 entry: 1045 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 1046 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1047 %0 = load i32* %add.ptr, align 4, !tbaa !3 1048 %sub = sub i32 %0, %x 1049 store i32 %sub, i32* %add.ptr, align 4, !tbaa !3 1050 ret void 1051 } 1052 1053 define void @memop_signed_int_or_index(i32* nocapture %p, i32 %i, i32 %x) nounwind { 1054 entry: 1055 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 1056 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1057 %0 = load i32* %add.ptr, align 4, !tbaa !3 1058 %or = or i32 %0, %x 1059 store i32 %or, i32* %add.ptr, align 4, !tbaa !3 1060 ret void 1061 } 1062 1063 define void @memop_signed_int_and_index(i32* nocapture %p, i32 %i, i32 %x) nounwind { 1064 entry: 1065 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 1066 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1067 %0 = load i32* %add.ptr, align 4, !tbaa !3 1068 %and = and i32 %0, %x 1069 store i32 %and, i32* %add.ptr, align 4, !tbaa !3 1070 ret void 1071 } 1072 1073 define void @memop_signed_int_clrbit_index(i32* nocapture %p, i32 %i) nounwind { 1074 entry: 1075 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 1076 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1077 %0 = load i32* %add.ptr, align 4, !tbaa !3 1078 %and = and i32 %0, -33 1079 store i32 %and, i32* %add.ptr, align 4, !tbaa !3 1080 ret void 1081 } 1082 1083 define void @memop_signed_int_setbit_index(i32* nocapture %p, i32 %i) nounwind { 1084 entry: 1085 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 1086 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1087 %0 = load i32* %add.ptr, align 4, !tbaa !3 1088 %or = or i32 %0, 128 1089 store i32 %or, i32* %add.ptr, align 4, !tbaa !3 1090 ret void 1091 } 1092 1093 define void @memop_signed_int_add5_index5(i32* nocapture %p) nounwind { 1094 entry: 1095 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}+={{ *}}#5 1096 %add.ptr = getelementptr inbounds i32* %p, i32 5 1097 %0 = load i32* %add.ptr, align 4, !tbaa !3 1098 %add = add i32 %0, 5 1099 store i32 %add, i32* %add.ptr, align 4, !tbaa !3 1100 ret void 1101 } 1102 1103 define void @memop_signed_int_add_index5(i32* nocapture %p, i32 %x) nounwind { 1104 entry: 1105 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}+={{ *}}r{{[0-9]+}} 1106 %add.ptr = getelementptr inbounds i32* %p, i32 5 1107 %0 = load i32* %add.ptr, align 4, !tbaa !3 1108 %add = add i32 %0, %x 1109 store i32 %add, i32* %add.ptr, align 4, !tbaa !3 1110 ret void 1111 } 1112 1113 define void @memop_signed_int_sub_index5(i32* nocapture %p, i32 %x) nounwind { 1114 entry: 1115 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}-={{ *}}r{{[0-9]+}} 1116 %add.ptr = getelementptr inbounds i32* %p, i32 5 1117 %0 = load i32* %add.ptr, align 4, !tbaa !3 1118 %sub = sub i32 %0, %x 1119 store i32 %sub, i32* %add.ptr, align 4, !tbaa !3 1120 ret void 1121 } 1122 1123 define void @memop_signed_int_or_index5(i32* nocapture %p, i32 %x) nounwind { 1124 entry: 1125 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}|={{ *}}r{{[0-9]+}} 1126 %add.ptr = getelementptr inbounds i32* %p, i32 5 1127 %0 = load i32* %add.ptr, align 4, !tbaa !3 1128 %or = or i32 %0, %x 1129 store i32 %or, i32* %add.ptr, align 4, !tbaa !3 1130 ret void 1131 } 1132 1133 define void @memop_signed_int_and_index5(i32* nocapture %p, i32 %x) nounwind { 1134 entry: 1135 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}&={{ *}}r{{[0-9]+}} 1136 %add.ptr = getelementptr inbounds i32* %p, i32 5 1137 %0 = load i32* %add.ptr, align 4, !tbaa !3 1138 %and = and i32 %0, %x 1139 store i32 %and, i32* %add.ptr, align 4, !tbaa !3 1140 ret void 1141 } 1142 1143 define void @memop_signed_int_clrbit_index5(i32* nocapture %p) nounwind { 1144 entry: 1145 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 1146 %add.ptr = getelementptr inbounds i32* %p, i32 5 1147 %0 = load i32* %add.ptr, align 4, !tbaa !3 1148 %and = and i32 %0, -33 1149 store i32 %and, i32* %add.ptr, align 4, !tbaa !3 1150 ret void 1151 } 1152 1153 define void @memop_signed_int_setbit_index5(i32* nocapture %p) nounwind { 1154 entry: 1155 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 1156 %add.ptr = getelementptr inbounds i32* %p, i32 5 1157 %0 = load i32* %add.ptr, align 4, !tbaa !3 1158 %or = or i32 %0, 128 1159 store i32 %or, i32* %add.ptr, align 4, !tbaa !3 1160 ret void 1161 } 1162 1163 define void @memop_unsigned_int_add5(i32* nocapture %p) nounwind { 1164 entry: 1165 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 1166 %0 = load i32* %p, align 4, !tbaa !3 1167 %add = add nsw i32 %0, 5 1168 store i32 %add, i32* %p, align 4, !tbaa !3 1169 ret void 1170 } 1171 1172 define void @memop_unsigned_int_add(i32* nocapture %p, i32 %x) nounwind { 1173 entry: 1174 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 1175 %0 = load i32* %p, align 4, !tbaa !3 1176 %add = add nsw i32 %0, %x 1177 store i32 %add, i32* %p, align 4, !tbaa !3 1178 ret void 1179 } 1180 1181 define void @memop_unsigned_int_sub(i32* nocapture %p, i32 %x) nounwind { 1182 entry: 1183 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 1184 %0 = load i32* %p, align 4, !tbaa !3 1185 %sub = sub nsw i32 %0, %x 1186 store i32 %sub, i32* %p, align 4, !tbaa !3 1187 ret void 1188 } 1189 1190 define void @memop_unsigned_int_or(i32* nocapture %p, i32 %x) nounwind { 1191 entry: 1192 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 1193 %0 = load i32* %p, align 4, !tbaa !3 1194 %or = or i32 %0, %x 1195 store i32 %or, i32* %p, align 4, !tbaa !3 1196 ret void 1197 } 1198 1199 define void @memop_unsigned_int_and(i32* nocapture %p, i32 %x) nounwind { 1200 entry: 1201 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 1202 %0 = load i32* %p, align 4, !tbaa !3 1203 %and = and i32 %0, %x 1204 store i32 %and, i32* %p, align 4, !tbaa !3 1205 ret void 1206 } 1207 1208 define void @memop_unsigned_int_clrbit(i32* nocapture %p) nounwind { 1209 entry: 1210 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 1211 %0 = load i32* %p, align 4, !tbaa !3 1212 %and = and i32 %0, -33 1213 store i32 %and, i32* %p, align 4, !tbaa !3 1214 ret void 1215 } 1216 1217 define void @memop_unsigned_int_setbit(i32* nocapture %p) nounwind { 1218 entry: 1219 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 1220 %0 = load i32* %p, align 4, !tbaa !3 1221 %or = or i32 %0, 128 1222 store i32 %or, i32* %p, align 4, !tbaa !3 1223 ret void 1224 } 1225 1226 define void @memop_unsigned_int_add5_index(i32* nocapture %p, i32 %i) nounwind { 1227 entry: 1228 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}#5 1229 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1230 %0 = load i32* %add.ptr, align 4, !tbaa !3 1231 %add = add nsw i32 %0, 5 1232 store i32 %add, i32* %add.ptr, align 4, !tbaa !3 1233 ret void 1234 } 1235 1236 define void @memop_unsigned_int_add_index(i32* nocapture %p, i32 %i, i32 %x) nounwind { 1237 entry: 1238 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}+={{ *}}r{{[0-9]+}} 1239 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1240 %0 = load i32* %add.ptr, align 4, !tbaa !3 1241 %add = add nsw i32 %0, %x 1242 store i32 %add, i32* %add.ptr, align 4, !tbaa !3 1243 ret void 1244 } 1245 1246 define void @memop_unsigned_int_sub_index(i32* nocapture %p, i32 %i, i32 %x) nounwind { 1247 entry: 1248 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}-={{ *}}r{{[0-9]+}} 1249 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1250 %0 = load i32* %add.ptr, align 4, !tbaa !3 1251 %sub = sub nsw i32 %0, %x 1252 store i32 %sub, i32* %add.ptr, align 4, !tbaa !3 1253 ret void 1254 } 1255 1256 define void @memop_unsigned_int_or_index(i32* nocapture %p, i32 %i, i32 %x) nounwind { 1257 entry: 1258 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}|={{ *}}r{{[0-9]+}} 1259 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1260 %0 = load i32* %add.ptr, align 4, !tbaa !3 1261 %or = or i32 %0, %x 1262 store i32 %or, i32* %add.ptr, align 4, !tbaa !3 1263 ret void 1264 } 1265 1266 define void @memop_unsigned_int_and_index(i32* nocapture %p, i32 %i, i32 %x) nounwind { 1267 entry: 1268 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}&={{ *}}r{{[0-9]+}} 1269 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1270 %0 = load i32* %add.ptr, align 4, !tbaa !3 1271 %and = and i32 %0, %x 1272 store i32 %and, i32* %add.ptr, align 4, !tbaa !3 1273 ret void 1274 } 1275 1276 define void @memop_unsigned_int_clrbit_index(i32* nocapture %p, i32 %i) nounwind { 1277 entry: 1278 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 1279 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1280 %0 = load i32* %add.ptr, align 4, !tbaa !3 1281 %and = and i32 %0, -33 1282 store i32 %and, i32* %add.ptr, align 4, !tbaa !3 1283 ret void 1284 } 1285 1286 define void @memop_unsigned_int_setbit_index(i32* nocapture %p, i32 %i) nounwind { 1287 entry: 1288 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#0){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 1289 %add.ptr = getelementptr inbounds i32* %p, i32 %i 1290 %0 = load i32* %add.ptr, align 4, !tbaa !3 1291 %or = or i32 %0, 128 1292 store i32 %or, i32* %add.ptr, align 4, !tbaa !3 1293 ret void 1294 } 1295 1296 define void @memop_unsigned_int_add5_index5(i32* nocapture %p) nounwind { 1297 entry: 1298 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}+={{ *}}#5 1299 %add.ptr = getelementptr inbounds i32* %p, i32 5 1300 %0 = load i32* %add.ptr, align 4, !tbaa !3 1301 %add = add nsw i32 %0, 5 1302 store i32 %add, i32* %add.ptr, align 4, !tbaa !3 1303 ret void 1304 } 1305 1306 define void @memop_unsigned_int_add_index5(i32* nocapture %p, i32 %x) nounwind { 1307 entry: 1308 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}+={{ *}}r{{[0-9]+}} 1309 %add.ptr = getelementptr inbounds i32* %p, i32 5 1310 %0 = load i32* %add.ptr, align 4, !tbaa !3 1311 %add = add nsw i32 %0, %x 1312 store i32 %add, i32* %add.ptr, align 4, !tbaa !3 1313 ret void 1314 } 1315 1316 define void @memop_unsigned_int_sub_index5(i32* nocapture %p, i32 %x) nounwind { 1317 entry: 1318 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}-={{ *}}r{{[0-9]+}} 1319 %add.ptr = getelementptr inbounds i32* %p, i32 5 1320 %0 = load i32* %add.ptr, align 4, !tbaa !3 1321 %sub = sub nsw i32 %0, %x 1322 store i32 %sub, i32* %add.ptr, align 4, !tbaa !3 1323 ret void 1324 } 1325 1326 define void @memop_unsigned_int_or_index5(i32* nocapture %p, i32 %x) nounwind { 1327 entry: 1328 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}|={{ *}}r{{[0-9]+}} 1329 %add.ptr = getelementptr inbounds i32* %p, i32 5 1330 %0 = load i32* %add.ptr, align 4, !tbaa !3 1331 %or = or i32 %0, %x 1332 store i32 %or, i32* %add.ptr, align 4, !tbaa !3 1333 ret void 1334 } 1335 1336 define void @memop_unsigned_int_and_index5(i32* nocapture %p, i32 %x) nounwind { 1337 entry: 1338 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}&={{ *}}r{{[0-9]+}} 1339 %add.ptr = getelementptr inbounds i32* %p, i32 5 1340 %0 = load i32* %add.ptr, align 4, !tbaa !3 1341 %and = and i32 %0, %x 1342 store i32 %and, i32* %add.ptr, align 4, !tbaa !3 1343 ret void 1344 } 1345 1346 define void @memop_unsigned_int_clrbit_index5(i32* nocapture %p) nounwind { 1347 entry: 1348 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}={{ *}}clrbit({{ *}}#5{{ *}}) 1349 %add.ptr = getelementptr inbounds i32* %p, i32 5 1350 %0 = load i32* %add.ptr, align 4, !tbaa !3 1351 %and = and i32 %0, -33 1352 store i32 %and, i32* %add.ptr, align 4, !tbaa !3 1353 ret void 1354 } 1355 1356 define void @memop_unsigned_int_setbit_index5(i32* nocapture %p) nounwind { 1357 entry: 1358 ; CHECK: memw(r{{[0-9]+}}{{ *}}+{{ *}}#20){{ *}}={{ *}}setbit({{ *}}#7{{ *}}) 1359 %add.ptr = getelementptr inbounds i32* %p, i32 5 1360 %0 = load i32* %add.ptr, align 4, !tbaa !3 1361 %or = or i32 %0, 128 1362 store i32 %or, i32* %add.ptr, align 4, !tbaa !3 1363 ret void 1364 } 1365 1366 !0 = metadata !{metadata !"omnipotent char", metadata !1} 1367 !1 = metadata !{metadata !"Simple C/C++ TBAA"} 1368 !2 = metadata !{metadata !"short", metadata !0} 1369 !3 = metadata !{metadata !"int", metadata !0} 1370