Skip to content

Commit 337c8b1

Browse files
committed
[SCEV] Add additional computeConstantDifference() tests (NFC)
And some tweaks to make this test easier to update. Use raw string literals and print parse and verifier errors.
1 parent 0e4c7fa commit 337c8b1

File tree

1 file changed

+43
-20
lines changed

1 file changed

+43
-20
lines changed

llvm/unittests/Analysis/ScalarEvolutionTest.cpp

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,28 +1117,40 @@ TEST_F(ScalarEvolutionsTest, SCEVComputeConstantDifference) {
11171117
LLVMContext C;
11181118
SMDiagnostic Err;
11191119
std::unique_ptr<Module> M = parseAssemblyString(
1120-
"define void @foo(i32 %sz, i32 %pp, i32 %x) { "
1121-
"entry: "
1122-
" %v0 = add i32 %pp, 0 "
1123-
" %v3 = add i32 %pp, 3 "
1124-
" %vx = add i32 %pp, %x "
1125-
" %vx3 = add i32 %vx, 3 "
1126-
" br label %loop.body "
1127-
"loop.body: "
1128-
" %iv = phi i32 [ %iv.next, %loop.body ], [ 0, %entry ] "
1129-
" %xa = add nsw i32 %iv, %v0 "
1130-
" %yy = add nsw i32 %iv, %v3 "
1131-
" %xb = sub nsw i32 %yy, 3 "
1132-
" %iv.next = add nsw i32 %iv, 1 "
1133-
" %cmp = icmp sle i32 %iv.next, %sz "
1134-
" br i1 %cmp, label %loop.body, label %exit "
1135-
"exit: "
1136-
" ret void "
1137-
"} ",
1120+
R"(define void @foo(ptr %ptr, i32 %sz, i32 %pp, i32 %x) {
1121+
entry:
1122+
%v0 = add i32 %pp, 0
1123+
%v3 = add i32 %pp, 3
1124+
%vx = add i32 %pp, %x
1125+
%vx3 = add i32 %vx, 3
1126+
br label %loop.body
1127+
loop.body:
1128+
%iv = phi i32 [ %iv.next, %loop.body ], [ 0, %entry ]
1129+
%xa = add nsw i32 %iv, %v0
1130+
%yy = add nsw i32 %iv, %v3
1131+
%xb = sub nsw i32 %yy, 3
1132+
%iv.next = add nsw i32 %iv, 1
1133+
%cmp = icmp sle i32 %iv.next, %sz
1134+
br i1 %cmp, label %loop.body, label %loop2.body
1135+
loop2.body:
1136+
%iv2 = phi i32 [ %iv2.next, %loop2.body ], [ %iv, %loop.body ]
1137+
%iv2.next = add nsw i32 %iv2, 1
1138+
%iv2p3 = add i32 %iv2, 3
1139+
%var = load i32, ptr %ptr
1140+
%iv2pvar = add i32 %iv2, %var
1141+
%iv2pvarp3 = add i32 %iv2pvar, 3
1142+
%cmp2 = icmp sle i32 %iv2.next, %sz
1143+
br i1 %cmp2, label %loop2.body, label %exit
1144+
exit:
1145+
ret void
1146+
})",
11381147
Err, C);
11391148

1140-
ASSERT_TRUE(M && "Could not parse module?");
1141-
ASSERT_TRUE(!verifyModule(*M) && "Must have been well formed!");
1149+
if (!M) {
1150+
Err.print("ScalarEvolutionTest", errs());
1151+
ASSERT_TRUE(M && "Could not parse module?");
1152+
}
1153+
ASSERT_TRUE(!verifyModule(*M, &errs()) && "Must have been well formed!");
11421154

11431155
runWithSE(*M, "foo", [](Function &F, LoopInfo &LI, ScalarEvolution &SE) {
11441156
const SCEV *ScevV0 = SE.getSCEV(getInstructionByName(F, "v0")); // %pp
@@ -1154,6 +1166,15 @@ TEST_F(ScalarEvolutionsTest, SCEVComputeConstantDifference) {
11541166
const SCEV *ScevXB = SE.getSCEV(getInstructionByName(F, "xb")); // {%pp,+,1}
11551167
const SCEV *ScevIVNext =
11561168
SE.getSCEV(getInstructionByName(F, "iv.next")); // {1,+,1}
1169+
// {{0,+,1},+,1}
1170+
const SCEV *ScevIV2 = SE.getSCEV(getInstructionByName(F, "iv2"));
1171+
// {{3,+,1},+,1}
1172+
const SCEV *ScevIV2P3 = SE.getSCEV(getInstructionByName(F, "iv2p3"));
1173+
// %var + {{0,+,1},+,1}
1174+
const SCEV *ScevIV2PVar = SE.getSCEV(getInstructionByName(F, "iv2pvar"));
1175+
// %var + {{3,+,1},+,1}
1176+
const SCEV *ScevIV2PVarP3 =
1177+
SE.getSCEV(getInstructionByName(F, "iv2pvarp3"));
11571178

11581179
auto diff = [&SE](const SCEV *LHS, const SCEV *RHS) -> std::optional<int> {
11591180
auto ConstantDiffOrNone = computeConstantDifference(SE, LHS, RHS);
@@ -1178,6 +1199,8 @@ TEST_F(ScalarEvolutionsTest, SCEVComputeConstantDifference) {
11781199
EXPECT_EQ(diff(ScevIV, ScevIVNext), -1);
11791200
EXPECT_EQ(diff(ScevIVNext, ScevIV), 1);
11801201
EXPECT_EQ(diff(ScevIVNext, ScevIVNext), 0);
1202+
EXPECT_EQ(diff(ScevIV2P3, ScevIV2), std::nullopt); // TODO
1203+
EXPECT_EQ(diff(ScevIV2PVar, ScevIV2PVarP3), std::nullopt); // TODO
11811204
EXPECT_EQ(diff(ScevV0, ScevIV), std::nullopt);
11821205
EXPECT_EQ(diff(ScevIVNext, ScevV3), std::nullopt);
11831206
EXPECT_EQ(diff(ScevYY, ScevV3), std::nullopt);

0 commit comments

Comments
 (0)