@@ -1307,6 +1307,86 @@ define <4 x float> @ptrLoadStoreTysFloat(ptr %init, float %val2) {
1307
1307
ret <4 x float > %sroaval
1308
1308
}
1309
1309
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
+
1310
1390
declare void @llvm.memcpy.p0.p0.i64 (ptr , ptr , i64 , i1 )
1311
1391
declare void @llvm.lifetime.end.p0 (i64 , ptr )
1312
1392
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
0 commit comments