[RewriteStatepointsForGC] Fix debug assertion during derivable pointer rematerialization
authorIgor Laevsky <igmyrj@gmail.com>
Thu, 21 May 2015 13:02:14 +0000 (13:02 +0000)
committerIgor Laevsky <igmyrj@gmail.com>
Thu, 21 May 2015 13:02:14 +0000 (13:02 +0000)
Correct assertion would be that there is no other uses from chain we are currently cloning. It is ok to have other uses of values not from this chain.

Differential Revision: http://reviews.llvm.org/D9882

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237899 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/RewriteStatepointsForGC.cpp

index 06ade397cfacb16b3898d7c93b6ef0782f7037b1..1f1e745439f3ce58b19d6a6a1608064438a78183 100644 (file)
@@ -1944,12 +1944,12 @@ static void rematerializeLiveValues(CallSite CS,
           assert(LastValue);
           ClonedValue->replaceUsesOfWith(LastValue, LastClonedValue);
 #ifndef NDEBUG
-          // Assert that cloned instruction does not use any instructions
-          // other than LastClonedValue
-          for (auto OpValue: ClonedValue->operand_values()) {
-            if (isa<Instruction>(OpValue))
-              assert(OpValue == LastClonedValue &&
-                     "unexpected use found in rematerialized value");
+          // Assert that cloned instruction does not use any instructions from
+          // this chain other than LastClonedValue
+          for (auto OpValue : ClonedValue->operand_values()) {
+            assert(std::find(ChainToBase.begin(), ChainToBase.end(), OpValue) ==
+                       ChainToBase.end() &&
+                   "incorrect use in rematerialization chain");
           }
 #endif
         }