diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/docs/MIRLangRef.rst | 13 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIRPrinter.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineOperand.cpp | 2 | ||||
| -rw-r--r-- | llvm/unittests/CodeGen/MachineOperandTest.cpp | 22 | 
4 files changed, 38 insertions, 5 deletions
diff --git a/llvm/docs/MIRLangRef.rst b/llvm/docs/MIRLangRef.rst index 14ac63bbd9d..f170c721087 100644 --- a/llvm/docs/MIRLangRef.rst +++ b/llvm/docs/MIRLangRef.rst @@ -121,6 +121,8 @@ Tests are more accessible and future proof when simplified:    contains dummy functions (see above). The .mir loader will create the    IR functions automatically in this case. +.. _limitations: +  Limitations  ----------- @@ -678,6 +680,17 @@ Example:      CALL64pcrel32 $__stack_chk_fail, csr_64, implicit %rsp, implicit-def %rsp +MCSymbol Operands +^^^^^^^^^^^^^^^^^ + +A MCSymbol operand is holding a pointer to a ``MCSymbol``. For the limitations +of this operand in MIR, see :ref:`limitations <limitations>`. + +The syntax is: + +.. code-block:: text + +    EH_LABEL <mcsymbol Ltmp1>  .. TODO: Describe the parsers default behaviour when optional YAML attributes     are missing. diff --git a/llvm/lib/CodeGen/MIRPrinter.cpp b/llvm/lib/CodeGen/MIRPrinter.cpp index 723e57b4444..ac94e96bea8 100644 --- a/llvm/lib/CodeGen/MIRPrinter.cpp +++ b/llvm/lib/CodeGen/MIRPrinter.cpp @@ -799,7 +799,8 @@ void MIPrinter::print(const MachineInstr &MI, unsigned OpIdx,    case MachineOperand::MO_ExternalSymbol:    case MachineOperand::MO_GlobalAddress:    case MachineOperand::MO_RegisterLiveOut: -  case MachineOperand::MO_Metadata: { +  case MachineOperand::MO_Metadata: +  case MachineOperand::MO_MCSymbol: {      unsigned TiedOperandIdx = 0;      if (ShouldPrintRegisterTies && Op.isReg() && Op.isTied() && !Op.isDef())        TiedOperandIdx = Op.getParent()->findTiedOperandIdx(OpIdx); @@ -831,9 +832,6 @@ void MIPrinter::print(const MachineInstr &MI, unsigned OpIdx,        printCustomRegMask(Op.getRegMask(), OS, TRI);      break;    } -  case MachineOperand::MO_MCSymbol: -    OS << "<mcsymbol " << *Op.getMCSymbol() << ">"; -    break;    case MachineOperand::MO_CFIIndex: {      const MachineFunction &MF = *Op.getParent()->getMF();      print(MF.getFrameInstructions()[Op.getCFIIndex()], TRI); diff --git a/llvm/lib/CodeGen/MachineOperand.cpp b/llvm/lib/CodeGen/MachineOperand.cpp index a1ae5d396c2..1640d57eb48 100644 --- a/llvm/lib/CodeGen/MachineOperand.cpp +++ b/llvm/lib/CodeGen/MachineOperand.cpp @@ -660,7 +660,7 @@ void MachineOperand::print(raw_ostream &OS, ModuleSlotTracker &MST,      getMetadata()->printAsOperand(OS, MST);      break;    case MachineOperand::MO_MCSymbol: -    OS << "<MCSym=" << *getMCSymbol() << '>'; +    OS << "<mcsymbol " << *getMCSymbol() << ">";      break;    case MachineOperand::MO_CFIIndex:      OS << "<call frame instruction>"; diff --git a/llvm/unittests/CodeGen/MachineOperandTest.cpp b/llvm/unittests/CodeGen/MachineOperandTest.cpp index 192229be065..e51207b9571 100644 --- a/llvm/unittests/CodeGen/MachineOperandTest.cpp +++ b/llvm/unittests/CodeGen/MachineOperandTest.cpp @@ -13,6 +13,8 @@  #include "llvm/IR/LLVMContext.h"  #include "llvm/IR/Module.h"  #include "llvm/IR/ModuleSlotTracker.h" +#include "llvm/MC/MCContext.h" +#include "llvm/MC/MCAsmInfo.h"  #include "llvm/Support/raw_ostream.h"  #include "gtest/gtest.h" @@ -314,4 +316,24 @@ TEST(MachineOperandTest, PrintMetadata) {    ASSERT_TRUE(OS.str() == "!0");  } +TEST(MachineOperandTest, PrintMCSymbol) { +  MCAsmInfo MAI; +  MCContext Ctx(&MAI, /*MRI=*/nullptr, /*MOFI=*/nullptr); +  MCSymbol *Sym = Ctx.getOrCreateSymbol("foo"); + +  // Create a MachineOperand with a metadata and print it. +  MachineOperand MO = MachineOperand::CreateMCSymbol(Sym); + +  // Checking some preconditions on the newly created +  // MachineOperand. +  ASSERT_TRUE(MO.isMCSymbol()); +  ASSERT_TRUE(MO.getMCSymbol() == Sym); + +  std::string str; +  // Print a MachineOperand containing a metadata node. +  raw_string_ostream OS(str); +  MO.print(OS, /*TRI=*/nullptr, /*IntrinsicInfo=*/nullptr); +  ASSERT_TRUE(OS.str() == "<mcsymbol foo>"); +} +  } // end namespace  | 

