diff options
Diffstat (limited to 'lib/CodeGen/MIRPrinter.cpp')
| -rw-r--r-- | lib/CodeGen/MIRPrinter.cpp | 53 | 
1 files changed, 41 insertions, 12 deletions
diff --git a/lib/CodeGen/MIRPrinter.cpp b/lib/CodeGen/MIRPrinter.cpp index bf8cd1489ec5..d9dcc428943f 100644 --- a/lib/CodeGen/MIRPrinter.cpp +++ b/lib/CodeGen/MIRPrinter.cpp @@ -50,6 +50,7 @@  #include "llvm/IR/ModuleSlotTracker.h"  #include "llvm/IR/Value.h"  #include "llvm/MC/LaneBitmask.h" +#include "llvm/MC/MCContext.h"  #include "llvm/MC/MCDwarf.h"  #include "llvm/MC/MCSymbol.h"  #include "llvm/Support/AtomicOrdering.h" @@ -195,6 +196,7 @@ void MIRPrinter::print(const MachineFunction &MF) {    YamlMF.Name = MF.getName();    YamlMF.Alignment = MF.getAlignment();    YamlMF.ExposesReturnsTwice = MF.exposesReturnsTwice(); +  YamlMF.HasWinCFI = MF.hasWinCFI();    YamlMF.Legalized = MF.getProperties().hasProperty(        MachineFunctionProperties::Property::Legalized); @@ -327,6 +329,8 @@ void MIRPrinter::convert(ModuleSlotTracker &MST,    YamlMFI.HasCalls = MFI.hasCalls();    YamlMFI.MaxCallFrameSize = MFI.isMaxCallFrameSizeComputed()      ? MFI.getMaxCallFrameSize() : ~0u; +  YamlMFI.CVBytesOfCalleeSavedRegisters = +      MFI.getCVBytesOfCalleeSavedRegisters();    YamlMFI.HasOpaqueSPAdjustment = MFI.hasOpaqueSPAdjustment();    YamlMFI.HasVAStart = MFI.hasVAStart();    YamlMFI.HasMustTailInVarArgFunc = MFI.hasMustTailInVarArgFunc(); @@ -397,18 +401,20 @@ void MIRPrinter::convertStackObjects(yaml::MachineFunction &YMF,    for (const auto &CSInfo : MFI.getCalleeSavedInfo()) {      yaml::StringValue Reg;      printRegMIR(CSInfo.getReg(), Reg, TRI); -    auto StackObjectInfo = StackObjectOperandMapping.find(CSInfo.getFrameIdx()); -    assert(StackObjectInfo != StackObjectOperandMapping.end() && -           "Invalid stack object index"); -    const FrameIndexOperand &StackObject = StackObjectInfo->second; -    if (StackObject.IsFixed) { -      YMF.FixedStackObjects[StackObject.ID].CalleeSavedRegister = Reg; -      YMF.FixedStackObjects[StackObject.ID].CalleeSavedRestored = -        CSInfo.isRestored(); -    } else { -      YMF.StackObjects[StackObject.ID].CalleeSavedRegister = Reg; -      YMF.StackObjects[StackObject.ID].CalleeSavedRestored = -        CSInfo.isRestored(); +    if (!CSInfo.isSpilledToReg()) { +      auto StackObjectInfo = StackObjectOperandMapping.find(CSInfo.getFrameIdx()); +      assert(StackObjectInfo != StackObjectOperandMapping.end() && +             "Invalid stack object index"); +      const FrameIndexOperand &StackObject = StackObjectInfo->second; +      if (StackObject.IsFixed) { +        YMF.FixedStackObjects[StackObject.ID].CalleeSavedRegister = Reg; +        YMF.FixedStackObjects[StackObject.ID].CalleeSavedRestored = +          CSInfo.isRestored(); +      } else { +        YMF.StackObjects[StackObject.ID].CalleeSavedRegister = Reg; +        YMF.StackObjects[StackObject.ID].CalleeSavedRestored = +          CSInfo.isRestored(); +      }      }    }    for (unsigned I = 0, E = MFI.getLocalFrameObjectCount(); I < E; ++I) { @@ -694,6 +700,12 @@ void MIPrinter::print(const MachineInstr &MI) {      OS << "afn ";    if (MI.getFlag(MachineInstr::FmReassoc))      OS << "reassoc "; +  if (MI.getFlag(MachineInstr::NoUWrap)) +    OS << "nuw "; +  if (MI.getFlag(MachineInstr::NoSWrap)) +    OS << "nsw "; +  if (MI.getFlag(MachineInstr::IsExact)) +    OS << "exact ";    OS << TII->getName(MI.getOpcode());    if (I < E) @@ -708,6 +720,23 @@ void MIPrinter::print(const MachineInstr &MI) {      NeedComma = true;    } +  // Print any optional symbols attached to this instruction as-if they were +  // operands. +  if (MCSymbol *PreInstrSymbol = MI.getPreInstrSymbol()) { +    if (NeedComma) +      OS << ','; +    OS << " pre-instr-symbol "; +    MachineOperand::printSymbol(OS, *PreInstrSymbol); +    NeedComma = true; +  } +  if (MCSymbol *PostInstrSymbol = MI.getPostInstrSymbol()) { +    if (NeedComma) +      OS << ','; +    OS << " post-instr-symbol "; +    MachineOperand::printSymbol(OS, *PostInstrSymbol); +    NeedComma = true; +  } +    if (const DebugLoc &DL = MI.getDebugLoc()) {      if (NeedComma)        OS << ',';  | 
