[PATCH] D153618: [AA] use AsmParser on a unittest(NFC)
Kohei Asano via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 23 02:18:11 PDT 2023
khei4 created this revision.
Herald added a subscriber: jeroen.dobbelaere.
Herald added a project: All.
khei4 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Use AsmParser on some IR handwritten construction.
https://reviews.llvm.org/D153618
Files:
llvm/unittests/Analysis/AliasAnalysisTest.cpp
Index: llvm/unittests/Analysis/AliasAnalysisTest.cpp
===================================================================
--- llvm/unittests/Analysis/AliasAnalysisTest.cpp
+++ llvm/unittests/Analysis/AliasAnalysisTest.cpp
@@ -162,56 +162,55 @@
}
};
+static Instruction *getInstructionByName(Function &F, StringRef Name) {
+ for (auto &I : instructions(F))
+ if (I.getName() == Name)
+ return &I;
+ llvm_unreachable("Expected to find instruction!");
+}
+
TEST_F(AliasAnalysisTest, getModRefInfo) {
// Setup function.
- FunctionType *FTy =
- FunctionType::get(Type::getVoidTy(C), std::vector<Type *>(), false);
- auto *F = Function::Create(FTy, Function::ExternalLinkage, "f", M);
- auto *BB = BasicBlock::Create(C, "entry", F);
- auto IntType = Type::getInt32Ty(C);
- auto PtrType = Type::getInt32PtrTy(C);
- auto *Value = ConstantInt::get(IntType, 42);
- auto *Addr = ConstantPointerNull::get(PtrType);
- auto Alignment = Align(IntType->getBitWidth() / 8);
-
- auto *Store1 = new StoreInst(Value, Addr, BB);
- auto *Load1 = new LoadInst(IntType, Addr, "load", BB);
- auto *Add1 = BinaryOperator::CreateAdd(Value, Value, "add", BB);
- auto *VAArg1 = new VAArgInst(Addr, PtrType, "vaarg", BB);
- auto *CmpXChg1 = new AtomicCmpXchgInst(
- Addr, ConstantInt::get(IntType, 0), ConstantInt::get(IntType, 1),
- Alignment, AtomicOrdering::Monotonic, AtomicOrdering::Monotonic,
- SyncScope::System, BB);
- auto *AtomicRMW = new AtomicRMWInst(
- AtomicRMWInst::Xchg, Addr, ConstantInt::get(IntType, 1), Alignment,
- AtomicOrdering::Monotonic, SyncScope::System, BB);
-
- ReturnInst::Create(C, nullptr, BB);
+ LLVMContext C;
+ SMDiagnostic Err;
+ std::unique_ptr<Module> M = parseAssemblyString(R"(
+ define void @f() {
+ entry:
+ store i32 42, ptr null, align 4
+ %load = load i32, ptr null, align 4
+ %add = add i32 42, 42
+ %vaarg = va_arg ptr null, ptr
+ %cmpxchg = cmpxchg ptr null, i32 0, i32 1 monotonic monotonic, align 4
+ %atomicrmw = atomicrmw xchg ptr null, i32 1 monotonic, align 4
+ ret void
+ }
+ )",
+ Err, C);
+ Function *F = M->getFunction("f");
+ Instruction *Store = &*inst_begin(F);
+ Instruction *Load = getInstructionByName(*F, "load");
+ Instruction *Add = getInstructionByName(*F, "add");
+ Instruction *VAArg = getInstructionByName(*F, "vaarg");
+ Instruction *CmpXChg = getInstructionByName(*F, "cmpxchg");
+ Instruction *AtomicRMW = getInstructionByName(*F, "atomicrmw");
auto &AA = getAAResults(*F);
// Check basic results
- EXPECT_EQ(AA.getModRefInfo(Store1, MemoryLocation()), ModRefInfo::Mod);
- EXPECT_EQ(AA.getModRefInfo(Store1, std::nullopt), ModRefInfo::Mod);
- EXPECT_EQ(AA.getModRefInfo(Load1, MemoryLocation()), ModRefInfo::Ref);
- EXPECT_EQ(AA.getModRefInfo(Load1, std::nullopt), ModRefInfo::Ref);
- EXPECT_EQ(AA.getModRefInfo(Add1, MemoryLocation()), ModRefInfo::NoModRef);
- EXPECT_EQ(AA.getModRefInfo(Add1, std::nullopt), ModRefInfo::NoModRef);
- EXPECT_EQ(AA.getModRefInfo(VAArg1, MemoryLocation()), ModRefInfo::ModRef);
- EXPECT_EQ(AA.getModRefInfo(VAArg1, std::nullopt), ModRefInfo::ModRef);
- EXPECT_EQ(AA.getModRefInfo(CmpXChg1, MemoryLocation()), ModRefInfo::ModRef);
- EXPECT_EQ(AA.getModRefInfo(CmpXChg1, std::nullopt), ModRefInfo::ModRef);
+ EXPECT_EQ(AA.getModRefInfo(Store, MemoryLocation()), ModRefInfo::Mod);
+ EXPECT_EQ(AA.getModRefInfo(Store, std::nullopt), ModRefInfo::Mod);
+ EXPECT_EQ(AA.getModRefInfo(Load, MemoryLocation()), ModRefInfo::Ref);
+ EXPECT_EQ(AA.getModRefInfo(Load, std::nullopt), ModRefInfo::Ref);
+ EXPECT_EQ(AA.getModRefInfo(Add, MemoryLocation()), ModRefInfo::NoModRef);
+ EXPECT_EQ(AA.getModRefInfo(Add, std::nullopt), ModRefInfo::NoModRef);
+ EXPECT_EQ(AA.getModRefInfo(VAArg, MemoryLocation()), ModRefInfo::ModRef);
+ EXPECT_EQ(AA.getModRefInfo(VAArg, std::nullopt), ModRefInfo::ModRef);
+ EXPECT_EQ(AA.getModRefInfo(CmpXChg, MemoryLocation()), ModRefInfo::ModRef);
+ EXPECT_EQ(AA.getModRefInfo(CmpXChg, std::nullopt), ModRefInfo::ModRef);
EXPECT_EQ(AA.getModRefInfo(AtomicRMW, MemoryLocation()), ModRefInfo::ModRef);
EXPECT_EQ(AA.getModRefInfo(AtomicRMW, std::nullopt), ModRefInfo::ModRef);
}
-static Instruction *getInstructionByName(Function &F, StringRef Name) {
- for (auto &I : instructions(F))
- if (I.getName() == Name)
- return &I;
- llvm_unreachable("Expected to find instruction!");
-}
-
TEST_F(AliasAnalysisTest, BatchAAPhiCycles) {
LLVMContext C;
SMDiagnostic Err;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D153618.533903.patch
Type: text/x-patch
Size: 4573 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230623/925a1c4e/attachment.bin>
More information about the llvm-commits
mailing list