1*2afea729SLiao Chunyu; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*2afea729SLiao Chunyu; RUN: llc -O3 -mtriple=riscv32 -mattr=+xcvmem -verify-machineinstrs < %s \ 3*2afea729SLiao Chunyu; RUN: | FileCheck %s --check-prefixes=CHECK 4*2afea729SLiao Chunyu 5*2afea729SLiao Chunyudefine <2 x i32> @lb_ri_inc(i8* %a) { 6*2afea729SLiao Chunyu; CHECK-LABEL: lb_ri_inc: 7*2afea729SLiao Chunyu; CHECK: # %bb.0: 8*2afea729SLiao Chunyu; CHECK-NEXT: cv.lb a1, (a0), 42 9*2afea729SLiao Chunyu; CHECK-NEXT: ret 10*2afea729SLiao Chunyu %1 = load i8, i8* %a 11*2afea729SLiao Chunyu %2 = sext i8 %1 to i32 12*2afea729SLiao Chunyu %3 = getelementptr i8, i8* %a, i32 42 13*2afea729SLiao Chunyu %4 = ptrtoint i8* %3 to i32 14*2afea729SLiao Chunyu %5 = insertelement <2 x i32> undef, i32 %4, i32 0 15*2afea729SLiao Chunyu %6 = insertelement <2 x i32> %5, i32 %2, i32 1 16*2afea729SLiao Chunyu ret <2 x i32> %6 17*2afea729SLiao Chunyu} 18*2afea729SLiao Chunyu 19*2afea729SLiao Chunyudefine <2 x i32> @lb_rr_inc(i8* %a, i32 %b) { 20*2afea729SLiao Chunyu; CHECK-LABEL: lb_rr_inc: 21*2afea729SLiao Chunyu; CHECK: # %bb.0: 22*2afea729SLiao Chunyu; CHECK-NEXT: cv.lb a1, (a0), a1 23*2afea729SLiao Chunyu; CHECK-NEXT: ret 24*2afea729SLiao Chunyu %1 = load i8, i8* %a 25*2afea729SLiao Chunyu %2 = sext i8 %1 to i32 26*2afea729SLiao Chunyu %3 = getelementptr i8, i8* %a, i32 %b 27*2afea729SLiao Chunyu %4 = ptrtoint i8* %3 to i32 28*2afea729SLiao Chunyu %5 = insertelement <2 x i32> undef, i32 %4, i32 0 29*2afea729SLiao Chunyu %6 = insertelement <2 x i32> %5, i32 %2, i32 1 30*2afea729SLiao Chunyu ret <2 x i32> %6 31*2afea729SLiao Chunyu} 32*2afea729SLiao Chunyu 33*2afea729SLiao Chunyudefine i32 @lb_rr(i8* %a, i32 %b) { 34*2afea729SLiao Chunyu; CHECK-LABEL: lb_rr: 35*2afea729SLiao Chunyu; CHECK: # %bb.0: 36*2afea729SLiao Chunyu; CHECK-NEXT: cv.lb a0, a1(a0) 37*2afea729SLiao Chunyu; CHECK-NEXT: ret 38*2afea729SLiao Chunyu %1 = getelementptr i8, i8* %a, i32 %b 39*2afea729SLiao Chunyu %2 = load i8, i8* %1 40*2afea729SLiao Chunyu %3 = sext i8 %2 to i32 41*2afea729SLiao Chunyu ret i32 %3 42*2afea729SLiao Chunyu} 43*2afea729SLiao Chunyu 44*2afea729SLiao Chunyudefine <2 x i32> @lbu_ri_inc(i8* %a) { 45*2afea729SLiao Chunyu; CHECK-LABEL: lbu_ri_inc: 46*2afea729SLiao Chunyu; CHECK: # %bb.0: 47*2afea729SLiao Chunyu; CHECK-NEXT: cv.lbu a1, (a0), 42 48*2afea729SLiao Chunyu; CHECK-NEXT: ret 49*2afea729SLiao Chunyu %1 = load i8, i8* %a 50*2afea729SLiao Chunyu %2 = zext i8 %1 to i32 51*2afea729SLiao Chunyu %3 = getelementptr i8, i8* %a, i32 42 52*2afea729SLiao Chunyu %4 = ptrtoint i8* %3 to i32 53*2afea729SLiao Chunyu %5 = insertelement <2 x i32> undef, i32 %4, i32 0 54*2afea729SLiao Chunyu %6 = insertelement <2 x i32> %5, i32 %2, i32 1 55*2afea729SLiao Chunyu ret <2 x i32> %6 56*2afea729SLiao Chunyu} 57*2afea729SLiao Chunyu 58*2afea729SLiao Chunyudefine <2 x i32> @lbu_rr_inc(i8* %a, i32 %b) { 59*2afea729SLiao Chunyu; CHECK-LABEL: lbu_rr_inc: 60*2afea729SLiao Chunyu; CHECK: # %bb.0: 61*2afea729SLiao Chunyu; CHECK-NEXT: cv.lbu a1, (a0), a1 62*2afea729SLiao Chunyu; CHECK-NEXT: ret 63*2afea729SLiao Chunyu %1 = load i8, i8* %a 64*2afea729SLiao Chunyu %2 = zext i8 %1 to i32 65*2afea729SLiao Chunyu %3 = getelementptr i8, i8* %a, i32 %b 66*2afea729SLiao Chunyu %4 = ptrtoint i8* %3 to i32 67*2afea729SLiao Chunyu %5 = insertelement <2 x i32> undef, i32 %4, i32 0 68*2afea729SLiao Chunyu %6 = insertelement <2 x i32> %5, i32 %2, i32 1 69*2afea729SLiao Chunyu ret <2 x i32> %6 70*2afea729SLiao Chunyu} 71*2afea729SLiao Chunyu 72*2afea729SLiao Chunyudefine i32 @lbu_rr(i8* %a, i32 %b) { 73*2afea729SLiao Chunyu; CHECK-LABEL: lbu_rr: 74*2afea729SLiao Chunyu; CHECK: # %bb.0: 75*2afea729SLiao Chunyu; CHECK-NEXT: cv.lbu a0, a1(a0) 76*2afea729SLiao Chunyu; CHECK-NEXT: ret 77*2afea729SLiao Chunyu %1 = getelementptr i8, i8* %a, i32 %b 78*2afea729SLiao Chunyu %2 = load i8, i8* %1 79*2afea729SLiao Chunyu %3 = zext i8 %2 to i32 80*2afea729SLiao Chunyu ret i32 %3 81*2afea729SLiao Chunyu} 82*2afea729SLiao Chunyu 83*2afea729SLiao Chunyudefine <2 x i32> @lh_ri_inc(i16* %a) { 84*2afea729SLiao Chunyu; CHECK-LABEL: lh_ri_inc: 85*2afea729SLiao Chunyu; CHECK: # %bb.0: 86*2afea729SLiao Chunyu; CHECK-NEXT: cv.lh a1, (a0), 84 87*2afea729SLiao Chunyu; CHECK-NEXT: ret 88*2afea729SLiao Chunyu %1 = load i16, i16* %a 89*2afea729SLiao Chunyu %2 = sext i16 %1 to i32 90*2afea729SLiao Chunyu %3 = getelementptr i16, i16* %a, i32 42 91*2afea729SLiao Chunyu %4 = ptrtoint i16* %3 to i32 92*2afea729SLiao Chunyu %5 = insertelement <2 x i32> undef, i32 %4, i32 0 93*2afea729SLiao Chunyu %6 = insertelement <2 x i32> %5, i32 %2, i32 1 94*2afea729SLiao Chunyu ret <2 x i32> %6 95*2afea729SLiao Chunyu} 96*2afea729SLiao Chunyu 97*2afea729SLiao Chunyudefine <2 x i32> @lh_rr_inc(i16* %a, i32 %b) { 98*2afea729SLiao Chunyu; CHECK-LABEL: lh_rr_inc: 99*2afea729SLiao Chunyu; CHECK: # %bb.0: 100*2afea729SLiao Chunyu; CHECK-NEXT: slli a1, a1, 1 101*2afea729SLiao Chunyu; CHECK-NEXT: cv.lh a1, (a0), a1 102*2afea729SLiao Chunyu; CHECK-NEXT: ret 103*2afea729SLiao Chunyu %1 = load i16, i16* %a 104*2afea729SLiao Chunyu %2 = sext i16 %1 to i32 105*2afea729SLiao Chunyu %3 = getelementptr i16, i16* %a, i32 %b 106*2afea729SLiao Chunyu %4 = ptrtoint i16* %3 to i32 107*2afea729SLiao Chunyu %5 = insertelement <2 x i32> undef, i32 %4, i32 0 108*2afea729SLiao Chunyu %6 = insertelement <2 x i32> %5, i32 %2, i32 1 109*2afea729SLiao Chunyu ret <2 x i32> %6 110*2afea729SLiao Chunyu} 111*2afea729SLiao Chunyu 112*2afea729SLiao Chunyudefine i32 @lh_rr(i16* %a, i32 %b) { 113*2afea729SLiao Chunyu; CHECK-LABEL: lh_rr: 114*2afea729SLiao Chunyu; CHECK: # %bb.0: 115*2afea729SLiao Chunyu; CHECK-NEXT: slli a1, a1, 1 116*2afea729SLiao Chunyu; CHECK-NEXT: cv.lh a0, a1(a0) 117*2afea729SLiao Chunyu; CHECK-NEXT: ret 118*2afea729SLiao Chunyu %1 = getelementptr i16, i16* %a, i32 %b 119*2afea729SLiao Chunyu %2 = load i16, i16* %1 120*2afea729SLiao Chunyu %3 = sext i16 %2 to i32 121*2afea729SLiao Chunyu ret i32 %3 122*2afea729SLiao Chunyu} 123*2afea729SLiao Chunyu 124*2afea729SLiao Chunyudefine <2 x i32> @lhu_ri_inc(i16* %a) { 125*2afea729SLiao Chunyu; CHECK-LABEL: lhu_ri_inc: 126*2afea729SLiao Chunyu; CHECK: # %bb.0: 127*2afea729SLiao Chunyu; CHECK-NEXT: cv.lhu a1, (a0), 84 128*2afea729SLiao Chunyu; CHECK-NEXT: ret 129*2afea729SLiao Chunyu %1 = load i16, i16* %a 130*2afea729SLiao Chunyu %2 = zext i16 %1 to i32 131*2afea729SLiao Chunyu %3 = getelementptr i16, i16* %a, i32 42 132*2afea729SLiao Chunyu %4 = ptrtoint i16* %3 to i32 133*2afea729SLiao Chunyu %5 = insertelement <2 x i32> undef, i32 %4, i32 0 134*2afea729SLiao Chunyu %6 = insertelement <2 x i32> %5, i32 %2, i32 1 135*2afea729SLiao Chunyu ret <2 x i32> %6 136*2afea729SLiao Chunyu} 137*2afea729SLiao Chunyu 138*2afea729SLiao Chunyudefine <2 x i32> @lhu_rr_inc(i16* %a, i32 %b) { 139*2afea729SLiao Chunyu; CHECK-LABEL: lhu_rr_inc: 140*2afea729SLiao Chunyu; CHECK: # %bb.0: 141*2afea729SLiao Chunyu; CHECK-NEXT: slli a1, a1, 1 142*2afea729SLiao Chunyu; CHECK-NEXT: cv.lhu a1, (a0), a1 143*2afea729SLiao Chunyu; CHECK-NEXT: ret 144*2afea729SLiao Chunyu %1 = load i16, i16* %a 145*2afea729SLiao Chunyu %2 = zext i16 %1 to i32 146*2afea729SLiao Chunyu %3 = getelementptr i16, i16* %a, i32 %b 147*2afea729SLiao Chunyu %4 = ptrtoint i16* %3 to i32 148*2afea729SLiao Chunyu %5 = insertelement <2 x i32> undef, i32 %4, i32 0 149*2afea729SLiao Chunyu %6 = insertelement <2 x i32> %5, i32 %2, i32 1 150*2afea729SLiao Chunyu ret <2 x i32> %6 151*2afea729SLiao Chunyu} 152*2afea729SLiao Chunyu 153*2afea729SLiao Chunyudefine i32 @lhu_rr(i16* %a, i32 %b) { 154*2afea729SLiao Chunyu; CHECK-LABEL: lhu_rr: 155*2afea729SLiao Chunyu; CHECK: # %bb.0: 156*2afea729SLiao Chunyu; CHECK-NEXT: slli a1, a1, 1 157*2afea729SLiao Chunyu; CHECK-NEXT: cv.lhu a0, a1(a0) 158*2afea729SLiao Chunyu; CHECK-NEXT: ret 159*2afea729SLiao Chunyu %1 = getelementptr i16, i16* %a, i32 %b 160*2afea729SLiao Chunyu %2 = load i16, i16* %1 161*2afea729SLiao Chunyu %3 = zext i16 %2 to i32 162*2afea729SLiao Chunyu ret i32 %3 163*2afea729SLiao Chunyu} 164*2afea729SLiao Chunyu 165*2afea729SLiao Chunyudefine <2 x i32> @lw_ri_inc(i32* %a) { 166*2afea729SLiao Chunyu; CHECK-LABEL: lw_ri_inc: 167*2afea729SLiao Chunyu; CHECK: # %bb.0: 168*2afea729SLiao Chunyu; CHECK-NEXT: cv.lw a1, (a0), 168 169*2afea729SLiao Chunyu; CHECK-NEXT: ret 170*2afea729SLiao Chunyu %1 = load i32, i32* %a 171*2afea729SLiao Chunyu %2 = getelementptr i32, i32* %a, i32 42 172*2afea729SLiao Chunyu %3 = ptrtoint i32* %2 to i32 173*2afea729SLiao Chunyu %4 = insertelement <2 x i32> undef, i32 %3, i32 0 174*2afea729SLiao Chunyu %5 = insertelement <2 x i32> %4, i32 %1, i32 1 175*2afea729SLiao Chunyu ret <2 x i32> %5 176*2afea729SLiao Chunyu} 177*2afea729SLiao Chunyu 178*2afea729SLiao Chunyudefine <2 x i32> @lw_rr_inc(i32* %a, i32 %b) { 179*2afea729SLiao Chunyu; CHECK-LABEL: lw_rr_inc: 180*2afea729SLiao Chunyu; CHECK: # %bb.0: 181*2afea729SLiao Chunyu; CHECK-NEXT: slli a1, a1, 2 182*2afea729SLiao Chunyu; CHECK-NEXT: cv.lw a1, (a0), a1 183*2afea729SLiao Chunyu; CHECK-NEXT: ret 184*2afea729SLiao Chunyu %1 = load i32, i32* %a 185*2afea729SLiao Chunyu %2 = getelementptr i32, i32* %a, i32 %b 186*2afea729SLiao Chunyu %3 = ptrtoint i32* %2 to i32 187*2afea729SLiao Chunyu %4 = insertelement <2 x i32> undef, i32 %3, i32 0 188*2afea729SLiao Chunyu %5 = insertelement <2 x i32> %4, i32 %1, i32 1 189*2afea729SLiao Chunyu ret <2 x i32> %5 190*2afea729SLiao Chunyu} 191*2afea729SLiao Chunyu 192*2afea729SLiao Chunyudefine i32 @lw_rr(i32* %a, i32 %b) { 193*2afea729SLiao Chunyu; CHECK-LABEL: lw_rr: 194*2afea729SLiao Chunyu; CHECK: # %bb.0: 195*2afea729SLiao Chunyu; CHECK-NEXT: slli a1, a1, 2 196*2afea729SLiao Chunyu; CHECK-NEXT: cv.lw a0, a1(a0) 197*2afea729SLiao Chunyu; CHECK-NEXT: ret 198*2afea729SLiao Chunyu %1 = getelementptr i32, i32* %a, i32 %b 199*2afea729SLiao Chunyu %2 = load i32, i32* %1 200*2afea729SLiao Chunyu ret i32 %2 201*2afea729SLiao Chunyu} 202*2afea729SLiao Chunyu 203*2afea729SLiao Chunyudefine i8* @sb_ri_inc(i8* %a, i8 %b) { 204*2afea729SLiao Chunyu; CHECK-LABEL: sb_ri_inc: 205*2afea729SLiao Chunyu; CHECK: # %bb.0: 206*2afea729SLiao Chunyu; CHECK-NEXT: cv.sb a1, (a0), 42 207*2afea729SLiao Chunyu; CHECK-NEXT: ret 208*2afea729SLiao Chunyu store i8 %b, i8* %a 209*2afea729SLiao Chunyu %1 = getelementptr i8, i8* %a, i32 42 210*2afea729SLiao Chunyu ret i8* %1 211*2afea729SLiao Chunyu} 212*2afea729SLiao Chunyu 213*2afea729SLiao Chunyudefine i8* @sb_rr_inc(i8* %a, i8 %b, i32 %c) { 214*2afea729SLiao Chunyu; CHECK-LABEL: sb_rr_inc: 215*2afea729SLiao Chunyu; CHECK: # %bb.0: 216*2afea729SLiao Chunyu; CHECK-NEXT: cv.sb a1, (a0), a2 217*2afea729SLiao Chunyu; CHECK-NEXT: ret 218*2afea729SLiao Chunyu store i8 %b, i8* %a 219*2afea729SLiao Chunyu %1 = getelementptr i8, i8* %a, i32 %c 220*2afea729SLiao Chunyu ret i8* %1 221*2afea729SLiao Chunyu} 222*2afea729SLiao Chunyu 223*2afea729SLiao Chunyudefine void @sb_rr(i8* %a, i8 %b, i32 %c) { 224*2afea729SLiao Chunyu; CHECK-LABEL: sb_rr: 225*2afea729SLiao Chunyu; CHECK: # %bb.0: 226*2afea729SLiao Chunyu; CHECK-NEXT: cv.sb a1, a2(a0) 227*2afea729SLiao Chunyu; CHECK-NEXT: ret 228*2afea729SLiao Chunyu %1 = getelementptr i8, i8* %a, i32 %c 229*2afea729SLiao Chunyu store i8 %b, i8* %1 230*2afea729SLiao Chunyu ret void 231*2afea729SLiao Chunyu} 232*2afea729SLiao Chunyu 233*2afea729SLiao Chunyudefine i16* @sh_ri_inc(i16* %a, i16 %b) { 234*2afea729SLiao Chunyu; CHECK-LABEL: sh_ri_inc: 235*2afea729SLiao Chunyu; CHECK: # %bb.0: 236*2afea729SLiao Chunyu; CHECK-NEXT: cv.sh a1, (a0), 84 237*2afea729SLiao Chunyu; CHECK-NEXT: ret 238*2afea729SLiao Chunyu store i16 %b, i16* %a 239*2afea729SLiao Chunyu %1 = getelementptr i16, i16* %a, i32 42 240*2afea729SLiao Chunyu ret i16* %1 241*2afea729SLiao Chunyu} 242*2afea729SLiao Chunyu 243*2afea729SLiao Chunyudefine i16* @sh_rr_inc(i16* %a, i16 %b, i32 %c) { 244*2afea729SLiao Chunyu; CHECK-LABEL: sh_rr_inc: 245*2afea729SLiao Chunyu; CHECK: # %bb.0: 246*2afea729SLiao Chunyu; CHECK-NEXT: slli a2, a2, 1 247*2afea729SLiao Chunyu; CHECK-NEXT: cv.sh a1, (a0), a2 248*2afea729SLiao Chunyu; CHECK-NEXT: ret 249*2afea729SLiao Chunyu store i16 %b, i16* %a 250*2afea729SLiao Chunyu %1 = getelementptr i16, i16* %a, i32 %c 251*2afea729SLiao Chunyu ret i16* %1 252*2afea729SLiao Chunyu} 253*2afea729SLiao Chunyu 254*2afea729SLiao Chunyudefine void @sh_rr(i16* %a, i16 %b, i32 %c) { 255*2afea729SLiao Chunyu; CHECK-LABEL: sh_rr: 256*2afea729SLiao Chunyu; CHECK: # %bb.0: 257*2afea729SLiao Chunyu; CHECK-NEXT: slli a2, a2, 1 258*2afea729SLiao Chunyu; CHECK-NEXT: cv.sh a1, a2(a0) 259*2afea729SLiao Chunyu; CHECK-NEXT: ret 260*2afea729SLiao Chunyu %1 = getelementptr i16, i16* %a, i32 %c 261*2afea729SLiao Chunyu store i16 %b, i16* %1 262*2afea729SLiao Chunyu ret void 263*2afea729SLiao Chunyu} 264*2afea729SLiao Chunyu 265*2afea729SLiao Chunyudefine i32* @sw_ri_inc(i32* %a, i32 %b) { 266*2afea729SLiao Chunyu; CHECK-LABEL: sw_ri_inc: 267*2afea729SLiao Chunyu; CHECK: # %bb.0: 268*2afea729SLiao Chunyu; CHECK-NEXT: cv.sw a1, (a0), 168 269*2afea729SLiao Chunyu; CHECK-NEXT: ret 270*2afea729SLiao Chunyu store i32 %b, i32* %a 271*2afea729SLiao Chunyu %1 = getelementptr i32, i32* %a, i32 42 272*2afea729SLiao Chunyu ret i32* %1 273*2afea729SLiao Chunyu} 274*2afea729SLiao Chunyu 275*2afea729SLiao Chunyudefine i32* @sw_rr_inc(i32* %a, i32 %b, i32 %c) { 276*2afea729SLiao Chunyu; CHECK-LABEL: sw_rr_inc: 277*2afea729SLiao Chunyu; CHECK: # %bb.0: 278*2afea729SLiao Chunyu; CHECK-NEXT: slli a2, a2, 2 279*2afea729SLiao Chunyu; CHECK-NEXT: cv.sw a1, (a0), a2 280*2afea729SLiao Chunyu; CHECK-NEXT: ret 281*2afea729SLiao Chunyu store i32 %b, i32* %a 282*2afea729SLiao Chunyu %1 = getelementptr i32, i32* %a, i32 %c 283*2afea729SLiao Chunyu ret i32* %1 284*2afea729SLiao Chunyu} 285*2afea729SLiao Chunyu 286*2afea729SLiao Chunyudefine void @sw_rr(i32* %a, i32 %b, i32 %c) { 287*2afea729SLiao Chunyu; CHECK-LABEL: sw_rr: 288*2afea729SLiao Chunyu; CHECK: # %bb.0: 289*2afea729SLiao Chunyu; CHECK-NEXT: slli a2, a2, 2 290*2afea729SLiao Chunyu; CHECK-NEXT: cv.sw a1, a2(a0) 291*2afea729SLiao Chunyu; CHECK-NEXT: ret 292*2afea729SLiao Chunyu %1 = getelementptr i32, i32* %a, i32 %c 293*2afea729SLiao Chunyu store i32 %b, i32* %1 294*2afea729SLiao Chunyu ret void 295*2afea729SLiao Chunyu} 296