forked from OSchip/llvm-project
[NFC] Add unittests for findAllocaForValue
This commit is contained in:
parent
1d8af682ef
commit
7f1bb326ee
|
@ -1430,3 +1430,111 @@ TEST_F(ValueTrackingTest, ComputeConstantRange) {
|
||||||
EXPECT_TRUE(CR2.isFullSet());
|
EXPECT_TRUE(CR2.isFullSet());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class FindAllocaForValueTest
|
||||||
|
: public ValueTrackingTest,
|
||||||
|
public ::testing::WithParamInterface<std::pair<const char *, bool>> {
|
||||||
|
protected:
|
||||||
|
};
|
||||||
|
|
||||||
|
const std::pair<const char *, bool> FindAllocaForValueTests[] = {
|
||||||
|
{R"(
|
||||||
|
define void @test() {
|
||||||
|
%a = alloca i64
|
||||||
|
%r = bitcast i64* %a to i32*
|
||||||
|
ret void
|
||||||
|
})",
|
||||||
|
true},
|
||||||
|
|
||||||
|
{R"(
|
||||||
|
define void @test() {
|
||||||
|
%a = alloca i32
|
||||||
|
%r = getelementptr i32, i32* %a, i32 1
|
||||||
|
ret void
|
||||||
|
})",
|
||||||
|
true},
|
||||||
|
|
||||||
|
{R"(
|
||||||
|
define void @test(i1 %cond) {
|
||||||
|
entry:
|
||||||
|
%a = alloca i32
|
||||||
|
br label %bb1
|
||||||
|
|
||||||
|
bb1:
|
||||||
|
%r = phi i32* [ %a, %entry ], [ %r, %bb1 ]
|
||||||
|
br i1 %cond, label %bb1, label %exit
|
||||||
|
|
||||||
|
exit:
|
||||||
|
ret void
|
||||||
|
})",
|
||||||
|
true},
|
||||||
|
|
||||||
|
{R"(
|
||||||
|
define void @test(i1 %cond) {
|
||||||
|
entry:
|
||||||
|
%a = alloca i64
|
||||||
|
%a32 = bitcast i64* %a to i32*
|
||||||
|
br label %bb1
|
||||||
|
|
||||||
|
bb1:
|
||||||
|
%x = phi i32* [ %a32, %entry ], [ %x, %bb1 ]
|
||||||
|
%r = getelementptr i32, i32* %x, i32 1
|
||||||
|
br i1 %cond, label %bb1, label %exit
|
||||||
|
|
||||||
|
exit:
|
||||||
|
ret void
|
||||||
|
})",
|
||||||
|
true},
|
||||||
|
|
||||||
|
{R"(
|
||||||
|
define void @test(i1 %cond) {
|
||||||
|
entry:
|
||||||
|
%a = alloca i64
|
||||||
|
%a32 = bitcast i64* %a to i32*
|
||||||
|
br label %bb1
|
||||||
|
|
||||||
|
bb1:
|
||||||
|
%x = phi i32* [ %a32, %entry ], [ %r, %bb1 ]
|
||||||
|
%r = getelementptr i32, i32* %x, i32 1
|
||||||
|
br i1 %cond, label %bb1, label %exit
|
||||||
|
|
||||||
|
exit:
|
||||||
|
ret void
|
||||||
|
})",
|
||||||
|
false},
|
||||||
|
|
||||||
|
{R"(
|
||||||
|
define void @test(i1 %cond, i64* %a) {
|
||||||
|
entry:
|
||||||
|
%r = bitcast i64* %a to i32*
|
||||||
|
ret void
|
||||||
|
})",
|
||||||
|
false},
|
||||||
|
|
||||||
|
{R"(
|
||||||
|
define void @test(i1 %cond) {
|
||||||
|
entry:
|
||||||
|
%a = alloca i32
|
||||||
|
%b = alloca i32
|
||||||
|
br label %bb1
|
||||||
|
|
||||||
|
bb1:
|
||||||
|
%x = phi i32* [ %a, %entry ], [ %b, %bb1 ]
|
||||||
|
br i1 %cond, label %bb1, label %exit
|
||||||
|
|
||||||
|
exit:
|
||||||
|
ret void
|
||||||
|
})",
|
||||||
|
false},
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_P(FindAllocaForValueTest, findAllocaForValue) {
|
||||||
|
auto M = parseModule(GetParam().first);
|
||||||
|
Function *F = M->getFunction("test");
|
||||||
|
Instruction *I = &findInstructionByName(F, "r");
|
||||||
|
const AllocaInst *AI = findAllocaForValue(I);
|
||||||
|
EXPECT_EQ(!!AI, GetParam().second);
|
||||||
|
}
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_CASE_P(FindAllocaForValueTest, FindAllocaForValueTest,
|
||||||
|
::testing::ValuesIn(FindAllocaForValueTests), );
|
||||||
|
|
Loading…
Reference in New Issue