[PATCH] D38128: Handle COPYs of physregs better (regalloc hints)

Jonas Paulsson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 10 04:24:19 PDT 2017


jonpa added inline comments.


================
Comment at: include/llvm/CodeGen/MachineRegisterInfo.h:755
+  /// register allocation hints for VReg.
+  const std::pair<unsigned, SmallVector<unsigned, 4>>
+  &getRegAllocationHints(unsigned VReg) const {
----------------
qcolombet wrote:
> Could we use SmallVectorImpl to not leak the size of the vector?
I'm not sure I tried all atlernatives, but there seems to be some constructor missing or something, because I get:


```
include/llvm/ADT/IndexedMap.h:42:29: error: no matching function for call to ‘std::pair<unsigned int, llvm::SmallVectorImpl<unsigned int> >::pair()’
     IndexedMap() : nullVal_(T()) {}
                             ^~~
```
I simply did


```
@ -89,11 +89,11 @@ private:
   /// type and hints vector making up the allocation hints. Only the first
   /// hint may be target specific, and in that case this is reflected by the
   /// first member of the pair being non-zero. If the hinted register is
   /// virtual, it means the allocator should prefer the physical register
   /// allocated to it if any.
-  IndexedMap<std::pair<unsigned, SmallVector<unsigned, 4>>,
+  IndexedMap<std::pair<unsigned, SmallVectorImpl<unsigned>>,
              VirtReg2IndexFunctor> RegAllocHints;
 
   /// PhysRegUseDefLists - This is an array of the head of the use/def list for
   /// physical registers.
   std::unique_ptr<MachineOperand *[]> PhysRegUseDefLists;
@@ -750,11 +750,11 @@ public:
     return Hint.first ? 0 : Hint.second;
   }
 
   /// getRegAllocationHints - Return a reference to the vector of all
   /// register allocation hints for VReg.
-  const std::pair<unsigned, SmallVector<unsigned, 4>>
+  const std::pair<unsigned, SmallVectorImpl<unsigned>>
   &getRegAllocationHints(unsigned VReg) const {
     assert(TargetRegisterInfo::isVirtualRegister(VReg));
     return RegAllocHints[VReg];
   }
```

BTW, it would be nice to know how SmallVector would leak if using it here...


https://reviews.llvm.org/D38128





More information about the llvm-commits mailing list