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