296 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 -mtriple=riscv32 -mattr=+xcvmem -verify-machineinstrs < %s \3; RUN: | FileCheck %s --check-prefixes=CHECK4 5define <2 x i32> @lb_ri_inc(ptr %a) {6; CHECK-LABEL: lb_ri_inc:7; CHECK: # %bb.0:8; CHECK-NEXT: cv.lb a1, (a0), 429; CHECK-NEXT: ret10 %1 = load i8, ptr %a11 %2 = sext i8 %1 to i3212 %3 = getelementptr i8, ptr %a, i32 4213 %4 = ptrtoint ptr %3 to i3214 %5 = insertelement <2 x i32> poison, i32 %4, i32 015 %6 = insertelement <2 x i32> %5, i32 %2, i32 116 ret <2 x i32> %617}18 19define <2 x i32> @lb_rr_inc(ptr %a, i32 %b) {20; CHECK-LABEL: lb_rr_inc:21; CHECK: # %bb.0:22; CHECK-NEXT: cv.lb a1, (a0), a123; CHECK-NEXT: ret24 %1 = load i8, ptr %a25 %2 = sext i8 %1 to i3226 %3 = getelementptr i8, ptr %a, i32 %b27 %4 = ptrtoint ptr %3 to i3228 %5 = insertelement <2 x i32> poison, i32 %4, i32 029 %6 = insertelement <2 x i32> %5, i32 %2, i32 130 ret <2 x i32> %631}32 33define i32 @lb_rr(ptr %a, i32 %b) {34; CHECK-LABEL: lb_rr:35; CHECK: # %bb.0:36; CHECK-NEXT: cv.lb a0, a1(a0)37; CHECK-NEXT: ret38 %1 = getelementptr i8, ptr %a, i32 %b39 %2 = load i8, ptr %140 %3 = sext i8 %2 to i3241 ret i32 %342}43 44define <2 x i32> @lbu_ri_inc(ptr %a) {45; CHECK-LABEL: lbu_ri_inc:46; CHECK: # %bb.0:47; CHECK-NEXT: cv.lbu a1, (a0), 4248; CHECK-NEXT: ret49 %1 = load i8, ptr %a50 %2 = zext i8 %1 to i3251 %3 = getelementptr i8, ptr %a, i32 4252 %4 = ptrtoint ptr %3 to i3253 %5 = insertelement <2 x i32> poison, i32 %4, i32 054 %6 = insertelement <2 x i32> %5, i32 %2, i32 155 ret <2 x i32> %656}57 58define <2 x i32> @lbu_rr_inc(ptr %a, i32 %b) {59; CHECK-LABEL: lbu_rr_inc:60; CHECK: # %bb.0:61; CHECK-NEXT: cv.lbu a1, (a0), a162; CHECK-NEXT: ret63 %1 = load i8, ptr %a64 %2 = zext i8 %1 to i3265 %3 = getelementptr i8, ptr %a, i32 %b66 %4 = ptrtoint ptr %3 to i3267 %5 = insertelement <2 x i32> poison, i32 %4, i32 068 %6 = insertelement <2 x i32> %5, i32 %2, i32 169 ret <2 x i32> %670}71 72define i32 @lbu_rr(ptr %a, i32 %b) {73; CHECK-LABEL: lbu_rr:74; CHECK: # %bb.0:75; CHECK-NEXT: cv.lbu a0, a1(a0)76; CHECK-NEXT: ret77 %1 = getelementptr i8, ptr %a, i32 %b78 %2 = load i8, ptr %179 %3 = zext i8 %2 to i3280 ret i32 %381}82 83define <2 x i32> @lh_ri_inc(ptr %a) {84; CHECK-LABEL: lh_ri_inc:85; CHECK: # %bb.0:86; CHECK-NEXT: cv.lh a1, (a0), 8487; CHECK-NEXT: ret88 %1 = load i16, ptr %a89 %2 = sext i16 %1 to i3290 %3 = getelementptr i16, ptr %a, i32 4291 %4 = ptrtoint ptr %3 to i3292 %5 = insertelement <2 x i32> poison, i32 %4, i32 093 %6 = insertelement <2 x i32> %5, i32 %2, i32 194 ret <2 x i32> %695}96 97define <2 x i32> @lh_rr_inc(ptr %a, i32 %b) {98; CHECK-LABEL: lh_rr_inc:99; CHECK: # %bb.0:100; CHECK-NEXT: slli a1, a1, 1101; CHECK-NEXT: cv.lh a1, (a0), a1102; CHECK-NEXT: ret103 %1 = load i16, ptr %a104 %2 = sext i16 %1 to i32105 %3 = getelementptr i16, ptr %a, i32 %b106 %4 = ptrtoint ptr %3 to i32107 %5 = insertelement <2 x i32> poison, i32 %4, i32 0108 %6 = insertelement <2 x i32> %5, i32 %2, i32 1109 ret <2 x i32> %6110}111 112define i32 @lh_rr(ptr %a, i32 %b) {113; CHECK-LABEL: lh_rr:114; CHECK: # %bb.0:115; CHECK-NEXT: slli a1, a1, 1116; CHECK-NEXT: cv.lh a0, a1(a0)117; CHECK-NEXT: ret118 %1 = getelementptr i16, ptr %a, i32 %b119 %2 = load i16, ptr %1120 %3 = sext i16 %2 to i32121 ret i32 %3122}123 124define <2 x i32> @lhu_ri_inc(ptr %a) {125; CHECK-LABEL: lhu_ri_inc:126; CHECK: # %bb.0:127; CHECK-NEXT: cv.lhu a1, (a0), 84128; CHECK-NEXT: ret129 %1 = load i16, ptr %a130 %2 = zext i16 %1 to i32131 %3 = getelementptr i16, ptr %a, i32 42132 %4 = ptrtoint ptr %3 to i32133 %5 = insertelement <2 x i32> poison, i32 %4, i32 0134 %6 = insertelement <2 x i32> %5, i32 %2, i32 1135 ret <2 x i32> %6136}137 138define <2 x i32> @lhu_rr_inc(ptr %a, i32 %b) {139; CHECK-LABEL: lhu_rr_inc:140; CHECK: # %bb.0:141; CHECK-NEXT: slli a1, a1, 1142; CHECK-NEXT: cv.lhu a1, (a0), a1143; CHECK-NEXT: ret144 %1 = load i16, ptr %a145 %2 = zext i16 %1 to i32146 %3 = getelementptr i16, ptr %a, i32 %b147 %4 = ptrtoint ptr %3 to i32148 %5 = insertelement <2 x i32> poison, i32 %4, i32 0149 %6 = insertelement <2 x i32> %5, i32 %2, i32 1150 ret <2 x i32> %6151}152 153define i32 @lhu_rr(ptr %a, i32 %b) {154; CHECK-LABEL: lhu_rr:155; CHECK: # %bb.0:156; CHECK-NEXT: slli a1, a1, 1157; CHECK-NEXT: cv.lhu a0, a1(a0)158; CHECK-NEXT: ret159 %1 = getelementptr i16, ptr %a, i32 %b160 %2 = load i16, ptr %1161 %3 = zext i16 %2 to i32162 ret i32 %3163}164 165define <2 x i32> @lw_ri_inc(ptr %a) {166; CHECK-LABEL: lw_ri_inc:167; CHECK: # %bb.0:168; CHECK-NEXT: cv.lw a1, (a0), 168169; CHECK-NEXT: ret170 %1 = load i32, ptr %a171 %2 = getelementptr i32, ptr %a, i32 42172 %3 = ptrtoint ptr %2 to i32173 %4 = insertelement <2 x i32> poison, i32 %3, i32 0174 %5 = insertelement <2 x i32> %4, i32 %1, i32 1175 ret <2 x i32> %5176}177 178define <2 x i32> @lw_rr_inc(ptr %a, i32 %b) {179; CHECK-LABEL: lw_rr_inc:180; CHECK: # %bb.0:181; CHECK-NEXT: slli a1, a1, 2182; CHECK-NEXT: cv.lw a1, (a0), a1183; CHECK-NEXT: ret184 %1 = load i32, ptr %a185 %2 = getelementptr i32, ptr %a, i32 %b186 %3 = ptrtoint ptr %2 to i32187 %4 = insertelement <2 x i32> poison, i32 %3, i32 0188 %5 = insertelement <2 x i32> %4, i32 %1, i32 1189 ret <2 x i32> %5190}191 192define i32 @lw_rr(ptr %a, i32 %b) {193; CHECK-LABEL: lw_rr:194; CHECK: # %bb.0:195; CHECK-NEXT: slli a1, a1, 2196; CHECK-NEXT: cv.lw a0, a1(a0)197; CHECK-NEXT: ret198 %1 = getelementptr i32, ptr %a, i32 %b199 %2 = load i32, ptr %1200 ret i32 %2201}202 203define ptr @sb_ri_inc(ptr %a, i8 %b) {204; CHECK-LABEL: sb_ri_inc:205; CHECK: # %bb.0:206; CHECK-NEXT: cv.sb a1, (a0), 42207; CHECK-NEXT: ret208 store i8 %b, ptr %a209 %1 = getelementptr i8, ptr %a, i32 42210 ret ptr %1211}212 213define ptr @sb_rr_inc(ptr %a, i8 %b, i32 %c) {214; CHECK-LABEL: sb_rr_inc:215; CHECK: # %bb.0:216; CHECK-NEXT: cv.sb a1, (a0), a2217; CHECK-NEXT: ret218 store i8 %b, ptr %a219 %1 = getelementptr i8, ptr %a, i32 %c220 ret ptr %1221}222 223define void @sb_rr(ptr %a, i8 %b, i32 %c) {224; CHECK-LABEL: sb_rr:225; CHECK: # %bb.0:226; CHECK-NEXT: cv.sb a1, a2(a0)227; CHECK-NEXT: ret228 %1 = getelementptr i8, ptr %a, i32 %c229 store i8 %b, ptr %1230 ret void231}232 233define ptr @sh_ri_inc(ptr %a, i16 %b) {234; CHECK-LABEL: sh_ri_inc:235; CHECK: # %bb.0:236; CHECK-NEXT: cv.sh a1, (a0), 84237; CHECK-NEXT: ret238 store i16 %b, ptr %a239 %1 = getelementptr i16, ptr %a, i32 42240 ret ptr %1241}242 243define ptr @sh_rr_inc(ptr %a, i16 %b, i32 %c) {244; CHECK-LABEL: sh_rr_inc:245; CHECK: # %bb.0:246; CHECK-NEXT: slli a2, a2, 1247; CHECK-NEXT: cv.sh a1, (a0), a2248; CHECK-NEXT: ret249 store i16 %b, ptr %a250 %1 = getelementptr i16, ptr %a, i32 %c251 ret ptr %1252}253 254define void @sh_rr(ptr %a, i16 %b, i32 %c) {255; CHECK-LABEL: sh_rr:256; CHECK: # %bb.0:257; CHECK-NEXT: slli a2, a2, 1258; CHECK-NEXT: cv.sh a1, a2(a0)259; CHECK-NEXT: ret260 %1 = getelementptr i16, ptr %a, i32 %c261 store i16 %b, ptr %1262 ret void263}264 265define ptr @sw_ri_inc(ptr %a, i32 %b) {266; CHECK-LABEL: sw_ri_inc:267; CHECK: # %bb.0:268; CHECK-NEXT: cv.sw a1, (a0), 168269; CHECK-NEXT: ret270 store i32 %b, ptr %a271 %1 = getelementptr i32, ptr %a, i32 42272 ret ptr %1273}274 275define ptr @sw_rr_inc(ptr %a, i32 %b, i32 %c) {276; CHECK-LABEL: sw_rr_inc:277; CHECK: # %bb.0:278; CHECK-NEXT: slli a2, a2, 2279; CHECK-NEXT: cv.sw a1, (a0), a2280; CHECK-NEXT: ret281 store i32 %b, ptr %a282 %1 = getelementptr i32, ptr %a, i32 %c283 ret ptr %1284}285 286define void @sw_rr(ptr %a, i32 %b, i32 %c) {287; CHECK-LABEL: sw_rr:288; CHECK: # %bb.0:289; CHECK-NEXT: slli a2, a2, 2290; CHECK-NEXT: cv.sw a1, a2(a0)291; CHECK-NEXT: ret292 %1 = getelementptr i32, ptr %a, i32 %c293 store i32 %b, ptr %1294 ret void295}296