@@ -1227,6 +1227,174 @@ define void @swap-15bytes(ptr %x, ptr %y) {
1227
1227
ret void
1228
1228
}
1229
1229
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
+
1230
1398
declare void @llvm.memcpy.p0.p0.i64 (ptr , ptr , i64 , i1 )
1231
1399
declare void @llvm.lifetime.end.p0 (i64 , ptr )
1232
1400
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
0 commit comments