diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-07-11 17:01:17 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-07-11 17:01:17 +0000 |
commit | 744b3a5acdbd4d0fac9c6a7c9ad702502cc3cc37 (patch) | |
tree | d58ebbf7972f8977452bd3ef5b85fb71b9c78d6a | |
parent | d6d7abaf4ebbabb850aa9c20e1617f897608fe62 (diff) | |
download | llvm-744b3a5acdbd4d0fac9c6a7c9ad702502cc3cc37.tar.gz llvm-744b3a5acdbd4d0fac9c6a7c9ad702502cc3cc37.tar.bz2 llvm-744b3a5acdbd4d0fac9c6a7c9ad702502cc3cc37.tar.xz |
Remove TargetInstrInfo::copyRegToReg entirely.
Targets must now implement TargetInstrInfo::copyPhysReg instead. There is no
longer a default implementation forwarding to copyRegToReg.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108095 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/WritingAnLLVMBackend.html | 3 | ||||
-rw-r--r-- | include/llvm/Target/TargetInstrInfo.h | 20 | ||||
-rw-r--r-- | include/llvm/Target/TargetOpcodes.h | 3 | ||||
-rw-r--r-- | lib/CodeGen/TargetInstrInfoImpl.cpp | 17 | ||||
-rw-r--r-- | test/CodeGen/Blackfin/cmp64.ll | 4 | ||||
-rw-r--r-- | test/TableGen/TargetInstrInfo.td | 3 |
6 files changed, 9 insertions, 41 deletions
diff --git a/docs/WritingAnLLVMBackend.html b/docs/WritingAnLLVMBackend.html index d909a1a3fb..077dea0ed6 100644 --- a/docs/WritingAnLLVMBackend.html +++ b/docs/WritingAnLLVMBackend.html @@ -1310,7 +1310,8 @@ implementation in <tt>SparcInstrInfo.cpp</tt>: a direct store to a stack slot, return the register number of the destination and the <tt>FrameIndex</tt> of the stack slot.</li> -<li><tt>copyRegToReg</tt> — Copy values between a pair of registers.</li> +<li><tt>copyPhysReg</tt> — Copy values between a pair of physical + registers.</li> <li><tt>storeRegToStackSlot</tt> — Store a register value to a stack slot.</li> diff --git a/include/llvm/Target/TargetInstrInfo.h b/include/llvm/Target/TargetInstrInfo.h index 6a4573b4fd..6e69914320 100644 --- a/include/llvm/Target/TargetInstrInfo.h +++ b/include/llvm/Target/TargetInstrInfo.h @@ -357,7 +357,9 @@ public: virtual void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, DebugLoc DL, unsigned DestReg, unsigned SrcReg, - bool KillSrc) const =0; + bool KillSrc) const { + assert(0 && "Target didn't implement TargetInstrInfo::copyPhysReg!"); + } /// storeRegToStackSlot - Store the specified register of the given register /// class to the specified stack frame index. The store instruction is to be @@ -648,22 +650,6 @@ public: virtual ScheduleHazardRecognizer * CreateTargetPostRAHazardRecognizer(const InstrItineraryData&) const; - virtual void copyPhysReg(MachineBasicBlock &MBB, - MachineBasicBlock::iterator MI, DebugLoc DL, - unsigned DestReg, unsigned SrcReg, - bool KillSrc) const; - /// copyRegToReg - Legacy hook going away soon. Targets should implement - /// copyPhysReg instead. - virtual bool copyRegToReg(MachineBasicBlock &MBB, - MachineBasicBlock::iterator MI, - unsigned DestReg, unsigned SrcReg, - const TargetRegisterClass *DestRC, - const TargetRegisterClass *SrcRC, - DebugLoc DL) const { - assert(0 && "Target didn't implement TargetInstrInfo::copyPhysReg!"); - return false; - } - }; } // End llvm namespace diff --git a/include/llvm/Target/TargetOpcodes.h b/include/llvm/Target/TargetOpcodes.h index e710c70219..cb772ecd77 100644 --- a/include/llvm/Target/TargetOpcodes.h +++ b/include/llvm/Target/TargetOpcodes.h @@ -62,8 +62,7 @@ namespace TargetOpcode { /// used between instruction selection and MachineInstr creation, before /// virtual registers have been created for all the instructions, and it's /// only needed in cases where the register classes implied by the - /// instructions are insufficient. The actual MachineInstrs to perform - /// the copy are emitted with the TargetInstrInfo::copyRegToReg hook. + /// instructions are insufficient. It is emitted as a COPY MachineInstr. COPY_TO_REGCLASS = 10, /// DBG_VALUE - a mapping of the llvm.dbg.value intrinsic diff --git a/lib/CodeGen/TargetInstrInfoImpl.cpp b/lib/CodeGen/TargetInstrInfoImpl.cpp index 56cb4b19b8..5b1d5a62ff 100644 --- a/lib/CodeGen/TargetInstrInfoImpl.cpp +++ b/lib/CodeGen/TargetInstrInfoImpl.cpp @@ -438,20 +438,3 @@ ScheduleHazardRecognizer *TargetInstrInfoImpl:: CreateTargetPostRAHazardRecognizer(const InstrItineraryData &II) const { return (ScheduleHazardRecognizer *)new PostRAHazardRecognizer(II); } - -// Default implementation of copyPhysReg using copyRegToReg. -void TargetInstrInfoImpl::copyPhysReg(MachineBasicBlock &MBB, - MachineBasicBlock::iterator MI, - DebugLoc DL, - unsigned DestReg, unsigned SrcReg, - bool KillSrc) const { - assert(TargetRegisterInfo::isPhysicalRegister(DestReg)); - assert(TargetRegisterInfo::isPhysicalRegister(SrcReg)); - const TargetRegisterInfo *TRI = MBB.getParent()->getTarget().getRegisterInfo(); - const TargetRegisterClass *DRC = TRI->getPhysicalRegisterRegClass(DestReg); - const TargetRegisterClass *SRC = TRI->getPhysicalRegisterRegClass(SrcReg); - if (!copyRegToReg(MBB, MI, DestReg, SrcReg, DRC, SRC, DL)) - llvm_unreachable("Cannot emit physreg copy instruction"); - if (KillSrc) - llvm::prior(MI)->addRegisterKilled(SrcReg, TRI, true); -} diff --git a/test/CodeGen/Blackfin/cmp64.ll b/test/CodeGen/Blackfin/cmp64.ll index ef5bf45861..6c4f9c5bd7 100644 --- a/test/CodeGen/Blackfin/cmp64.ll +++ b/test/CodeGen/Blackfin/cmp64.ll @@ -1,8 +1,8 @@ ; RUN: llc < %s -march=bfin ; This test tries to use a JustCC register as a data operand for MOVEcc. It -; calls copyRegToReg(JustCC -> DP), failing because JustCC can only be copied to -; D. The proper solution would be to restrict the virtual register to D only. +; copies (JustCC -> DP), failing because JustCC can only be copied to D. +; The proper solution would be to restrict the virtual register to D only. define i32 @main() { entry: diff --git a/test/TableGen/TargetInstrInfo.td b/test/TableGen/TargetInstrInfo.td index 2871eb81df..146ef6fd76 100644 --- a/test/TableGen/TargetInstrInfo.td +++ b/test/TableGen/TargetInstrInfo.td @@ -83,8 +83,7 @@ class Inst<dag opnds, string asmstr, bits<8> opcode, // the pattern. // 6. Address expressions should become first-class entities. -// Simple copy instruction. isMoveInstr could easily be inferred from this, -// as could TargetRegisterInfo::copyRegToReg. +// Simple copy instruction. def MOV8rr : Inst<(ops R8:$dst, R8:$src), "mov $dst, $src", 0x88, MRMDestReg, [(set R8:$dst, R8:$src)]>; |