diff --git a/include/llvm/Target/TargetInstrInfo.h b/include/llvm/Target/TargetInstrInfo.h index 794117058c8..e74cb138ab0 100644 --- a/include/llvm/Target/TargetInstrInfo.h +++ b/include/llvm/Target/TargetInstrInfo.h @@ -219,6 +219,13 @@ public: return get(Opcode).Flags & M_VARIABLE_OPS; } + /// getDWARF_LABELOpcode - Return the opcode of the target's DWARF_LABEL + /// instruction if it has one. This is used by codegen passes that update + /// DWARF line number info as they modify the code. + virtual unsigned getDWARF_LABELOpcode() const { + return 0; + } + /// Return true if the instruction is a register to register move /// and leave the source and dest operands in the passed parameters. virtual bool isMoveInstr(const MachineInstr& MI, diff --git a/lib/Target/PowerPC/PPCInstrInfo.h b/lib/Target/PowerPC/PPCInstrInfo.h index 265e1e76c2f..dc16aed4dc2 100644 --- a/lib/Target/PowerPC/PPCInstrInfo.h +++ b/lib/Target/PowerPC/PPCInstrInfo.h @@ -77,6 +77,13 @@ public: /// This is used for addressing modes. virtual const TargetRegisterClass *getPointerRegClass() const; + /// getDWARF_LABELOpcode - Return the opcode of the target's DWARF_LABEL + /// instruction if it has one. This is used by codegen passes that update + /// DWARF line number info as they modify the code. + virtual unsigned getDWARF_LABELOpcode() const { + return PPC::DWARF_LABEL; + } + // Return true if the instruction is a register to register move and // leave the source and dest operands in the passed parameters. // diff --git a/lib/Target/X86/X86InstrInfo.cpp b/lib/Target/X86/X86InstrInfo.cpp index 939b8691c43..65321616bf6 100644 --- a/lib/Target/X86/X86InstrInfo.cpp +++ b/lib/Target/X86/X86InstrInfo.cpp @@ -25,6 +25,13 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm) TM(tm), RI(tm, *this) { } +/// getDWARF_LABELOpcode - Return the opcode of the target's DWARF_LABEL +/// instruction if it has one. This is used by codegen passes that update +/// DWARF line number info as they modify the code. +unsigned X86InstrInfo::getDWARF_LABELOpcode() const { + return X86::DWARF_LABEL; +} + bool X86InstrInfo::isMoveInstr(const MachineInstr& MI, unsigned& sourceReg, diff --git a/lib/Target/X86/X86InstrInfo.h b/lib/Target/X86/X86InstrInfo.h index 3e0694f8b3f..4ceb98d1797 100644 --- a/lib/Target/X86/X86InstrInfo.h +++ b/lib/Target/X86/X86InstrInfo.h @@ -205,6 +205,11 @@ public: unsigned isLoadFromStackSlot(MachineInstr *MI, int &FrameIndex) const; unsigned isStoreToStackSlot(MachineInstr *MI, int &FrameIndex) const; + /// getDWARF_LABELOpcode - Return the opcode of the target's DWARF_LABEL + /// instruction if it has one. This is used by codegen passes that update + /// DWARF line number info as they modify the code. + virtual unsigned getDWARF_LABELOpcode() const; + /// convertToThreeAddress - This method must be implemented by targets that /// set the M_CONVERTIBLE_TO_3_ADDR flag. When this flag is set, the target /// may be able to convert a two-address instruction into a true