[MachineInstr] Allow setting PCSections in ExtraInfo
Provide MachineInstr::setPCSection(), to propagate relevant metadata through the backend. Use ExtraInfo to store the metadata. Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D130876
This commit is contained in:
parent
c70f6e1362
commit
42836e283f
@ -1028,11 +1028,10 @@ public:
|
||||
///
|
||||
/// This is allocated on the function's allocator and so lives the life of
|
||||
/// the function.
|
||||
MachineInstr::ExtraInfo *
|
||||
createMIExtraInfo(ArrayRef<MachineMemOperand *> MMOs,
|
||||
MCSymbol *PreInstrSymbol = nullptr,
|
||||
MCSymbol *PostInstrSymbol = nullptr,
|
||||
MDNode *HeapAllocMarker = nullptr, uint32_t CFIType = 0);
|
||||
MachineInstr::ExtraInfo *createMIExtraInfo(
|
||||
ArrayRef<MachineMemOperand *> MMOs, MCSymbol *PreInstrSymbol = nullptr,
|
||||
MCSymbol *PostInstrSymbol = nullptr, MDNode *HeapAllocMarker = nullptr,
|
||||
MDNode *PCSections = nullptr, uint32_t CFIType = 0);
|
||||
|
||||
/// Allocate a string and populate it with the given external symbol name.
|
||||
const char *createExternalSymbolName(StringRef Name);
|
||||
|
||||
@ -152,18 +152,20 @@ private:
|
||||
MCSymbol *PreInstrSymbol = nullptr,
|
||||
MCSymbol *PostInstrSymbol = nullptr,
|
||||
MDNode *HeapAllocMarker = nullptr,
|
||||
MDNode *PCSections = nullptr,
|
||||
uint32_t CFIType = 0) {
|
||||
bool HasPreInstrSymbol = PreInstrSymbol != nullptr;
|
||||
bool HasPostInstrSymbol = PostInstrSymbol != nullptr;
|
||||
bool HasHeapAllocMarker = HeapAllocMarker != nullptr;
|
||||
bool HasCFIType = CFIType != 0;
|
||||
bool HasPCSections = PCSections != nullptr;
|
||||
auto *Result = new (Allocator.Allocate(
|
||||
totalSizeToAlloc<MachineMemOperand *, MCSymbol *, MDNode *, uint32_t>(
|
||||
MMOs.size(), HasPreInstrSymbol + HasPostInstrSymbol,
|
||||
HasHeapAllocMarker, HasCFIType),
|
||||
HasHeapAllocMarker + HasPCSections, HasCFIType),
|
||||
alignof(ExtraInfo)))
|
||||
ExtraInfo(MMOs.size(), HasPreInstrSymbol, HasPostInstrSymbol,
|
||||
HasHeapAllocMarker, HasCFIType);
|
||||
HasHeapAllocMarker, HasPCSections, HasCFIType);
|
||||
|
||||
// Copy the actual data into the trailing objects.
|
||||
std::copy(MMOs.begin(), MMOs.end(),
|
||||
@ -176,6 +178,9 @@ private:
|
||||
PostInstrSymbol;
|
||||
if (HasHeapAllocMarker)
|
||||
Result->getTrailingObjects<MDNode *>()[0] = HeapAllocMarker;
|
||||
if (HasPCSections)
|
||||
Result->getTrailingObjects<MDNode *>()[HasHeapAllocMarker] =
|
||||
PCSections;
|
||||
if (HasCFIType)
|
||||
Result->getTrailingObjects<uint32_t>()[0] = CFIType;
|
||||
|
||||
@ -200,6 +205,12 @@ private:
|
||||
return HasHeapAllocMarker ? getTrailingObjects<MDNode *>()[0] : nullptr;
|
||||
}
|
||||
|
||||
MDNode *getPCSections() const {
|
||||
return HasPCSections
|
||||
? getTrailingObjects<MDNode *>()[HasHeapAllocMarker]
|
||||
: nullptr;
|
||||
}
|
||||
|
||||
uint32_t getCFIType() const {
|
||||
return HasCFIType ? getTrailingObjects<uint32_t>()[0] : 0;
|
||||
}
|
||||
@ -216,6 +227,7 @@ private:
|
||||
const bool HasPreInstrSymbol;
|
||||
const bool HasPostInstrSymbol;
|
||||
const bool HasHeapAllocMarker;
|
||||
const bool HasPCSections;
|
||||
const bool HasCFIType;
|
||||
|
||||
// Implement the `TrailingObjects` internal API.
|
||||
@ -226,7 +238,7 @@ private:
|
||||
return HasPreInstrSymbol + HasPostInstrSymbol;
|
||||
}
|
||||
size_t numTrailingObjects(OverloadToken<MDNode *>) const {
|
||||
return HasHeapAllocMarker;
|
||||
return HasHeapAllocMarker + HasPCSections;
|
||||
}
|
||||
size_t numTrailingObjects(OverloadToken<uint32_t>) const {
|
||||
return HasCFIType;
|
||||
@ -235,10 +247,11 @@ private:
|
||||
// Just a boring constructor to allow us to initialize the sizes. Always use
|
||||
// the `create` routine above.
|
||||
ExtraInfo(int NumMMOs, bool HasPreInstrSymbol, bool HasPostInstrSymbol,
|
||||
bool HasHeapAllocMarker, bool HasCFIType)
|
||||
bool HasHeapAllocMarker, bool HasPCSections, bool HasCFIType)
|
||||
: NumMMOs(NumMMOs), HasPreInstrSymbol(HasPreInstrSymbol),
|
||||
HasPostInstrSymbol(HasPostInstrSymbol),
|
||||
HasHeapAllocMarker(HasHeapAllocMarker), HasCFIType(HasCFIType) {}
|
||||
HasHeapAllocMarker(HasHeapAllocMarker), HasPCSections(HasPCSections),
|
||||
HasCFIType(HasCFIType) {}
|
||||
};
|
||||
|
||||
/// Enumeration of the kinds of inline extra info available. It is important
|
||||
@ -769,6 +782,16 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// Helper to extract PCSections metadata target sections.
|
||||
MDNode *getPCSections() const {
|
||||
if (!Info)
|
||||
return nullptr;
|
||||
if (ExtraInfo *EI = Info.get<EIIK_OutOfLine>())
|
||||
return EI->getPCSections();
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// Helper to extract a CFI type hash if one has been added.
|
||||
uint32_t getCFIType() const {
|
||||
if (!Info)
|
||||
@ -1810,6 +1833,10 @@ public:
|
||||
/// instruction is removed or duplicated.
|
||||
void setHeapAllocMarker(MachineFunction &MF, MDNode *MD);
|
||||
|
||||
// Set metadata on instructions that say which sections to emit instruction
|
||||
// addresses into.
|
||||
void setPCSections(MachineFunction &MF, MDNode *MD);
|
||||
|
||||
/// Set the CFI type for the instruction.
|
||||
void setCFIType(MachineFunction &MF, uint32_t Type);
|
||||
|
||||
@ -1891,7 +1918,8 @@ private:
|
||||
/// based on the number of pointers.
|
||||
void setExtraInfo(MachineFunction &MF, ArrayRef<MachineMemOperand *> MMOs,
|
||||
MCSymbol *PreInstrSymbol, MCSymbol *PostInstrSymbol,
|
||||
MDNode *HeapAllocMarker, uint32_t CFIType);
|
||||
MDNode *HeapAllocMarker, MDNode *PCSections,
|
||||
uint32_t CFIType);
|
||||
};
|
||||
|
||||
/// Special DenseMapInfo traits to compare MachineInstr* by *value* of the
|
||||
|
||||
@ -530,10 +530,11 @@ MachineFunction::getMachineMemOperand(const MachineMemOperand *MMO,
|
||||
|
||||
MachineInstr::ExtraInfo *MachineFunction::createMIExtraInfo(
|
||||
ArrayRef<MachineMemOperand *> MMOs, MCSymbol *PreInstrSymbol,
|
||||
MCSymbol *PostInstrSymbol, MDNode *HeapAllocMarker, uint32_t CFIType) {
|
||||
MCSymbol *PostInstrSymbol, MDNode *HeapAllocMarker, MDNode *PCSections,
|
||||
uint32_t CFIType) {
|
||||
return MachineInstr::ExtraInfo::create(Allocator, MMOs, PreInstrSymbol,
|
||||
PostInstrSymbol, HeapAllocMarker,
|
||||
CFIType);
|
||||
PCSections, CFIType);
|
||||
}
|
||||
|
||||
const char *MachineFunction::createExternalSymbolName(StringRef Name) {
|
||||
|
||||
@ -301,13 +301,15 @@ void MachineInstr::setExtraInfo(MachineFunction &MF,
|
||||
ArrayRef<MachineMemOperand *> MMOs,
|
||||
MCSymbol *PreInstrSymbol,
|
||||
MCSymbol *PostInstrSymbol,
|
||||
MDNode *HeapAllocMarker, uint32_t CFIType) {
|
||||
MDNode *HeapAllocMarker, MDNode *PCSections,
|
||||
uint32_t CFIType) {
|
||||
bool HasPreInstrSymbol = PreInstrSymbol != nullptr;
|
||||
bool HasPostInstrSymbol = PostInstrSymbol != nullptr;
|
||||
bool HasHeapAllocMarker = HeapAllocMarker != nullptr;
|
||||
bool HasPCSections = PCSections != nullptr;
|
||||
bool HasCFIType = CFIType != 0;
|
||||
int NumPointers = MMOs.size() + HasPreInstrSymbol + HasPostInstrSymbol +
|
||||
HasHeapAllocMarker + HasCFIType;
|
||||
HasHeapAllocMarker + HasPCSections + HasCFIType;
|
||||
|
||||
// Drop all extra info if there is none.
|
||||
if (NumPointers <= 0) {
|
||||
@ -319,9 +321,11 @@ void MachineInstr::setExtraInfo(MachineFunction &MF,
|
||||
// out of line because PointerSumType cannot hold more than 4 tag types with
|
||||
// 32-bit pointers.
|
||||
// FIXME: Maybe we should make the symbols in the extra info mutable?
|
||||
else if (NumPointers > 1 || HasHeapAllocMarker || HasCFIType) {
|
||||
Info.set<EIIK_OutOfLine>(MF.createMIExtraInfo(
|
||||
MMOs, PreInstrSymbol, PostInstrSymbol, HeapAllocMarker, CFIType));
|
||||
else if (NumPointers > 1 || HasHeapAllocMarker || HasPCSections ||
|
||||
HasCFIType) {
|
||||
Info.set<EIIK_OutOfLine>(
|
||||
MF.createMIExtraInfo(MMOs, PreInstrSymbol, PostInstrSymbol,
|
||||
HeapAllocMarker, PCSections, CFIType));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -339,7 +343,7 @@ void MachineInstr::dropMemRefs(MachineFunction &MF) {
|
||||
return;
|
||||
|
||||
setExtraInfo(MF, {}, getPreInstrSymbol(), getPostInstrSymbol(),
|
||||
getHeapAllocMarker(), getCFIType());
|
||||
getHeapAllocMarker(), getPCSections(), getCFIType());
|
||||
}
|
||||
|
||||
void MachineInstr::setMemRefs(MachineFunction &MF,
|
||||
@ -350,7 +354,7 @@ void MachineInstr::setMemRefs(MachineFunction &MF,
|
||||
}
|
||||
|
||||
setExtraInfo(MF, MMOs, getPreInstrSymbol(), getPostInstrSymbol(),
|
||||
getHeapAllocMarker(), getCFIType());
|
||||
getHeapAllocMarker(), getPCSections(), getCFIType());
|
||||
}
|
||||
|
||||
void MachineInstr::addMemOperand(MachineFunction &MF,
|
||||
@ -373,7 +377,8 @@ void MachineInstr::cloneMemRefs(MachineFunction &MF, const MachineInstr &MI) {
|
||||
// are the same (including null).
|
||||
if (getPreInstrSymbol() == MI.getPreInstrSymbol() &&
|
||||
getPostInstrSymbol() == MI.getPostInstrSymbol() &&
|
||||
getHeapAllocMarker() == MI.getHeapAllocMarker()) {
|
||||
getHeapAllocMarker() == MI.getHeapAllocMarker() &&
|
||||
getPCSections() == MI.getPCSections()) {
|
||||
Info = MI.Info;
|
||||
return;
|
||||
}
|
||||
@ -458,7 +463,7 @@ void MachineInstr::setPreInstrSymbol(MachineFunction &MF, MCSymbol *Symbol) {
|
||||
}
|
||||
|
||||
setExtraInfo(MF, memoperands(), Symbol, getPostInstrSymbol(),
|
||||
getHeapAllocMarker(), getCFIType());
|
||||
getHeapAllocMarker(), getPCSections(), getCFIType());
|
||||
}
|
||||
|
||||
void MachineInstr::setPostInstrSymbol(MachineFunction &MF, MCSymbol *Symbol) {
|
||||
@ -473,7 +478,7 @@ void MachineInstr::setPostInstrSymbol(MachineFunction &MF, MCSymbol *Symbol) {
|
||||
}
|
||||
|
||||
setExtraInfo(MF, memoperands(), getPreInstrSymbol(), Symbol,
|
||||
getHeapAllocMarker(), getCFIType());
|
||||
getHeapAllocMarker(), getPCSections(), getCFIType());
|
||||
}
|
||||
|
||||
void MachineInstr::setHeapAllocMarker(MachineFunction &MF, MDNode *Marker) {
|
||||
@ -482,7 +487,16 @@ void MachineInstr::setHeapAllocMarker(MachineFunction &MF, MDNode *Marker) {
|
||||
return;
|
||||
|
||||
setExtraInfo(MF, memoperands(), getPreInstrSymbol(), getPostInstrSymbol(),
|
||||
Marker, getCFIType());
|
||||
Marker, getPCSections(), getCFIType());
|
||||
}
|
||||
|
||||
void MachineInstr::setPCSections(MachineFunction &MF, MDNode *PCSections) {
|
||||
// Do nothing if old and new symbols are the same.
|
||||
if (PCSections == getPCSections())
|
||||
return;
|
||||
|
||||
setExtraInfo(MF, memoperands(), getPreInstrSymbol(), getPostInstrSymbol(),
|
||||
getHeapAllocMarker(), PCSections, getCFIType());
|
||||
}
|
||||
|
||||
void MachineInstr::setCFIType(MachineFunction &MF, uint32_t Type) {
|
||||
@ -491,7 +505,7 @@ void MachineInstr::setCFIType(MachineFunction &MF, uint32_t Type) {
|
||||
return;
|
||||
|
||||
setExtraInfo(MF, memoperands(), getPreInstrSymbol(), getPostInstrSymbol(),
|
||||
getHeapAllocMarker(), Type);
|
||||
getHeapAllocMarker(), getPCSections(), Type);
|
||||
}
|
||||
|
||||
void MachineInstr::cloneInstrSymbols(MachineFunction &MF,
|
||||
@ -506,6 +520,7 @@ void MachineInstr::cloneInstrSymbols(MachineFunction &MF,
|
||||
setPreInstrSymbol(MF, MI.getPreInstrSymbol());
|
||||
setPostInstrSymbol(MF, MI.getPostInstrSymbol());
|
||||
setHeapAllocMarker(MF, MI.getHeapAllocMarker());
|
||||
setPCSections(MF, MI.getPCSections());
|
||||
}
|
||||
|
||||
uint16_t MachineInstr::mergeFlagsWith(const MachineInstr &Other) const {
|
||||
@ -1767,6 +1782,14 @@ void MachineInstr::print(raw_ostream &OS, ModuleSlotTracker &MST,
|
||||
OS << " heap-alloc-marker ";
|
||||
HeapAllocMarker->printAsOperand(OS, MST);
|
||||
}
|
||||
if (MDNode *PCSections = getPCSections()) {
|
||||
if (!FirstOp) {
|
||||
FirstOp = false;
|
||||
OS << ',';
|
||||
}
|
||||
OS << " pcsections ";
|
||||
PCSections->printAsOperand(OS, MST);
|
||||
}
|
||||
if (uint32_t CFIType = getCFIType()) {
|
||||
if (!FirstOp)
|
||||
OS << ',';
|
||||
|
||||
@ -269,36 +269,49 @@ TEST(MachineInstrExtraInfo, AddExtraInfo) {
|
||||
MMOs.push_back(MMO);
|
||||
MCSymbol *Sym1 = MC->createTempSymbol("pre_label", false);
|
||||
MCSymbol *Sym2 = MC->createTempSymbol("post_label", false);
|
||||
MDNode *MDN = MDNode::getDistinct(Ctx, None);
|
||||
MDNode *HAM = MDNode::getDistinct(Ctx, None);
|
||||
MDNode *PCS = MDNode::getDistinct(Ctx, None);
|
||||
|
||||
ASSERT_TRUE(MI->memoperands_empty());
|
||||
ASSERT_FALSE(MI->getPreInstrSymbol());
|
||||
ASSERT_FALSE(MI->getPostInstrSymbol());
|
||||
ASSERT_FALSE(MI->getHeapAllocMarker());
|
||||
ASSERT_FALSE(MI->getPCSections());
|
||||
|
||||
MI->setMemRefs(*MF, MMOs);
|
||||
ASSERT_TRUE(MI->memoperands().size() == 1);
|
||||
ASSERT_FALSE(MI->getPreInstrSymbol());
|
||||
ASSERT_FALSE(MI->getPostInstrSymbol());
|
||||
ASSERT_FALSE(MI->getHeapAllocMarker());
|
||||
ASSERT_FALSE(MI->getPCSections());
|
||||
|
||||
MI->setPreInstrSymbol(*MF, Sym1);
|
||||
ASSERT_TRUE(MI->memoperands().size() == 1);
|
||||
ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1);
|
||||
ASSERT_FALSE(MI->getPostInstrSymbol());
|
||||
ASSERT_FALSE(MI->getHeapAllocMarker());
|
||||
ASSERT_FALSE(MI->getPCSections());
|
||||
|
||||
MI->setPostInstrSymbol(*MF, Sym2);
|
||||
ASSERT_TRUE(MI->memoperands().size() == 1);
|
||||
ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1);
|
||||
ASSERT_TRUE(MI->getPostInstrSymbol() == Sym2);
|
||||
ASSERT_FALSE(MI->getHeapAllocMarker());
|
||||
ASSERT_FALSE(MI->getPCSections());
|
||||
|
||||
MI->setHeapAllocMarker(*MF, MDN);
|
||||
MI->setHeapAllocMarker(*MF, HAM);
|
||||
ASSERT_TRUE(MI->memoperands().size() == 1);
|
||||
ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1);
|
||||
ASSERT_TRUE(MI->getPostInstrSymbol() == Sym2);
|
||||
ASSERT_TRUE(MI->getHeapAllocMarker() == MDN);
|
||||
ASSERT_TRUE(MI->getHeapAllocMarker() == HAM);
|
||||
ASSERT_FALSE(MI->getPCSections());
|
||||
|
||||
MI->setPCSections(*MF, PCS);
|
||||
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);
|
||||
}
|
||||
|
||||
TEST(MachineInstrExtraInfo, ChangeExtraInfo) {
|
||||
@ -316,12 +329,14 @@ TEST(MachineInstrExtraInfo, ChangeExtraInfo) {
|
||||
MMOs.push_back(MMO);
|
||||
MCSymbol *Sym1 = MC->createTempSymbol("pre_label", false);
|
||||
MCSymbol *Sym2 = MC->createTempSymbol("post_label", false);
|
||||
MDNode *MDN = MDNode::getDistinct(Ctx, None);
|
||||
MDNode *HAM = MDNode::getDistinct(Ctx, None);
|
||||
MDNode *PCS = MDNode::getDistinct(Ctx, None);
|
||||
|
||||
MI->setMemRefs(*MF, MMOs);
|
||||
MI->setPreInstrSymbol(*MF, Sym1);
|
||||
MI->setPostInstrSymbol(*MF, Sym2);
|
||||
MI->setHeapAllocMarker(*MF, MDN);
|
||||
MI->setHeapAllocMarker(*MF, HAM);
|
||||
MI->setPCSections(*MF, PCS);
|
||||
|
||||
MMOs.push_back(MMO);
|
||||
|
||||
@ -329,13 +344,15 @@ TEST(MachineInstrExtraInfo, ChangeExtraInfo) {
|
||||
ASSERT_TRUE(MI->memoperands().size() == 2);
|
||||
ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1);
|
||||
ASSERT_TRUE(MI->getPostInstrSymbol() == Sym2);
|
||||
ASSERT_TRUE(MI->getHeapAllocMarker() == MDN);
|
||||
ASSERT_TRUE(MI->getHeapAllocMarker() == HAM);
|
||||
ASSERT_TRUE(MI->getPCSections() == PCS);
|
||||
|
||||
MI->setPostInstrSymbol(*MF, Sym1);
|
||||
ASSERT_TRUE(MI->memoperands().size() == 2);
|
||||
ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1);
|
||||
ASSERT_TRUE(MI->getPostInstrSymbol() == Sym1);
|
||||
ASSERT_TRUE(MI->getHeapAllocMarker() == MDN);
|
||||
ASSERT_TRUE(MI->getHeapAllocMarker() == HAM);
|
||||
ASSERT_TRUE(MI->getPCSections() == PCS);
|
||||
}
|
||||
|
||||
TEST(MachineInstrExtraInfo, RemoveExtraInfo) {
|
||||
@ -354,36 +371,49 @@ TEST(MachineInstrExtraInfo, RemoveExtraInfo) {
|
||||
MMOs.push_back(MMO);
|
||||
MCSymbol *Sym1 = MC->createTempSymbol("pre_label", false);
|
||||
MCSymbol *Sym2 = MC->createTempSymbol("post_label", false);
|
||||
MDNode *MDN = MDNode::getDistinct(Ctx, None);
|
||||
MDNode *HAM = MDNode::getDistinct(Ctx, None);
|
||||
MDNode *PCS = MDNode::getDistinct(Ctx, None);
|
||||
|
||||
MI->setMemRefs(*MF, MMOs);
|
||||
MI->setPreInstrSymbol(*MF, Sym1);
|
||||
MI->setPostInstrSymbol(*MF, Sym2);
|
||||
MI->setHeapAllocMarker(*MF, MDN);
|
||||
MI->setHeapAllocMarker(*MF, HAM);
|
||||
MI->setPCSections(*MF, PCS);
|
||||
|
||||
MI->setPostInstrSymbol(*MF, nullptr);
|
||||
ASSERT_TRUE(MI->memoperands().size() == 2);
|
||||
ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1);
|
||||
ASSERT_FALSE(MI->getPostInstrSymbol());
|
||||
ASSERT_TRUE(MI->getHeapAllocMarker() == MDN);
|
||||
ASSERT_TRUE(MI->getHeapAllocMarker() == HAM);
|
||||
ASSERT_TRUE(MI->getPCSections() == PCS);
|
||||
|
||||
MI->setHeapAllocMarker(*MF, nullptr);
|
||||
ASSERT_TRUE(MI->memoperands().size() == 2);
|
||||
ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1);
|
||||
ASSERT_FALSE(MI->getPostInstrSymbol());
|
||||
ASSERT_FALSE(MI->getHeapAllocMarker());
|
||||
ASSERT_TRUE(MI->getPCSections() == PCS);
|
||||
|
||||
MI->setPCSections(*MF, nullptr);
|
||||
ASSERT_TRUE(MI->memoperands().size() == 2);
|
||||
ASSERT_TRUE(MI->getPreInstrSymbol() == Sym1);
|
||||
ASSERT_FALSE(MI->getPostInstrSymbol());
|
||||
ASSERT_FALSE(MI->getHeapAllocMarker());
|
||||
ASSERT_FALSE(MI->getPCSections());
|
||||
|
||||
MI->setPreInstrSymbol(*MF, nullptr);
|
||||
ASSERT_TRUE(MI->memoperands().size() == 2);
|
||||
ASSERT_FALSE(MI->getPreInstrSymbol());
|
||||
ASSERT_FALSE(MI->getPostInstrSymbol());
|
||||
ASSERT_FALSE(MI->getHeapAllocMarker());
|
||||
ASSERT_FALSE(MI->getPCSections());
|
||||
|
||||
MI->setMemRefs(*MF, {});
|
||||
ASSERT_TRUE(MI->memoperands_empty());
|
||||
ASSERT_FALSE(MI->getPreInstrSymbol());
|
||||
ASSERT_FALSE(MI->getPostInstrSymbol());
|
||||
ASSERT_FALSE(MI->getHeapAllocMarker());
|
||||
ASSERT_FALSE(MI->getPCSections());
|
||||
}
|
||||
|
||||
TEST(MachineInstrDebugValue, AddDebugValueOperand) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user