[llvm] r283316 - [AVR] Add AVRRegisterInfo::splitReg function

Dylan McKay via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 5 06:27:31 PDT 2016


Author: dylanmckay
Date: Wed Oct  5 08:27:30 2016
New Revision: 283316

URL: http://llvm.org/viewvc/llvm-project?rev=283316&view=rev
Log:
[AVR] Add AVRRegisterInfo::splitReg function

No tests are included just yet - this is used from the pseudo
instruction expander pass, which hasn't been pulled in-tree yet.

Modified:
    llvm/trunk/lib/Target/AVR/AVRRegisterInfo.cpp
    llvm/trunk/lib/Target/AVR/AVRRegisterInfo.h

Modified: llvm/trunk/lib/Target/AVR/AVRRegisterInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AVR/AVRRegisterInfo.cpp?rev=283316&r1=283315&r2=283316&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AVR/AVRRegisterInfo.cpp (original)
+++ llvm/trunk/lib/Target/AVR/AVRRegisterInfo.cpp Wed Oct  5 08:27:30 2016
@@ -253,4 +253,14 @@ AVRRegisterInfo::getPointerRegClass(cons
   return &AVR::PTRDISPREGSRegClass;
 }
 
+void AVRRegisterInfo::splitReg(unsigned Reg,
+                               unsigned &LoReg,
+                               unsigned &HiReg) const {
+    assert(AVR::DREGSRegClass.contains(Reg) && "can only split 16-bit registers");
+
+    LoReg = getSubReg(Reg, AVR::sub_lo);
+    HiReg = getSubReg(Reg, AVR::sub_hi);
+}
+
 } // end of namespace llvm
+

Modified: llvm/trunk/lib/Target/AVR/AVRRegisterInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AVR/AVRRegisterInfo.h?rev=283316&r1=283315&r2=283316&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AVR/AVRRegisterInfo.h (original)
+++ llvm/trunk/lib/Target/AVR/AVRRegisterInfo.h Wed Oct  5 08:27:30 2016
@@ -42,13 +42,15 @@ public:
                            unsigned FIOperandNum,
                            RegScavenger *RS = NULL) const override;
 
-  /// Debug information queries.
   unsigned getFrameRegister(const MachineFunction &MF) const override;
 
-  /// Returns a TargetRegisterClass used for pointer values.
   const TargetRegisterClass *
   getPointerRegClass(const MachineFunction &MF,
                      unsigned Kind = 0) const override;
+
+  /// Splits a 16-bit `DREGS` register into the lo/hi register pair.
+  /// \param Reg A 16-bit register to split.
+  void splitReg(unsigned Reg, unsigned &LoReg, unsigned &HiReg) const;
 };
 
 } // end namespace llvm




More information about the llvm-commits mailing list