<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 10, 2015 at 9:57 AM, Aaron Ballman <span dir="ltr"><<a href="mailto:aaron.ballman@gmail.com" target="_blank">aaron.ballman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">aaron.ballman created this revision.<br>
aaron.ballman added a reviewer: dblaikie.<br>
aaron.ballman added a subscriber: llvm-commits.<br>
<br>
The move constructor for FullDependence is initializing the base class via a copy constructor instead of a move constructor. This patch adds a default move constructor to the base class, </blockquote><div><br></div><div>Defaulted moves still aren't supported by the min-spec of MSVC that LLVM requires, I believe? So we have to write them out by hand.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">and makes use of it from the derived class instead of half-moving/half-copying the object.<br>
<br>
I'm not certain if this was accidentally forgotten as part of r243791, or was purposeful.<br></blockquote><div><br>I don't think there was any particular intent on my part. Other than the fact that Dependence has only trivial members, so move and copy are the same operation, so I don't think this change actually makes any difference to the optimization opportunities/behavior/etc?<br><br>(we could keep the std::move in the derived class's dtor (& leave the base class as-is) - so that if the base class ever grows interesting move semantics it'll 'just work' there)<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
~Aaron<br>
<br>
<a href="http://reviews.llvm.org/D11911" rel="noreferrer" target="_blank">http://reviews.llvm.org/D11911</a><br>
<br>
Files:<br>
  include/llvm/Analysis/DependenceAnalysis.h<br>
<br>
Index: include/llvm/Analysis/DependenceAnalysis.h<br>
===================================================================<br>
--- include/llvm/Analysis/DependenceAnalysis.h<br>
+++ include/llvm/Analysis/DependenceAnalysis.h<br>
@@ -71,6 +71,7 @@<br>
   class Dependence {<br>
   protected:<br>
     Dependence(const Dependence &) = default;<br>
+    Dependence(Dependence &&) = default;<br>
<br>
   public:<br>
     Dependence(Instruction *Source,<br>
@@ -225,7 +226,7 @@<br>
                    unsigned Levels);<br>
<br>
     FullDependence(FullDependence &&RHS)<br>
-        : Dependence(RHS), Levels(RHS.Levels),<br>
+        : Dependence(std::move(RHS)), Levels(RHS.Levels),<br>
           LoopIndependent(RHS.LoopIndependent), Consistent(RHS.Consistent),<br>
           DV(std::move(RHS.DV)) {}<br>
<br>
<br>
<br>
</blockquote></div><br></div></div>