diff options
author | Pierre van Houtryve <pierre.vanhoutryve@amd.com> | 2024-04-24 08:52:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-24 08:52:25 +0200 |
commit | cf328ff96daf5e676fb51ac86e550af7fd689fec (patch) | |
tree | 5ddf3b93433e9fe04a349663d1f1f50d0721f28b /llvm/unittests/CodeGen/MachineInstrTest.cpp | |
parent | 805d5637a0d50caa073f435b55940c1338aae0fc (diff) | |
download | llvm-cf328ff96daf5e676fb51ac86e550af7fd689fec.zip llvm-cf328ff96daf5e676fb51ac86e550af7fd689fec.tar.gz llvm-cf328ff96daf5e676fb51ac86e550af7fd689fec.tar.bz2 |
[IR] Memory Model Relaxation Annotations (#78569)
Implements the core/target-agnostic components of Memory Model
Relaxation Annotations.
RFC:
https://discourse.llvm.org/t/rfc-mmras-memory-model-relaxation-annotations/76361/5
Diffstat (limited to 'llvm/unittests/CodeGen/MachineInstrTest.cpp')
-rw-r--r-- | llvm/unittests/CodeGen/MachineInstrTest.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/llvm/unittests/CodeGen/MachineInstrTest.cpp b/llvm/unittests/CodeGen/MachineInstrTest.cpp index 49da0c3..8ea12a6 100644 --- a/llvm/unittests/CodeGen/MachineInstrTest.cpp +++ b/llvm/unittests/CodeGen/MachineInstrTest.cpp @@ -18,6 +18,7 @@ #include "llvm/CodeGen/TargetSubtargetInfo.h" #include "llvm/IR/DebugInfoMetadata.h" #include "llvm/IR/IRBuilder.h" +#include "llvm/IR/MemoryModelRelaxationAnnotations.h" #include "llvm/IR/ModuleSlotTracker.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCSymbol.h" @@ -277,12 +278,14 @@ TEST(MachineInstrExtraInfo, AddExtraInfo) { MCSymbol *Sym2 = MC->createTempSymbol("post_label", false); MDNode *HAM = MDNode::getDistinct(Ctx, std::nullopt); MDNode *PCS = MDNode::getDistinct(Ctx, std::nullopt); + MDNode *MMRA = MMRAMetadata::getTagMD(Ctx, "foo", "bar"); ASSERT_TRUE(MI->memoperands_empty()); ASSERT_FALSE(MI->getPreInstrSymbol()); ASSERT_FALSE(MI->getPostInstrSymbol()); ASSERT_FALSE(MI->getHeapAllocMarker()); ASSERT_FALSE(MI->getPCSections()); + ASSERT_FALSE(MI->getMMRAMetadata()); MI->setMemRefs(*MF, MMOs); ASSERT_TRUE(MI->memoperands().size() == 1); @@ -290,6 +293,7 @@ TEST(MachineInstrExtraInfo, AddExtraInfo) { ASSERT_FALSE(MI->getPostInstrSymbol()); ASSERT_FALSE(MI->getHeapAllocMarker()); ASSERT_FALSE(MI->getPCSections()); + ASSERT_FALSE(MI->getMMRAMetadata()); MI->setPreInstrSymbol(*MF, Sym1); ASSERT_TRUE(MI->memoperands().size() == 1); @@ -297,6 +301,7 @@ TEST(MachineInstrExtraInfo, AddExtraInfo) { ASSERT_FALSE(MI->getPostInstrSymbol()); ASSERT_FALSE(MI->getHeapAllocMarker()); ASSERT_FALSE(MI->getPCSections()); + ASSERT_FALSE(MI->getMMRAMetadata()); MI->setPostInstrSymbol(*MF, Sym2); ASSERT_TRUE(MI->memoperands().size() == 1); @@ -304,6 +309,7 @@ TEST(MachineInstrExtraInfo, AddExtraInfo) { ASSERT_TRUE(MI->getPostInstrSymbol() == Sym2); ASSERT_FALSE(MI->getHeapAllocMarker()); ASSERT_FALSE(MI->getPCSections()); + ASSERT_FALSE(MI->getMMRAMetadata()); MI->setHeapAllocMarker(*MF, HAM); ASSERT_TRUE(MI->memoperands().size() == 1); @@ -311,6 +317,7 @@ TEST(MachineInstrExtraInfo, AddExtraInfo) { ASSERT_TRUE(MI->getPostInstrSymbol() == Sym2); ASSERT_TRUE(MI->getHeapAllocMarker() == HAM); ASSERT_FALSE(MI->getPCSections()); + ASSERT_FALSE(MI->getMMRAMetadata()); MI->setPCSections(*MF, PCS); ASSERT_TRUE(MI->memoperands().size() == 1); @@ -318,6 +325,21 @@ TEST(MachineInstrExtraInfo, AddExtraInfo) { ASSERT_TRUE(MI->getPostInstrSymbol() == Sym2); ASSERT_TRUE(MI->getHeapAllocMarker() == HAM); ASSERT_TRUE(MI->getPCSections() == PCS); + ASSERT_FALSE(MI->getMMRAMetadata()); + + MI->setMMRAMetadata(*MF, MMRA); + ASSERT_TRUE(MI->memoperands().size() == 1); + ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1); + ASSERT_TRUE(MI->getPostInstrSymbol() == Sym2); + ASSERT_TRUE(MI->getHeapAllocMarker() == HAM); + ASSERT_TRUE(MI->getPCSections() == PCS); + ASSERT_TRUE(MI->getMMRAMetadata() == MMRA); + + // Check with nothing but MMRAs. + MachineInstr *MMRAMI = MF->CreateMachineInstr(MCID, DebugLoc()); + ASSERT_FALSE(MMRAMI->getMMRAMetadata()); + MMRAMI->setMMRAMetadata(*MF, MMRA); + ASSERT_TRUE(MMRAMI->getMMRAMetadata() == MMRA); } TEST(MachineInstrExtraInfo, ChangeExtraInfo) { @@ -338,11 +360,15 @@ TEST(MachineInstrExtraInfo, ChangeExtraInfo) { MDNode *HAM = MDNode::getDistinct(Ctx, std::nullopt); MDNode *PCS = MDNode::getDistinct(Ctx, std::nullopt); + MDNode *MMRA1 = MMRAMetadata::getTagMD(Ctx, "foo", "bar"); + MDNode *MMRA2 = MMRAMetadata::getTagMD(Ctx, "bar", "bux"); + MI->setMemRefs(*MF, MMOs); MI->setPreInstrSymbol(*MF, Sym1); MI->setPostInstrSymbol(*MF, Sym2); MI->setHeapAllocMarker(*MF, HAM); MI->setPCSections(*MF, PCS); + MI->setMMRAMetadata(*MF, MMRA1); MMOs.push_back(MMO); @@ -352,6 +378,7 @@ TEST(MachineInstrExtraInfo, ChangeExtraInfo) { ASSERT_TRUE(MI->getPostInstrSymbol() == Sym2); ASSERT_TRUE(MI->getHeapAllocMarker() == HAM); ASSERT_TRUE(MI->getPCSections() == PCS); + ASSERT_TRUE(MI->getMMRAMetadata() == MMRA1); MI->setPostInstrSymbol(*MF, Sym1); ASSERT_TRUE(MI->memoperands().size() == 2); @@ -359,6 +386,15 @@ TEST(MachineInstrExtraInfo, ChangeExtraInfo) { ASSERT_TRUE(MI->getPostInstrSymbol() == Sym1); ASSERT_TRUE(MI->getHeapAllocMarker() == HAM); ASSERT_TRUE(MI->getPCSections() == PCS); + ASSERT_TRUE(MI->getMMRAMetadata() == MMRA1); + + MI->setMMRAMetadata(*MF, MMRA2); + ASSERT_TRUE(MI->memoperands().size() == 2); + ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1); + ASSERT_TRUE(MI->getPostInstrSymbol() == Sym1); + ASSERT_TRUE(MI->getHeapAllocMarker() == HAM); + ASSERT_TRUE(MI->getPCSections() == PCS); + ASSERT_TRUE(MI->getMMRAMetadata() == MMRA2); } TEST(MachineInstrExtraInfo, RemoveExtraInfo) { @@ -380,11 +416,14 @@ TEST(MachineInstrExtraInfo, RemoveExtraInfo) { MDNode *HAM = MDNode::getDistinct(Ctx, std::nullopt); MDNode *PCS = MDNode::getDistinct(Ctx, std::nullopt); + MDNode *MMRA = MDTuple::get(Ctx, {}); + MI->setMemRefs(*MF, MMOs); MI->setPreInstrSymbol(*MF, Sym1); MI->setPostInstrSymbol(*MF, Sym2); MI->setHeapAllocMarker(*MF, HAM); MI->setPCSections(*MF, PCS); + MI->setMMRAMetadata(*MF, MMRA); MI->setPostInstrSymbol(*MF, nullptr); ASSERT_TRUE(MI->memoperands().size() == 2); @@ -392,6 +431,7 @@ TEST(MachineInstrExtraInfo, RemoveExtraInfo) { ASSERT_FALSE(MI->getPostInstrSymbol()); ASSERT_TRUE(MI->getHeapAllocMarker() == HAM); ASSERT_TRUE(MI->getPCSections() == PCS); + ASSERT_TRUE(MI->getMMRAMetadata() == MMRA); MI->setHeapAllocMarker(*MF, nullptr); ASSERT_TRUE(MI->memoperands().size() == 2); @@ -399,6 +439,7 @@ TEST(MachineInstrExtraInfo, RemoveExtraInfo) { ASSERT_FALSE(MI->getPostInstrSymbol()); ASSERT_FALSE(MI->getHeapAllocMarker()); ASSERT_TRUE(MI->getPCSections() == PCS); + ASSERT_TRUE(MI->getMMRAMetadata() == MMRA); MI->setPCSections(*MF, nullptr); ASSERT_TRUE(MI->memoperands().size() == 2); @@ -406,6 +447,7 @@ TEST(MachineInstrExtraInfo, RemoveExtraInfo) { ASSERT_FALSE(MI->getPostInstrSymbol()); ASSERT_FALSE(MI->getHeapAllocMarker()); ASSERT_FALSE(MI->getPCSections()); + ASSERT_TRUE(MI->getMMRAMetadata() == MMRA); MI->setPreInstrSymbol(*MF, nullptr); ASSERT_TRUE(MI->memoperands().size() == 2); @@ -413,6 +455,7 @@ TEST(MachineInstrExtraInfo, RemoveExtraInfo) { ASSERT_FALSE(MI->getPostInstrSymbol()); ASSERT_FALSE(MI->getHeapAllocMarker()); ASSERT_FALSE(MI->getPCSections()); + ASSERT_TRUE(MI->getMMRAMetadata() == MMRA); MI->setMemRefs(*MF, {}); ASSERT_TRUE(MI->memoperands_empty()); @@ -420,6 +463,15 @@ TEST(MachineInstrExtraInfo, RemoveExtraInfo) { ASSERT_FALSE(MI->getPostInstrSymbol()); ASSERT_FALSE(MI->getHeapAllocMarker()); ASSERT_FALSE(MI->getPCSections()); + ASSERT_TRUE(MI->getMMRAMetadata() == MMRA); + + MI->setMMRAMetadata(*MF, nullptr); + ASSERT_TRUE(MI->memoperands_empty()); + ASSERT_FALSE(MI->getPreInstrSymbol()); + ASSERT_FALSE(MI->getPostInstrSymbol()); + ASSERT_FALSE(MI->getHeapAllocMarker()); + ASSERT_FALSE(MI->getPCSections()); + ASSERT_FALSE(MI->getMMRAMetadata()); } TEST(MachineInstrDebugValue, AddDebugValueOperand) { |