Skip to content

Commit e93bddb

Browse files
committed
[AArch64][GlobalISel] Precommit indexed sextload/zextload tests.
1 parent f48dab5 commit e93bddb

File tree

1 file changed

+265
-0
lines changed

1 file changed

+265
-0
lines changed

llvm/test/CodeGen/AArch64/arm64-indexed-memory.ll

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,3 +1127,268 @@ define ptr @postidx_clobber(ptr %addr) nounwind noinline ssp {
11271127
%newaddr = getelementptr i64, ptr %addr, i32 1
11281128
ret ptr %newaddr
11291129
}
1130+
1131+
define ptr @preidx32_sb(ptr %src, ptr %out) {
1132+
; CHECK64-LABEL: preidx32_sb:
1133+
; CHECK64: ; %bb.0:
1134+
; CHECK64-NEXT: ldrsb w8, [x0, #1]!
1135+
; CHECK64-NEXT: str w8, [x1]
1136+
; CHECK64-NEXT: ret
1137+
;
1138+
; GISEL-LABEL: preidx32_sb:
1139+
; GISEL: ; %bb.0:
1140+
; GISEL-NEXT: add x8, x0, #1
1141+
; GISEL-NEXT: ldrsb w9, [x0, #1]
1142+
; GISEL-NEXT: mov x0, x8
1143+
; GISEL-NEXT: str w9, [x1]
1144+
; GISEL-NEXT: ret
1145+
;
1146+
; CHECK32-LABEL: preidx32_sb:
1147+
; CHECK32: ; %bb.0:
1148+
; CHECK32-NEXT: ldrsb w8, [x0, #1]!
1149+
; CHECK32-NEXT: str w8, [x1]
1150+
; CHECK32-NEXT: ret
1151+
%ptr = getelementptr inbounds i8, ptr %src, i64 1
1152+
%tmp = load i8, ptr %ptr, align 1
1153+
%sext = sext i8 %tmp to i32
1154+
store i32 %sext, ptr %out, align 4
1155+
ret ptr %ptr
1156+
}
1157+
1158+
define ptr @preidx32_sh(ptr %src, ptr %out) {
1159+
; CHECK64-LABEL: preidx32_sh:
1160+
; CHECK64: ; %bb.0:
1161+
; CHECK64-NEXT: ldrsh w8, [x0, #2]!
1162+
; CHECK64-NEXT: str w8, [x1]
1163+
; CHECK64-NEXT: ret
1164+
;
1165+
; GISEL-LABEL: preidx32_sh:
1166+
; GISEL: ; %bb.0:
1167+
; GISEL-NEXT: add x8, x0, #2
1168+
; GISEL-NEXT: ldrsh w9, [x0, #2]
1169+
; GISEL-NEXT: mov x0, x8
1170+
; GISEL-NEXT: str w9, [x1]
1171+
; GISEL-NEXT: ret
1172+
;
1173+
; CHECK32-LABEL: preidx32_sh:
1174+
; CHECK32: ; %bb.0:
1175+
; CHECK32-NEXT: ldrsh w8, [x0, #2]!
1176+
; CHECK32-NEXT: str w8, [x1]
1177+
; CHECK32-NEXT: ret
1178+
%ptr = getelementptr inbounds i16, ptr %src, i64 1
1179+
%tmp = load i16, ptr %ptr, align 2
1180+
%sext = sext i16 %tmp to i32
1181+
store i32 %sext, ptr %out, align 4
1182+
ret ptr %ptr
1183+
}
1184+
1185+
define ptr @preidx64_sb(ptr %src, ptr %out) {
1186+
; CHECK64-LABEL: preidx64_sb:
1187+
; CHECK64: ; %bb.0:
1188+
; CHECK64-NEXT: ldrsb x8, [x0, #1]!
1189+
; CHECK64-NEXT: str x8, [x1]
1190+
; CHECK64-NEXT: ret
1191+
;
1192+
; GISEL-LABEL: preidx64_sb:
1193+
; GISEL: ; %bb.0:
1194+
; GISEL-NEXT: add x8, x0, #1
1195+
; GISEL-NEXT: ldrsb x9, [x0, #1]
1196+
; GISEL-NEXT: mov x0, x8
1197+
; GISEL-NEXT: str x9, [x1]
1198+
; GISEL-NEXT: ret
1199+
;
1200+
; CHECK32-LABEL: preidx64_sb:
1201+
; CHECK32: ; %bb.0:
1202+
; CHECK32-NEXT: ldrsb x8, [x0, #1]!
1203+
; CHECK32-NEXT: str x8, [x1]
1204+
; CHECK32-NEXT: ret
1205+
%ptr = getelementptr inbounds i8, ptr %src, i64 1
1206+
%tmp = load i8, ptr %ptr, align 1
1207+
%sext = sext i8 %tmp to i64
1208+
store i64 %sext, ptr %out, align 8
1209+
ret ptr %ptr
1210+
}
1211+
1212+
define ptr @preidx64_sh(ptr %src, ptr %out) {
1213+
; CHECK64-LABEL: preidx64_sh:
1214+
; CHECK64: ; %bb.0:
1215+
; CHECK64-NEXT: ldrsh x8, [x0, #2]!
1216+
; CHECK64-NEXT: str x8, [x1]
1217+
; CHECK64-NEXT: ret
1218+
;
1219+
; GISEL-LABEL: preidx64_sh:
1220+
; GISEL: ; %bb.0:
1221+
; GISEL-NEXT: add x8, x0, #2
1222+
; GISEL-NEXT: ldrsh x9, [x0, #2]
1223+
; GISEL-NEXT: mov x0, x8
1224+
; GISEL-NEXT: str x9, [x1]
1225+
; GISEL-NEXT: ret
1226+
;
1227+
; CHECK32-LABEL: preidx64_sh:
1228+
; CHECK32: ; %bb.0:
1229+
; CHECK32-NEXT: ldrsh x8, [x0, #2]!
1230+
; CHECK32-NEXT: str x8, [x1]
1231+
; CHECK32-NEXT: ret
1232+
%ptr = getelementptr inbounds i16, ptr %src, i64 1
1233+
%tmp = load i16, ptr %ptr, align 2
1234+
%sext = sext i16 %tmp to i64
1235+
store i64 %sext, ptr %out, align 8
1236+
ret ptr %ptr
1237+
}
1238+
1239+
define ptr @preidx64_sw(ptr %src, ptr %out) {
1240+
; CHECK64-LABEL: preidx64_sw:
1241+
; CHECK64: ; %bb.0:
1242+
; CHECK64-NEXT: ldrsw x8, [x0, #4]!
1243+
; CHECK64-NEXT: str x8, [x1]
1244+
; CHECK64-NEXT: ret
1245+
;
1246+
; GISEL-LABEL: preidx64_sw:
1247+
; GISEL: ; %bb.0:
1248+
; GISEL-NEXT: add x8, x0, #4
1249+
; GISEL-NEXT: ldrsw x9, [x0, #4]
1250+
; GISEL-NEXT: mov x0, x8
1251+
; GISEL-NEXT: str x9, [x1]
1252+
; GISEL-NEXT: ret
1253+
;
1254+
; CHECK32-LABEL: preidx64_sw:
1255+
; CHECK32: ; %bb.0:
1256+
; CHECK32-NEXT: ldrsw x8, [x0, #4]!
1257+
; CHECK32-NEXT: str x8, [x1]
1258+
; CHECK32-NEXT: ret
1259+
%ptr = getelementptr inbounds i32, ptr %src, i64 1
1260+
%tmp = load i32, ptr %ptr, align 2
1261+
%sext = sext i32 %tmp to i64
1262+
store i64 %sext, ptr %out, align 8
1263+
ret ptr %ptr
1264+
}
1265+
1266+
define ptr @postidx32_sb(ptr %src, ptr %out) {
1267+
; CHECK64-LABEL: postidx32_sb:
1268+
; CHECK64: ; %bb.0:
1269+
; CHECK64-NEXT: ldrsb w8, [x0], #1
1270+
; CHECK64-NEXT: str w8, [x1]
1271+
; CHECK64-NEXT: ret
1272+
;
1273+
; GISEL-LABEL: postidx32_sb:
1274+
; GISEL: ; %bb.0:
1275+
; GISEL-NEXT: ldrsb w8, [x0]
1276+
; GISEL-NEXT: add x0, x0, #1
1277+
; GISEL-NEXT: str w8, [x1]
1278+
; GISEL-NEXT: ret
1279+
;
1280+
; CHECK32-LABEL: postidx32_sb:
1281+
; CHECK32: ; %bb.0:
1282+
; CHECK32-NEXT: ldrsb w8, [x0], #1
1283+
; CHECK32-NEXT: str w8, [x1]
1284+
; CHECK32-NEXT: ret
1285+
%tmp = load i8, ptr %src, align 1
1286+
%ptr = getelementptr inbounds i8, ptr %src, i64 1
1287+
%sext = sext i8 %tmp to i32
1288+
store i32 %sext, ptr %out, align 4
1289+
ret ptr %ptr
1290+
}
1291+
1292+
define ptr @postidx32_sh(ptr %src, ptr %out) {
1293+
; CHECK64-LABEL: postidx32_sh:
1294+
; CHECK64: ; %bb.0:
1295+
; CHECK64-NEXT: ldrsh w8, [x0], #2
1296+
; CHECK64-NEXT: str w8, [x1]
1297+
; CHECK64-NEXT: ret
1298+
;
1299+
; GISEL-LABEL: postidx32_sh:
1300+
; GISEL: ; %bb.0:
1301+
; GISEL-NEXT: ldrsh w8, [x0]
1302+
; GISEL-NEXT: add x0, x0, #2
1303+
; GISEL-NEXT: str w8, [x1]
1304+
; GISEL-NEXT: ret
1305+
;
1306+
; CHECK32-LABEL: postidx32_sh:
1307+
; CHECK32: ; %bb.0:
1308+
; CHECK32-NEXT: ldrsh w8, [x0], #2
1309+
; CHECK32-NEXT: str w8, [x1]
1310+
; CHECK32-NEXT: ret
1311+
%tmp = load i16, ptr %src, align 2
1312+
%ptr = getelementptr inbounds i16, ptr %src, i64 1
1313+
%sext = sext i16 %tmp to i32
1314+
store i32 %sext, ptr %out, align 4
1315+
ret ptr %ptr
1316+
}
1317+
1318+
define ptr @postidx64_sb(ptr %src, ptr %out) {
1319+
; CHECK64-LABEL: postidx64_sb:
1320+
; CHECK64: ; %bb.0:
1321+
; CHECK64-NEXT: ldrsb x8, [x0], #1
1322+
; CHECK64-NEXT: str x8, [x1]
1323+
; CHECK64-NEXT: ret
1324+
;
1325+
; GISEL-LABEL: postidx64_sb:
1326+
; GISEL: ; %bb.0:
1327+
; GISEL-NEXT: ldrsb x8, [x0]
1328+
; GISEL-NEXT: add x0, x0, #1
1329+
; GISEL-NEXT: str x8, [x1]
1330+
; GISEL-NEXT: ret
1331+
;
1332+
; CHECK32-LABEL: postidx64_sb:
1333+
; CHECK32: ; %bb.0:
1334+
; CHECK32-NEXT: ldrsb x8, [x0], #1
1335+
; CHECK32-NEXT: str x8, [x1]
1336+
; CHECK32-NEXT: ret
1337+
%tmp = load i8, ptr %src, align 1
1338+
%ptr = getelementptr inbounds i8, ptr %src, i64 1
1339+
%sext = sext i8 %tmp to i64
1340+
store i64 %sext, ptr %out, align 8
1341+
ret ptr %ptr
1342+
}
1343+
1344+
define ptr @postidx64_sh(ptr %src, ptr %out) {
1345+
; CHECK64-LABEL: postidx64_sh:
1346+
; CHECK64: ; %bb.0:
1347+
; CHECK64-NEXT: ldrsh x8, [x0], #2
1348+
; CHECK64-NEXT: str x8, [x1]
1349+
; CHECK64-NEXT: ret
1350+
;
1351+
; GISEL-LABEL: postidx64_sh:
1352+
; GISEL: ; %bb.0:
1353+
; GISEL-NEXT: ldrsh x8, [x0]
1354+
; GISEL-NEXT: add x0, x0, #2
1355+
; GISEL-NEXT: str x8, [x1]
1356+
; GISEL-NEXT: ret
1357+
;
1358+
; CHECK32-LABEL: postidx64_sh:
1359+
; CHECK32: ; %bb.0:
1360+
; CHECK32-NEXT: ldrsh x8, [x0], #2
1361+
; CHECK32-NEXT: str x8, [x1]
1362+
; CHECK32-NEXT: ret
1363+
%tmp = load i16, ptr %src, align 2
1364+
%ptr = getelementptr inbounds i16, ptr %src, i64 1
1365+
%sext = sext i16 %tmp to i64
1366+
store i64 %sext, ptr %out, align 8
1367+
ret ptr %ptr
1368+
}
1369+
1370+
define ptr @postidx64_sw(ptr %src, ptr %out) {
1371+
; CHECK64-LABEL: postidx64_sw:
1372+
; CHECK64: ; %bb.0:
1373+
; CHECK64-NEXT: ldrsw x8, [x0], #4
1374+
; CHECK64-NEXT: str x8, [x1]
1375+
; CHECK64-NEXT: ret
1376+
;
1377+
; GISEL-LABEL: postidx64_sw:
1378+
; GISEL: ; %bb.0:
1379+
; GISEL-NEXT: ldrsw x8, [x0]
1380+
; GISEL-NEXT: add x0, x0, #4
1381+
; GISEL-NEXT: str x8, [x1]
1382+
; GISEL-NEXT: ret
1383+
;
1384+
; CHECK32-LABEL: postidx64_sw:
1385+
; CHECK32: ; %bb.0:
1386+
; CHECK32-NEXT: ldrsw x8, [x0], #4
1387+
; CHECK32-NEXT: str x8, [x1]
1388+
; CHECK32-NEXT: ret
1389+
%tmp = load i32, ptr %src, align 4
1390+
%ptr = getelementptr inbounds i32, ptr %src, i64 1
1391+
%sext = sext i32 %tmp to i64
1392+
store i64 %sext, ptr %out, align 8
1393+
ret ptr %ptr
1394+
}

0 commit comments

Comments
 (0)