[llvm] r220645 - Revert "[PBQP] Unique-ptrify some PBQP Metadata structures. No functional change." (r220642)

David Blaikie dblaikie at gmail.com
Sun Oct 26 14:19:17 PDT 2014


On Sun, Oct 26, 2014 at 1:47 PM, Hans Wennborg <hans at chromium.org> wrote:

> On Sun, Oct 26, 2014 at 1:44 PM, Lang Hames <lhames at gmail.com> wrote:
> > Oh:
> >
> > This diagnostic occurred in the compiler generated function
> > 'llvm::PBQP::RegAlloc::NodeMetadata::NodeMetadata(const
> > llvm::PBQP::RegAlloc::NodeMetadata &)'
> >
> > That explains that, though it's less clear why VC thinks a copy
> constructor
> > is needed.
> >
> > Will have a fix shortly.
>
> Thanks! I think we've run into similar problems before where some
> object gets moved but VC is synthesizing a copy constructor instead,
> and fails to copy the unique_ptr member.
>

Yep - MSVC doesn't synthesize move operations, so if you don't provide one
explicityl, it'll try to synthesize/use a copy operation instead. Then
sadness.

You, unfortunately, just have to write out the move operations explicitly
to help MSVC along.


>
>
> > On Sun, Oct 26, 2014 at 1:36 PM, Lang Hames <lhames at gmail.com> wrote:
> >>
> >> That's odd. It's just a unique_ptr to an array - that should be
> supported.
> >> I'm going to try #including memory directly and recommit.
> >>
> >> - Lang.
> >>
> >> On Sun, Oct 26, 2014 at 12:50 PM, Hans Wennborg <hans at hanshq.net>
> wrote:
> >>>
> >>> Author: hans
> >>> Date: Sun Oct 26 14:50:13 2014
> >>> New Revision: 220645
> >>>
> >>> URL: http://llvm.org/viewvc/llvm-project?rev=220645&view=rev
> >>> Log:
> >>> Revert "[PBQP] Unique-ptrify some PBQP Metadata structures. No
> functional
> >>> change." (r220642)
> >>>
> >>> It broke the Windows build:
> >>>
> >>>   [1/19] Building CXX object
> >>> lib\CodeGen\CMakeFiles\LLVMCodeGen.dir\RegAllocPBQP.cpp.obj
> >>>
> >>>
> C:\bb-win7\ninja-clang-i686-msc17-R\llvm-project\llvm\include\llvm/CodeGen/RegAllocPBQP.h(132)
> >>> : error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access
> private
> >>> member declared in class 'std::unique_ptr<_Ty>'
> >>>
> >>>      with
> >>>      [
> >>>          _Ty=unsigned int []
> >>>      ]
> >>>      D:\Program Files (x86)\Microsoft Visual Studio
> >>> 11.0\VC\include\memory(1600) : see declaration of
> >>> 'std::unique_ptr<_Ty>::unique_ptr'
> >>>      with
> >>>      [
> >>>          _Ty=unsigned int []
> >>>      ]
> >>>      This diagnostic occurred in the compiler generated function
> >>> 'llvm::PBQP::RegAlloc::NodeMetadata::NodeMetadata(const
> >>> llvm::PBQP::RegAlloc::NodeMetadata &)'
> >>>
> >>> Modified:
> >>>     llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h
> >>>
> >>> Modified: llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h
> >>> URL:
> >>>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h?rev=220645&r1=220644&r2=220645&view=diff
> >>>
> >>>
> ==============================================================================
> >>> --- llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h (original)
> >>> +++ llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h Sun Oct 26 14:50:13
> >>> 2014
> >>> @@ -62,15 +62,20 @@ public:
> >>>      delete[] ColCounts;
> >>>    }
> >>>
> >>> +  ~MatrixMetadata() {
> >>> +    delete[] UnsafeRows;
> >>> +    delete[] UnsafeCols;
> >>> +  }
> >>> +
> >>>    unsigned getWorstRow() const { return WorstRow; }
> >>>    unsigned getWorstCol() const { return WorstCol; }
> >>> -  const bool* getUnsafeRows() const { return UnsafeRows.get(); }
> >>> -  const bool* getUnsafeCols() const { return UnsafeCols.get(); }
> >>> +  const bool* getUnsafeRows() const { return UnsafeRows; }
> >>> +  const bool* getUnsafeCols() const { return UnsafeCols; }
> >>>
> >>>  private:
> >>>    unsigned WorstRow, WorstCol;
> >>> -  std::unique_ptr<bool[]> UnsafeRows;
> >>> -  std::unique_ptr<bool[]> UnsafeCols;
> >>> +  bool* UnsafeRows;
> >>> +  bool* UnsafeCols;
> >>>  };
> >>>
> >>>  class NodeMetadata {
> >>> @@ -83,6 +88,7 @@ public:
> >>>                   NotProvablyAllocatable } ReductionState;
> >>>
> >>>    NodeMetadata() : RS(Unprocessed), DeniedOpts(0),
> >>> OptUnsafeEdges(nullptr){}
> >>> +  ~NodeMetadata() { delete[] OptUnsafeEdges; }
> >>>
> >>>    void setVReg(unsigned VReg) { this->VReg = VReg; }
> >>>    unsigned getVReg() const { return VReg; }
> >>> @@ -94,7 +100,7 @@ public:
> >>>
> >>>    void setup(const Vector& Costs) {
> >>>      NumOpts = Costs.getLength() - 1;
> >>> -    OptUnsafeEdges = std::unique_ptr<unsigned[]>(new
> >>> unsigned[NumOpts]());
> >>> +    OptUnsafeEdges = new unsigned[NumOpts]();
> >>>    }
> >>>
> >>>    ReductionState getReductionState() const { return RS; }
> >>> @@ -118,15 +124,15 @@ public:
> >>>
> >>>    bool isConservativelyAllocatable() const {
> >>>      return (DeniedOpts < NumOpts) ||
> >>> -      (std::find(&OptUnsafeEdges[0], &OptUnsafeEdges[NumOpts], 0) !=
> >>> -       &OptUnsafeEdges[NumOpts]);
> >>> +      (std::find(OptUnsafeEdges, OptUnsafeEdges + NumOpts, 0) !=
> >>> +       OptUnsafeEdges + NumOpts);
> >>>    }
> >>>
> >>>  private:
> >>>    ReductionState RS;
> >>>    unsigned NumOpts;
> >>>    unsigned DeniedOpts;
> >>> -  std::unique_ptr<unsigned[]> OptUnsafeEdges;
> >>> +  unsigned* OptUnsafeEdges;
> >>>    unsigned VReg;
> >>>    OptionToRegMap OptionRegs;
> >>>  };
> >>>
> >>>
> >>> _______________________________________________
> >>> llvm-commits mailing list
> >>> llvm-commits at cs.uiuc.edu
> >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >>
> >>
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141026/617666b6/attachment.html>


More information about the llvm-commits mailing list