[PATCH] D145400: [unittests] add callbr AliasAnalysisTest case
Nick Desaulniers via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 6 10:19:23 PST 2023
nickdesaulniers created this revision.
Herald added a subscriber: jeroen.dobbelaere.
Herald added a project: All.
nickdesaulniers requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Demonstrate that AA can determine that callbr inputs don't alias with
globals. See also: https://reviews.llvm.org/D144927
To run test:
$ pushd llvm/build; ninja AnalysisTests; popd
$ ./llvm/build/unittests/Analysis/AnalysisTests \
--gtest_filter=AliasAnalysisTest.CallBr
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D145400
Files:
llvm/unittests/Analysis/AliasAnalysisTest.cpp
Index: llvm/unittests/Analysis/AliasAnalysisTest.cpp
===================================================================
--- llvm/unittests/Analysis/AliasAnalysisTest.cpp
+++ llvm/unittests/Analysis/AliasAnalysisTest.cpp
@@ -364,6 +364,48 @@
EXPECT_EQ(AR, AliasResult::PartialAlias);
EXPECT_EQ(-1, AR.getOffset());
}
+TEST_F(AliasAnalysisTest, CallBr) {
+ LLVMContext C;
+ SMDiagnostic Err;
+ std::unique_ptr<Module> M = parseAssemblyString(R"(
+ at y = global i32 0
+ at x = global i32 0
+define i32 @foo4() {
+entry:
+ callbr void asm "", "=*m,!i"(ptr elementtype(i32) @x)
+ to label %a [label %b]
+
+a: ; preds = %entry
+ %z = load i32, ptr @y
+ ret i32 %z
+
+b: ; preds = %entry
+ %w = load i32, ptr @y
+ ret i32 %w
+}
+)", Err, C);
+ if (!M)
+ Err.print("CallBr", errs());
+
+ Function *F = M->getFunction("foo4");
+ const auto Loc1 = MemoryLocation::get(getInstructionByName(*F, "z"));
+ const auto Loc2 = MemoryLocation::get(getInstructionByName(*F, "w"));
+ auto &AA = getAAResults(*F);
+ auto AR = AA.alias(Loc1, Loc2);
+ EXPECT_EQ(AR, AliasResult::MustAlias);
+
+ CallBrInst *CBR;
+ for (BasicBlock &BB : *F)
+ for (Instruction &I : BB)
+ if (isa<CallBrInst>(I))
+ CBR = cast<CallBrInst>(&I);
+
+ const auto Loc3 = MemoryLocation::getForArgument(CBR, 0, nullptr);
+ AR = AA.alias(Loc1, Loc3);
+ EXPECT_EQ(AR, AliasResult::NoAlias);
+ AR = AA.alias(Loc2, Loc3);
+ EXPECT_EQ(AR, AliasResult::NoAlias);
+}
class AAPassInfraTest : public testing::Test {
protected:
LLVMContext C;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D145400.502697.patch
Type: text/x-patch
Size: 1605 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230306/e72c4b24/attachment.bin>
More information about the llvm-commits
mailing list