Skip to content

Commit 766e645

Browse files
committed
[SROA] NFC: Precommit test for pull/77678
Change-Id: I6b2346301f9bd840a0adceba4a0d03e9932af245
1 parent df1e01b commit 766e645

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed

llvm/test/Transforms/SROA/vector-promotion.ll

+168
Original file line numberDiff line numberDiff line change
@@ -1227,6 +1227,174 @@ define void @swap-15bytes(ptr %x, ptr %y) {
12271227
ret void
12281228
}
12291229

1230+
define <4 x i32> @ptrLoadStoreTys(ptr %init, i32 %val2) {
1231+
; CHECK-LABEL: @ptrLoadStoreTys(
1232+
; CHECK-NEXT: [[VAL0:%.*]] = load ptr, ptr [[INIT:%.*]], align 8
1233+
; CHECK-NEXT: [[OBJ:%.*]] = alloca <4 x i32>, align 16
1234+
; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr [[OBJ]], align 16
1235+
; CHECK-NEXT: store ptr [[VAL0]], ptr [[OBJ]], align 16
1236+
; CHECK-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8
1237+
; CHECK-NEXT: store i32 [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8
1238+
; CHECK-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12
1239+
; CHECK-NEXT: store i32 131072, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4
1240+
; CHECK-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x i32>, ptr [[OBJ]], align 16
1241+
; CHECK-NEXT: ret <4 x i32> [[OBJ_0_SROAVAL]]
1242+
;
1243+
; DEBUG-LABEL: @ptrLoadStoreTys(
1244+
; DEBUG-NEXT: [[VAL0:%.*]] = load ptr, ptr [[INIT:%.*]], align 8, !dbg [[DBG492:![0-9]+]]
1245+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr [[VAL0]], metadata [[META487:![0-9]+]], metadata !DIExpression()), !dbg [[DBG492]]
1246+
; DEBUG-NEXT: [[OBJ:%.*]] = alloca <4 x i32>, align 16, !dbg [[DBG493:![0-9]+]]
1247+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr [[OBJ]], metadata [[META488:![0-9]+]], metadata !DIExpression()), !dbg [[DBG493]]
1248+
; DEBUG-NEXT: store <4 x i32> zeroinitializer, ptr [[OBJ]], align 16, !dbg [[DBG494:![0-9]+]]
1249+
; DEBUG-NEXT: store ptr [[VAL0]], ptr [[OBJ]], align 16, !dbg [[DBG495:![0-9]+]]
1250+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META489:![0-9]+]], metadata !DIExpression()), !dbg [[DBG496:![0-9]+]]
1251+
; DEBUG-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8, !dbg [[DBG497:![0-9]+]]
1252+
; DEBUG-NEXT: store i32 [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8, !dbg [[DBG497]]
1253+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META490:![0-9]+]], metadata !DIExpression()), !dbg [[DBG498:![0-9]+]]
1254+
; DEBUG-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12, !dbg [[DBG499:![0-9]+]]
1255+
; DEBUG-NEXT: store i32 131072, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4, !dbg [[DBG499]]
1256+
; DEBUG-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x i32>, ptr [[OBJ]], align 16, !dbg [[DBG500:![0-9]+]]
1257+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata <4 x i32> [[OBJ_0_SROAVAL]], metadata [[META491:![0-9]+]], metadata !DIExpression()), !dbg [[DBG500]]
1258+
; DEBUG-NEXT: ret <4 x i32> [[OBJ_0_SROAVAL]], !dbg [[DBG501:![0-9]+]]
1259+
;
1260+
%val0 = load ptr, ptr %init, align 8
1261+
%obj = alloca <4 x i32>, align 16
1262+
store <4 x i32> zeroinitializer, ptr %obj, align 16
1263+
store ptr %val0, ptr %obj, align 8
1264+
%ptr2 = getelementptr inbounds i8, ptr %obj, i64 8
1265+
store i32 %val2, ptr %ptr2, align 4
1266+
%ptr3 = getelementptr inbounds i8, ptr %obj, i64 12
1267+
store i32 131072, ptr %ptr3, align 4
1268+
%sroaval = load <4 x i32>, ptr %obj, align 16
1269+
ret <4 x i32> %sroaval
1270+
}
1271+
1272+
define <4 x float> @ptrLoadStoreTysFloat(ptr %init, float %val2) {
1273+
; CHECK-LABEL: @ptrLoadStoreTysFloat(
1274+
; CHECK-NEXT: [[VAL0:%.*]] = load ptr, ptr [[INIT:%.*]], align 8
1275+
; CHECK-NEXT: [[OBJ:%.*]] = alloca <4 x float>, align 16
1276+
; CHECK-NEXT: store <4 x float> zeroinitializer, ptr [[OBJ]], align 16
1277+
; CHECK-NEXT: store ptr [[VAL0]], ptr [[OBJ]], align 16
1278+
; CHECK-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8
1279+
; CHECK-NEXT: store float [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8
1280+
; CHECK-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12
1281+
; CHECK-NEXT: store float 1.310720e+05, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4
1282+
; CHECK-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x float>, ptr [[OBJ]], align 16
1283+
; CHECK-NEXT: ret <4 x float> [[OBJ_0_SROAVAL]]
1284+
;
1285+
; DEBUG-LABEL: @ptrLoadStoreTysFloat(
1286+
; DEBUG-NEXT: [[VAL0:%.*]] = load ptr, ptr [[INIT:%.*]], align 8, !dbg [[DBG509:![0-9]+]]
1287+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr [[VAL0]], metadata [[META504:![0-9]+]], metadata !DIExpression()), !dbg [[DBG509]]
1288+
; DEBUG-NEXT: [[OBJ:%.*]] = alloca <4 x float>, align 16, !dbg [[DBG510:![0-9]+]]
1289+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr [[OBJ]], metadata [[META505:![0-9]+]], metadata !DIExpression()), !dbg [[DBG510]]
1290+
; DEBUG-NEXT: store <4 x float> zeroinitializer, ptr [[OBJ]], align 16, !dbg [[DBG511:![0-9]+]]
1291+
; DEBUG-NEXT: store ptr [[VAL0]], ptr [[OBJ]], align 16, !dbg [[DBG512:![0-9]+]]
1292+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META506:![0-9]+]], metadata !DIExpression()), !dbg [[DBG513:![0-9]+]]
1293+
; DEBUG-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8, !dbg [[DBG514:![0-9]+]]
1294+
; DEBUG-NEXT: store float [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8, !dbg [[DBG514]]
1295+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META507:![0-9]+]], metadata !DIExpression()), !dbg [[DBG515:![0-9]+]]
1296+
; DEBUG-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12, !dbg [[DBG516:![0-9]+]]
1297+
; DEBUG-NEXT: store float 1.310720e+05, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4, !dbg [[DBG516]]
1298+
; DEBUG-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x float>, ptr [[OBJ]], align 16, !dbg [[DBG517:![0-9]+]]
1299+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata <4 x float> [[OBJ_0_SROAVAL]], metadata [[META508:![0-9]+]], metadata !DIExpression()), !dbg [[DBG517]]
1300+
; DEBUG-NEXT: ret <4 x float> [[OBJ_0_SROAVAL]], !dbg [[DBG518:![0-9]+]]
1301+
;
1302+
%val0 = load ptr, ptr %init, align 8
1303+
%obj = alloca <4 x float>, align 16
1304+
store <4 x float> zeroinitializer, ptr %obj, align 16
1305+
store ptr %val0, ptr %obj, align 8
1306+
%ptr2 = getelementptr inbounds i8, ptr %obj, i64 8
1307+
store float %val2, ptr %ptr2, align 4
1308+
%ptr3 = getelementptr inbounds i8, ptr %obj, i64 12
1309+
store float 131072.0, ptr %ptr3, align 4
1310+
%sroaval = load <4 x float>, ptr %obj, align 16
1311+
ret <4 x float> %sroaval
1312+
}
1313+
1314+
define <4 x i32> @ptrLoadStoreTysAS3(ptr %init, i32 %val2) {
1315+
; CHECK-LABEL: @ptrLoadStoreTysAS3(
1316+
; CHECK-NEXT: [[VAL0:%.*]] = load ptr addrspace(3), ptr [[INIT:%.*]], align 8
1317+
; CHECK-NEXT: [[OBJ:%.*]] = alloca <4 x i32>, align 16
1318+
; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr [[OBJ]], align 16
1319+
; CHECK-NEXT: store ptr addrspace(3) [[VAL0]], ptr [[OBJ]], align 16
1320+
; CHECK-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8
1321+
; CHECK-NEXT: store i32 [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8
1322+
; CHECK-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12
1323+
; CHECK-NEXT: store i32 131072, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4
1324+
; CHECK-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x i32>, ptr [[OBJ]], align 16
1325+
; CHECK-NEXT: ret <4 x i32> [[OBJ_0_SROAVAL]]
1326+
;
1327+
; DEBUG-LABEL: @ptrLoadStoreTysAS3(
1328+
; DEBUG-NEXT: [[VAL0:%.*]] = load ptr addrspace(3), ptr [[INIT:%.*]], align 8, !dbg [[DBG526:![0-9]+]]
1329+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr addrspace(3) [[VAL0]], metadata [[META521:![0-9]+]], metadata !DIExpression()), !dbg [[DBG526]]
1330+
; DEBUG-NEXT: [[OBJ:%.*]] = alloca <4 x i32>, align 16, !dbg [[DBG527:![0-9]+]]
1331+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr [[OBJ]], metadata [[META522:![0-9]+]], metadata !DIExpression()), !dbg [[DBG527]]
1332+
; DEBUG-NEXT: store <4 x i32> zeroinitializer, ptr [[OBJ]], align 16, !dbg [[DBG528:![0-9]+]]
1333+
; DEBUG-NEXT: store ptr addrspace(3) [[VAL0]], ptr [[OBJ]], align 16, !dbg [[DBG529:![0-9]+]]
1334+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META523:![0-9]+]], metadata !DIExpression()), !dbg [[DBG530:![0-9]+]]
1335+
; DEBUG-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8, !dbg [[DBG531:![0-9]+]]
1336+
; DEBUG-NEXT: store i32 [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8, !dbg [[DBG531]]
1337+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META524:![0-9]+]], metadata !DIExpression()), !dbg [[DBG532:![0-9]+]]
1338+
; DEBUG-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12, !dbg [[DBG533:![0-9]+]]
1339+
; DEBUG-NEXT: store i32 131072, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4, !dbg [[DBG533]]
1340+
; DEBUG-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x i32>, ptr [[OBJ]], align 16, !dbg [[DBG534:![0-9]+]]
1341+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata <4 x i32> [[OBJ_0_SROAVAL]], metadata [[META525:![0-9]+]], metadata !DIExpression()), !dbg [[DBG534]]
1342+
; DEBUG-NEXT: ret <4 x i32> [[OBJ_0_SROAVAL]], !dbg [[DBG535:![0-9]+]]
1343+
;
1344+
%val0 = load ptr addrspace(3), ptr %init, align 8
1345+
%obj = alloca <4 x i32>, align 16
1346+
store <4 x i32> zeroinitializer, ptr %obj, align 16
1347+
store ptr addrspace(3) %val0, ptr %obj, align 8
1348+
%ptr2 = getelementptr inbounds i8, ptr %obj, i64 8
1349+
store i32 %val2, ptr %ptr2, align 4
1350+
%ptr3 = getelementptr inbounds i8, ptr %obj, i64 12
1351+
store i32 131072, ptr %ptr3, align 4
1352+
%sroaval = load <4 x i32>, ptr %obj, align 16
1353+
ret <4 x i32> %sroaval
1354+
}
1355+
1356+
define <4 x ptr> @ptrLoadStoreTysPtr(ptr %init, i64 %val2) {
1357+
; CHECK-LABEL: @ptrLoadStoreTysPtr(
1358+
; CHECK-NEXT: [[VAL0:%.*]] = load ptr, ptr [[INIT:%.*]], align 8
1359+
; CHECK-NEXT: [[OBJ:%.*]] = alloca <4 x ptr>, align 16
1360+
; CHECK-NEXT: store <4 x ptr> zeroinitializer, ptr [[OBJ]], align 16
1361+
; CHECK-NEXT: store ptr [[VAL0]], ptr [[OBJ]], align 16
1362+
; CHECK-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8
1363+
; CHECK-NEXT: store i64 [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8
1364+
; CHECK-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12
1365+
; CHECK-NEXT: store i64 131072, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4
1366+
; CHECK-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x ptr>, ptr [[OBJ]], align 16
1367+
; CHECK-NEXT: ret <4 x ptr> [[OBJ_0_SROAVAL]]
1368+
;
1369+
; DEBUG-LABEL: @ptrLoadStoreTysPtr(
1370+
; DEBUG-NEXT: [[VAL0:%.*]] = load ptr, ptr [[INIT:%.*]], align 8, !dbg [[DBG543:![0-9]+]]
1371+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr [[VAL0]], metadata [[META538:![0-9]+]], metadata !DIExpression()), !dbg [[DBG543]]
1372+
; DEBUG-NEXT: [[OBJ:%.*]] = alloca <4 x ptr>, align 16, !dbg [[DBG544:![0-9]+]]
1373+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr [[OBJ]], metadata [[META539:![0-9]+]], metadata !DIExpression()), !dbg [[DBG544]]
1374+
; DEBUG-NEXT: store <4 x ptr> zeroinitializer, ptr [[OBJ]], align 16, !dbg [[DBG545:![0-9]+]]
1375+
; DEBUG-NEXT: store ptr [[VAL0]], ptr [[OBJ]], align 16, !dbg [[DBG546:![0-9]+]]
1376+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META540:![0-9]+]], metadata !DIExpression()), !dbg [[DBG547:![0-9]+]]
1377+
; DEBUG-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8, !dbg [[DBG548:![0-9]+]]
1378+
; DEBUG-NEXT: store i64 [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8, !dbg [[DBG548]]
1379+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META541:![0-9]+]], metadata !DIExpression()), !dbg [[DBG549:![0-9]+]]
1380+
; DEBUG-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12, !dbg [[DBG550:![0-9]+]]
1381+
; DEBUG-NEXT: store i64 131072, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4, !dbg [[DBG550]]
1382+
; DEBUG-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x ptr>, ptr [[OBJ]], align 16, !dbg [[DBG551:![0-9]+]]
1383+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata <4 x ptr> [[OBJ_0_SROAVAL]], metadata [[META542:![0-9]+]], metadata !DIExpression()), !dbg [[DBG551]]
1384+
; DEBUG-NEXT: ret <4 x ptr> [[OBJ_0_SROAVAL]], !dbg [[DBG552:![0-9]+]]
1385+
;
1386+
%val0 = load ptr, ptr %init, align 8
1387+
%obj = alloca <4 x ptr>, align 16
1388+
store <4 x ptr> zeroinitializer, ptr %obj, align 16
1389+
store ptr %val0, ptr %obj, align 8
1390+
%ptr2 = getelementptr inbounds i32, ptr %obj, i64 2
1391+
store i64 %val2, ptr %ptr2, align 4
1392+
%ptr3 = getelementptr inbounds i32, ptr %obj, i64 3
1393+
store i64 131072, ptr %ptr3, align 4
1394+
%sroaval = load <4 x ptr>, ptr %obj, align 16
1395+
ret <4 x ptr> %sroaval
1396+
}
1397+
12301398
declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
12311399
declare void @llvm.lifetime.end.p0(i64, ptr)
12321400
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:

0 commit comments

Comments
 (0)