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