<div>This is great!</div><div><br></div><div>- Lang.<br><br><div class="gmail_quote">On Fri, Aug 3, 2012 at 1:59 PM, Jakob Stoklund Olesen <span dir="ltr"><<a href="mailto:stoklund@2pi.dk" target="_blank">stoklund@2pi.dk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: stoklund<br>
Date: Fri Aug  3 15:59:32 2012<br>
New Revision: 161258<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=161258&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=161258&view=rev</a><br>
Log:<br>
Completely eliminate VNInfo flags.<br>
<br>
The 'unused' state of a value number can be represented as an invalid<br>
def SlotIndex. This also exposed code that shouldn't have been looking<br>
at unused value VNInfos.<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/CodeGen/LiveInterval.h<br>
    llvm/trunk/lib/CodeGen/LiveInterval.cpp<br>
    llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=161258&r1=161257&r2=161258&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=161258&r1=161257&r2=161258&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Fri Aug  3 15:59:32 2012<br>
@@ -40,13 +40,6 @@<br>
   /// definition and use points.<br>
   ///<br>
   class VNInfo {<br>
-  private:<br>
-    enum {<br>
-      IS_UNUSED       = 1<br>
-    };<br>
-<br>
-    unsigned char flags;<br>
-<br>
   public:<br>
     typedef BumpPtrAllocator Allocator;<br>
<br>
@@ -58,29 +51,19 @@<br>
<br>
     /// VNInfo constructor.<br>
     VNInfo(unsigned i, SlotIndex d)<br>
-      : flags(0), id(i), def(d)<br>
+      : id(i), def(d)<br>
     { }<br>
<br>
     /// VNInfo construtor, copies values from orig, except for the value number.<br>
     VNInfo(unsigned i, const VNInfo &orig)<br>
-      : flags(orig.flags), id(i), def(orig.def)<br>
+      : id(i), def(orig.def)<br>
     { }<br>
<br>
     /// Copy from the parameter into this VNInfo.<br>
     void copyFrom(VNInfo &src) {<br>
-      flags = src.flags;<br>
       def = src.def;<br>
     }<br>
<br>
-    /// Used for copying value number info.<br>
-    unsigned getFlags() const { return flags; }<br>
-    void setFlags(unsigned flags) { this->flags = flags; }<br>
-<br>
-    /// Merge flags from another VNInfo<br>
-    void mergeFlags(const VNInfo *VNI) {<br>
-      flags = (flags | VNI->flags) & ~IS_UNUSED;<br>
-    }<br>
-<br>
     /// Returns true if this value is defined by a PHI instruction (or was,<br>
     /// PHI instrucions may have been eliminated).<br>
     /// PHI-defs begin at a block boundary, all other defs begin at register or<br>
@@ -88,14 +71,10 @@<br>
     bool isPHIDef() const { return def.isBlock(); }<br>
<br>
     /// Returns true if this value is unused.<br>
-    bool isUnused() const { return flags & IS_UNUSED; }<br>
-    /// Set the "is unused" flag on this value.<br>
-    void setIsUnused(bool unused) {<br>
-      if (unused)<br>
-        flags |= IS_UNUSED;<br>
-      else<br>
-        flags &= ~IS_UNUSED;<br>
-    }<br>
+    bool isUnused() const { return !def.isValid(); }<br>
+<br>
+    /// Mark this value as unused.<br>
+    void markUnused() { def = SlotIndex(); }<br>
   };<br>
<br>
   /// LiveRange structure - This represents a simple register range in the<br>
<br>
Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=161258&r1=161257&r2=161258&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=161258&r1=161257&r2=161258&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Fri Aug  3 15:59:32 2012<br>
@@ -160,7 +160,7 @@<br>
       valnos.pop_back();<br>
     } while (!valnos.empty() && valnos.back()->isUnused());<br>
   } else {<br>
-    ValNo->setIsUnused(true);<br>
+    ValNo->markUnused();<br>
   }<br>
 }<br>
<br>
@@ -667,9 +667,6 @@<br>
     }<br>
   }<br>
<br>
-  // Merge the relevant flags.<br>
-  V2->mergeFlags(V1);<br>
-<br>
   // Now that V1 is dead, remove it.<br>
   markValNoForDeletion(V1);<br>
<br>
<br>
Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=161258&r1=161257&r2=161258&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=161258&r1=161257&r2=161258&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Fri Aug  3 15:59:32 2012<br>
@@ -706,7 +706,7 @@<br>
       continue;<br>
     if (VNI->isPHIDef()) {<br>
       // This is a dead PHI. Remove it.<br>
-      VNI->setIsUnused(true);<br>
+      VNI->markUnused();<br>
       NewLI.removeRange(*LII);<br>
       DEBUG(dbgs() << "Dead PHI at " << VNI->def << " may separate interval\n");<br>
       CanSeparate = true;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>