diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp --- a/llvm/unittests/Analysis/ValueTrackingTest.cpp +++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp @@ -19,6 +19,7 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/KnownBits.h" #include "llvm/Support/SourceMgr.h" +#include "llvm/Transforms/Utils/Local.h" #include "gtest/gtest.h" using namespace llvm; @@ -938,6 +939,34 @@ } } +TEST_F(ValueTrackingTest, computePtrAlignment) { + parseAssembly("declare i1 @f_i1()\n" + "declare i8* @f_i8p()\n" + "declare void @llvm.assume(i1)\n" + "define void @test() {\n" + " %A = call i8* @f_i8p()\n" + " %cond = call i1 @f_i1()\n" + " %CxtI = add i32 0, 0\n" + " br i1 %cond, label %BB1, label %EXIT\n" + "BB1:\n" + " %CxtI2 = add i32 0, 0\n" + " %cond2 = call i1 @f_i1()\n" + " call void @llvm.assume(i1 true) [ \"align\"(i8* %A, i64 16) ]\n" + " br i1 %cond2, label %BB2, label %EXIT\n" + "BB2:\n" + " %CxtI3 = add i32 0, 0\n" + " ret void\n" + "EXIT:\n" + " ret void\n" + "}"); + AssumptionCache AC(*F); + DominatorTree DT(*F); + DataLayout DL = M->getDataLayout(); + EXPECT_EQ(getKnownAlignment(A, DL, CxtI, &AC, &DT), Align(1)); + EXPECT_EQ(getKnownAlignment(A, DL, CxtI2, &AC, &DT), Align(1)); + EXPECT_EQ(getKnownAlignment(A, DL, CxtI3, &AC, &DT), Align(16)); +} + TEST_F(ComputeKnownBitsTest, ComputeKnownBits) { parseAssembly( "define i32 @test(i32 %a, i32 %b) {\n"