Skip to content

Commit 168fc01

Browse files
committed
[NFC][SROA] Add test w/ select and non-capturing call
1 parent b31a1b4 commit 168fc01

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

llvm/test/Transforms/SROA/non-capturing-call-readonly.ll

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,6 +1335,59 @@ entry:
13351335
ret i8 %r
13361336
}
13371337

1338+
define [2 x i32] @select_of_ptrs(i32* %data, i1 %c, i32 %v) {
1339+
; CHECK-LABEL: @select_of_ptrs(
1340+
; CHECK-NEXT: entry:
1341+
; CHECK-NEXT: [[RETVAL_FULL:%.*]] = alloca [2 x i32], align 4
1342+
; CHECK-NEXT: [[DOTFCA_0_GEP:%.*]] = getelementptr inbounds [2 x i32], [2 x i32]* [[RETVAL_FULL]], i32 0, i32 0
1343+
; CHECK-NEXT: store i32 0, i32* [[DOTFCA_0_GEP]], align 4
1344+
; CHECK-NEXT: [[DOTFCA_1_GEP:%.*]] = getelementptr inbounds [2 x i32], [2 x i32]* [[RETVAL_FULL]], i32 0, i32 1
1345+
; CHECK-NEXT: store i32 0, i32* [[DOTFCA_1_GEP]], align 4
1346+
; CHECK-NEXT: [[RETVAL_BASE:%.*]] = getelementptr inbounds [2 x i32], [2 x i32]* [[RETVAL_FULL]], i64 0, i64 0
1347+
; CHECK-NEXT: [[RETVAL:%.*]] = getelementptr inbounds [2 x i32], [2 x i32]* [[RETVAL_FULL]], i64 0, i64 1
1348+
; CHECK-NEXT: [[PTR:%.*]] = select i1 [[C:%.*]], i32* [[RETVAL_BASE]], i32* [[RETVAL]]
1349+
; CHECK-NEXT: store i32 [[V:%.*]], i32* [[PTR]], align 4
1350+
; CHECK-NEXT: [[I0:%.*]] = call i32 @user_of_alloca(i32* [[RETVAL_BASE]])
1351+
; CHECK-NEXT: [[I1_FCA_0_GEP:%.*]] = getelementptr inbounds [2 x i32], [2 x i32]* [[RETVAL_FULL]], i32 0, i32 0
1352+
; CHECK-NEXT: [[I1_FCA_0_LOAD:%.*]] = load i32, i32* [[I1_FCA_0_GEP]], align 4
1353+
; CHECK-NEXT: [[I1_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 [[I1_FCA_0_LOAD]], 0
1354+
; CHECK-NEXT: [[I1_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x i32], [2 x i32]* [[RETVAL_FULL]], i32 0, i32 1
1355+
; CHECK-NEXT: [[I1_FCA_1_LOAD:%.*]] = load i32, i32* [[I1_FCA_1_GEP]], align 4
1356+
; CHECK-NEXT: [[I1_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I1_FCA_0_INSERT]], i32 [[I1_FCA_1_LOAD]], 1
1357+
; CHECK-NEXT: ret [2 x i32] [[I1_FCA_1_INSERT]]
1358+
;
1359+
; CHECK-OPAQUE-LABEL: @select_of_ptrs(
1360+
; CHECK-OPAQUE-NEXT: entry:
1361+
; CHECK-OPAQUE-NEXT: [[RETVAL_FULL:%.*]] = alloca [2 x i32], align 4
1362+
; CHECK-OPAQUE-NEXT: [[DOTFCA_0_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 0
1363+
; CHECK-OPAQUE-NEXT: store i32 0, ptr [[DOTFCA_0_GEP]], align 4
1364+
; CHECK-OPAQUE-NEXT: [[DOTFCA_1_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 1
1365+
; CHECK-OPAQUE-NEXT: store i32 0, ptr [[DOTFCA_1_GEP]], align 4
1366+
; CHECK-OPAQUE-NEXT: [[RETVAL_BASE:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i64 0, i64 0
1367+
; CHECK-OPAQUE-NEXT: [[RETVAL:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i64 0, i64 1
1368+
; CHECK-OPAQUE-NEXT: [[PTR:%.*]] = select i1 [[C:%.*]], ptr [[RETVAL_BASE]], ptr [[RETVAL]]
1369+
; CHECK-OPAQUE-NEXT: store i32 [[V:%.*]], ptr [[PTR]], align 4
1370+
; CHECK-OPAQUE-NEXT: [[I0:%.*]] = call i32 @user_of_alloca(ptr [[RETVAL_BASE]])
1371+
; CHECK-OPAQUE-NEXT: [[I1_FCA_0_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 0
1372+
; CHECK-OPAQUE-NEXT: [[I1_FCA_0_LOAD:%.*]] = load i32, ptr [[I1_FCA_0_GEP]], align 4
1373+
; CHECK-OPAQUE-NEXT: [[I1_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 [[I1_FCA_0_LOAD]], 0
1374+
; CHECK-OPAQUE-NEXT: [[I1_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 1
1375+
; CHECK-OPAQUE-NEXT: [[I1_FCA_1_LOAD:%.*]] = load i32, ptr [[I1_FCA_1_GEP]], align 4
1376+
; CHECK-OPAQUE-NEXT: [[I1_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I1_FCA_0_INSERT]], i32 [[I1_FCA_1_LOAD]], 1
1377+
; CHECK-OPAQUE-NEXT: ret [2 x i32] [[I1_FCA_1_INSERT]]
1378+
;
1379+
entry:
1380+
%retval.full = alloca [2 x i32], align 4
1381+
store [2 x i32] zeroinitializer, [2 x i32]* %retval.full, align 4
1382+
%retval.base = getelementptr inbounds [2 x i32], [2 x i32]* %retval.full, i64 0, i64 0
1383+
%retval = getelementptr inbounds [2 x i32], [2 x i32]* %retval.full, i64 0, i64 1
1384+
%ptr = select i1 %c, i32* %retval.base, i32* %retval
1385+
store i32 %v, i32* %ptr
1386+
%i0 = call i32 @user_of_alloca(i32* %retval.base)
1387+
%i1 = load [2 x i32], [2 x i32]* %retval.full, align 4
1388+
ret [2 x i32] %i1
1389+
}
1390+
13381391
declare dso_local i32 @user_of_alloca(i32* nocapture readonly)
13391392
declare dso_local i32 @user_of_alloca_with_multiple_args(i32* nocapture readonly, i32* nocapture readonly)
13401393
declare dso_local i32 @capture_of_alloca(i32 *)

0 commit comments

Comments
 (0)