Correctly update bitvector in optAddVnAssertionMapping
authorMike Danes <onemihaid@hotmail.com>
Sat, 25 Mar 2017 07:45:15 +0000 (09:45 +0200)
committerMike Danes <onemihaid@hotmail.com>
Sat, 25 Mar 2017 21:59:23 +0000 (23:59 +0200)
When short bitvectors are used only the first assertion was stored in the map stored bitvector, all subsequent assertions were stored into copies of that bitvector.

Commit migrated from https://github.com/dotnet/coreclr/commit/fb604c571325fb1a2d4e2b0d5f98dce61f1f0475

src/coreclr/src/jit/assertionprop.cpp

index b804b96..87aa946 100644 (file)
@@ -1483,13 +1483,15 @@ void Compiler::optPrintVnAssertionMapping()
  */
 void Compiler::optAddVnAssertionMapping(ValueNum vn, AssertionIndex index)
 {
-    ASSERT_TP cur;
-    if (!optValueNumToAsserts->Lookup(vn, &cur))
+    ASSERT_TP* cur = optValueNumToAsserts->LookupPointer(vn);
+    if (cur == nullptr)
     {
-        cur = BitVecOps::MakeEmpty(apTraits);
-        optValueNumToAsserts->Set(vn, cur);
+        optValueNumToAsserts->Set(vn, BitVecOps::MakeSingleton(apTraits, index - 1));
+    }
+    else
+    {
+        BitVecOps::AddElemD(apTraits, *cur, index - 1);
     }
-    BitVecOps::AddElemD(apTraits, cur, index - 1);
 }
 
 /*****************************************************************************