From d9664b2d57c16471ca517434d9e1daeae63fd3cd Mon Sep 17 00:00:00 2001 From: Mike Danes Date: Fri, 16 Jun 2017 21:50:07 +0300 Subject: [PATCH] Remove unnecessary bitvec allocation in assertion prop optVnNonNullPropCurStmt is called for each node and every time it allocates an empty BitVec because optNonNullAssertionProp_Call and optAssertionProp_Ind require it, they are also used in other code paths that do provide a non-empty BitVec. Commit migrated from https://github.com/dotnet/coreclr/commit/53cc741cb949c540834172ee0e813a01bdcfae28 --- src/coreclr/src/jit/assertionprop.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/coreclr/src/jit/assertionprop.cpp b/src/coreclr/src/jit/assertionprop.cpp index b3fcd2c..138d269 100644 --- a/src/coreclr/src/jit/assertionprop.cpp +++ b/src/coreclr/src/jit/assertionprop.cpp @@ -3524,13 +3524,13 @@ AssertionIndex Compiler::optAssertionIsNonNullInternal(GenTreePtr op, ASSERT_VAL // If local assertion prop use lcl comparison, else use VN comparison. if (!optLocalAssertionProp) { - ValueNum vn = op->gtVNPair.GetConservative(); - - if (BitVecOps::IsEmpty(apTraits, assertions)) + if (BitVecOps::MayBeUninit(assertions) || BitVecOps::IsEmpty(apTraits, assertions)) { return NO_ASSERTION_INDEX; } + ValueNum vn = op->gtVNPair.GetConservative(); + // Check each assertion to find if we have a vn == or != null assertion. BitVecOps::Iter iter(apTraits, assertions); unsigned index = 0; @@ -4855,7 +4855,7 @@ Compiler::fgWalkResult Compiler::optVNConstantPropCurStmt(BasicBlock* block, Gen // void Compiler::optVnNonNullPropCurStmt(BasicBlock* block, GenTreePtr stmt, GenTreePtr tree) { - ASSERT_TP empty = BitVecOps::MakeEmpty(apTraits); + ASSERT_TP empty = BitVecOps::UninitVal(); GenTreePtr newTree = nullptr; if (tree->OperGet() == GT_CALL) { -- 2.7.4