RegisterCoalescer: With subrange liveness there may be no RedefVNI for unused lanes.
authorMatthias Braun <matze@braunis.de>
Wed, 24 Dec 2014 02:11:48 +0000 (02:11 +0000)
committerMatthias Braun <matze@braunis.de>
Wed, 24 Dec 2014 02:11:48 +0000 (02:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224805 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegisterCoalescer.cpp

index 8220bd4613654e55fb049a961ffbf40e1d6b0314..cc4d5590b6a906d9b464bf5b2b758222db82b948 100644 (file)
@@ -1817,9 +1817,12 @@ JoinVals::analyzeValue(unsigned ValNo, JoinVals &Other) {
       // not important.
       if (Redef) {
         V.RedefVNI = LR.Query(VNI->def).valueIn();
       // not important.
       if (Redef) {
         V.RedefVNI = LR.Query(VNI->def).valueIn();
-        assert(V.RedefVNI && "Instruction is reading nonexistent value");
-        computeAssignment(V.RedefVNI->id, Other);
-        V.ValidLanes |= Vals[V.RedefVNI->id].ValidLanes;
+        assert(TrackSubRegLiveness || V.RedefVNI &&
+               "Instruction is reading nonexistent value");
+        if (V.RedefVNI != nullptr) {
+          computeAssignment(V.RedefVNI->id, Other);
+          V.ValidLanes |= Vals[V.RedefVNI->id].ValidLanes;
+        }
       }
 
       // An IMPLICIT_DEF writes undef values.
       }
 
       // An IMPLICIT_DEF writes undef values.