29 changes: 29 additions & 0 deletions llvm/unittests/Analysis/ValueTrackingTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -938,6 +939,34 @@ TEST(ValueTracking, canCreatePoisonOrUndef) {
}
}

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"
Expand Down