Skip to content

Commit 5640ceb

Browse files
committed
Add additional test variants
Change-Id: Ieac100b303322a2b902a75cd1f27bcb5f1740425
1 parent 0823252 commit 5640ceb

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

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

+80
Original file line numberDiff line numberDiff line change
@@ -1307,6 +1307,86 @@ define <4 x float> @ptrLoadStoreTysFloat(ptr %init, float %val2) {
13071307
ret <4 x float> %sroaval
13081308
}
13091309

1310+
define <4 x i32> @ptrLoadStoreTysAS3(ptr %init, i32 %val2) {
1311+
; CHECK-LABEL: @ptrLoadStoreTysAS3(
1312+
; CHECK-NEXT: [[VAL0:%.*]] = load ptr addrspace(3), ptr [[INIT:%.*]], align 8
1313+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr addrspace(3) [[VAL0]] to i64
1314+
; CHECK-NEXT: [[TMP2:%.*]] = bitcast i64 [[TMP1]] to <2 x i32>
1315+
; CHECK-NEXT: [[OBJ_0_VEC_EXPAND:%.*]] = shufflevector <2 x i32> [[TMP2]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
1316+
; CHECK-NEXT: [[OBJ_0_VECBLEND:%.*]] = select <4 x i1> <i1 true, i1 true, i1 false, i1 false>, <4 x i32> [[OBJ_0_VEC_EXPAND]], <4 x i32> zeroinitializer
1317+
; CHECK-NEXT: [[OBJ_8_VEC_INSERT:%.*]] = insertelement <4 x i32> [[OBJ_0_VECBLEND]], i32 [[VAL2:%.*]], i32 2
1318+
; CHECK-NEXT: [[OBJ_12_VEC_INSERT:%.*]] = insertelement <4 x i32> [[OBJ_8_VEC_INSERT]], i32 131072, i32 3
1319+
; CHECK-NEXT: ret <4 x i32> [[OBJ_12_VEC_INSERT]]
1320+
;
1321+
; DEBUG-LABEL: @ptrLoadStoreTysAS3(
1322+
; DEBUG-NEXT: [[VAL0:%.*]] = load ptr addrspace(3), ptr [[INIT:%.*]], align 8, !dbg [[DBG525:![0-9]+]]
1323+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr addrspace(3) [[VAL0]], metadata [[META520:![0-9]+]], metadata !DIExpression()), !dbg [[DBG525]]
1324+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META521:![0-9]+]], metadata !DIExpression()), !dbg [[DBG526:![0-9]+]]
1325+
; DEBUG-NEXT: [[TMP1:%.*]] = ptrtoint ptr addrspace(3) [[VAL0]] to i64, !dbg [[DBG527:![0-9]+]]
1326+
; DEBUG-NEXT: [[TMP2:%.*]] = bitcast i64 [[TMP1]] to <2 x i32>, !dbg [[DBG527]]
1327+
; DEBUG-NEXT: [[OBJ_0_VEC_EXPAND:%.*]] = shufflevector <2 x i32> [[TMP2]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>, !dbg [[DBG527]]
1328+
; DEBUG-NEXT: [[OBJ_0_VECBLEND:%.*]] = select <4 x i1> <i1 true, i1 true, i1 false, i1 false>, <4 x i32> [[OBJ_0_VEC_EXPAND]], <4 x i32> zeroinitializer, !dbg [[DBG527]]
1329+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META522:![0-9]+]], metadata !DIExpression()), !dbg [[DBG528:![0-9]+]]
1330+
; DEBUG-NEXT: [[OBJ_8_VEC_INSERT:%.*]] = insertelement <4 x i32> [[OBJ_0_VECBLEND]], i32 [[VAL2:%.*]], i32 2, !dbg [[DBG529:![0-9]+]]
1331+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META523:![0-9]+]], metadata !DIExpression()), !dbg [[DBG530:![0-9]+]]
1332+
; DEBUG-NEXT: [[OBJ_12_VEC_INSERT:%.*]] = insertelement <4 x i32> [[OBJ_8_VEC_INSERT]], i32 131072, i32 3, !dbg [[DBG531:![0-9]+]]
1333+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata <4 x i32> [[OBJ_12_VEC_INSERT]], metadata [[META524:![0-9]+]], metadata !DIExpression()), !dbg [[DBG532:![0-9]+]]
1334+
; DEBUG-NEXT: ret <4 x i32> [[OBJ_12_VEC_INSERT]], !dbg [[DBG533:![0-9]+]]
1335+
;
1336+
%val0 = load ptr addrspace(3), ptr %init, align 8
1337+
%obj = alloca <4 x i32>, align 16
1338+
store <4 x i32> zeroinitializer, ptr %obj, align 16
1339+
store ptr addrspace(3) %val0, ptr %obj, align 8
1340+
%ptr2 = getelementptr inbounds i8, ptr %obj, i64 8
1341+
store i32 %val2, ptr %ptr2, align 4
1342+
%ptr3 = getelementptr inbounds i8, ptr %obj, i64 12
1343+
store i32 131072, ptr %ptr3, align 4
1344+
%sroaval = load <4 x i32>, ptr %obj, align 16
1345+
ret <4 x i32> %sroaval
1346+
}
1347+
1348+
define <4 x ptr> @ptrLoadStoreTysPtr(ptr %init, i64 %val2) {
1349+
; CHECK-LABEL: @ptrLoadStoreTysPtr(
1350+
; CHECK-NEXT: [[VAL0:%.*]] = load ptr, ptr [[INIT:%.*]], align 8
1351+
; CHECK-NEXT: [[OBJ:%.*]] = alloca <4 x ptr>, align 16
1352+
; CHECK-NEXT: store <4 x ptr> zeroinitializer, ptr [[OBJ]], align 16
1353+
; CHECK-NEXT: store ptr [[VAL0]], ptr [[OBJ]], align 16
1354+
; CHECK-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8
1355+
; CHECK-NEXT: store i64 [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8
1356+
; CHECK-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12
1357+
; CHECK-NEXT: store i64 131072, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4
1358+
; CHECK-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x ptr>, ptr [[OBJ]], align 16
1359+
; CHECK-NEXT: ret <4 x ptr> [[OBJ_0_SROAVAL]]
1360+
;
1361+
; DEBUG-LABEL: @ptrLoadStoreTysPtr(
1362+
; DEBUG-NEXT: [[VAL0:%.*]] = load ptr, ptr [[INIT:%.*]], align 8, !dbg [[DBG541:![0-9]+]]
1363+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr [[VAL0]], metadata [[META536:![0-9]+]], metadata !DIExpression()), !dbg [[DBG541]]
1364+
; DEBUG-NEXT: [[OBJ:%.*]] = alloca <4 x ptr>, align 16, !dbg [[DBG542:![0-9]+]]
1365+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr [[OBJ]], metadata [[META537:![0-9]+]], metadata !DIExpression()), !dbg [[DBG542]]
1366+
; DEBUG-NEXT: store <4 x ptr> zeroinitializer, ptr [[OBJ]], align 16, !dbg [[DBG543:![0-9]+]]
1367+
; DEBUG-NEXT: store ptr [[VAL0]], ptr [[OBJ]], align 16, !dbg [[DBG544:![0-9]+]]
1368+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META538:![0-9]+]], metadata !DIExpression()), !dbg [[DBG545:![0-9]+]]
1369+
; DEBUG-NEXT: [[OBJ_8_PTR2_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 8, !dbg [[DBG546:![0-9]+]]
1370+
; DEBUG-NEXT: store i64 [[VAL2:%.*]], ptr [[OBJ_8_PTR2_SROA_IDX]], align 8, !dbg [[DBG546]]
1371+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata ptr undef, metadata [[META539:![0-9]+]], metadata !DIExpression()), !dbg [[DBG547:![0-9]+]]
1372+
; DEBUG-NEXT: [[OBJ_12_PTR3_SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 12, !dbg [[DBG548:![0-9]+]]
1373+
; DEBUG-NEXT: store i64 131072, ptr [[OBJ_12_PTR3_SROA_IDX]], align 4, !dbg [[DBG548]]
1374+
; DEBUG-NEXT: [[OBJ_0_SROAVAL:%.*]] = load <4 x ptr>, ptr [[OBJ]], align 16, !dbg [[DBG549:![0-9]+]]
1375+
; DEBUG-NEXT: call void @llvm.dbg.value(metadata <4 x ptr> [[OBJ_0_SROAVAL]], metadata [[META540:![0-9]+]], metadata !DIExpression()), !dbg [[DBG549]]
1376+
; DEBUG-NEXT: ret <4 x ptr> [[OBJ_0_SROAVAL]], !dbg [[DBG550:![0-9]+]]
1377+
;
1378+
%val0 = load ptr, ptr %init, align 8
1379+
%obj = alloca <4 x ptr>, align 16
1380+
store <4 x ptr> zeroinitializer, ptr %obj, align 16
1381+
store ptr %val0, ptr %obj, align 8
1382+
%ptr2 = getelementptr inbounds i32, ptr %obj, i64 2
1383+
store i64 %val2, ptr %ptr2, align 4
1384+
%ptr3 = getelementptr inbounds i32, ptr %obj, i64 3
1385+
store i64 131072, ptr %ptr3, align 4
1386+
%sroaval = load <4 x ptr>, ptr %obj, align 16
1387+
ret <4 x ptr> %sroaval
1388+
}
1389+
13101390
declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
13111391
declare void @llvm.lifetime.end.p0(i64, ptr)
13121392
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:

0 commit comments

Comments
 (0)