Author: hans Date: Mon Jan 23 12:08:20 2017 New Revision: 292810 URL: http://llvm.org/viewvc/llvm-project?rev=292810&view=rev Log: Merging r292583: ------------------------------------------------------------------------ r292583 | dannyb | 2017-01-19 22:38:41 -0800 (Thu, 19 Jan 2017) | 4 lines
NewGVN: Fix PR 31682, an overactive assert. Part of the assert has been left active for further debugging. The other part has been turned into a stat for tracking for the moment. ------------------------------------------------------------------------ Added: llvm/branches/release_40/test/Transforms/NewGVN/pr31682.ll - copied unchanged from r292583, llvm/trunk/test/Transforms/NewGVN/pr31682.ll Modified: llvm/branches/release_40/ (props changed) llvm/branches/release_40/lib/Transforms/Scalar/NewGVN.cpp Propchange: llvm/branches/release_40/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Jan 23 12:08:20 2017 @@ -1,3 +1,3 @@ /llvm/branches/Apple/Pertwee:110850,110961 /llvm/branches/type-system-rewrite:133420-134817 -/llvm/trunk:155241,291858-291859,291863,291875,291966,291968,291979,292133,292242,292254-292255,292280,292641,292667,292711 +/llvm/trunk:155241,291858-291859,291863,291875,291966,291968,291979,292133,292242,292254-292255,292280,292583,292641,292667,292711 Modified: llvm/branches/release_40/lib/Transforms/Scalar/NewGVN.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_40/lib/Transforms/Scalar/NewGVN.cpp?rev=292810&r1=292809&r2=292810&view=diff ============================================================================== --- llvm/branches/release_40/lib/Transforms/Scalar/NewGVN.cpp (original) +++ llvm/branches/release_40/lib/Transforms/Scalar/NewGVN.cpp Mon Jan 23 12:08:20 2017 @@ -85,6 +85,8 @@ STATISTIC(NumGVNLeaderChanges, "Number o STATISTIC(NumGVNSortedLeaderChanges, "Number of sorted leader changes"); STATISTIC(NumGVNAvoidedSortedLeaderChanges, "Number of avoided sorted leader changes"); +STATISTIC(NumGVNNotMostDominatingLeader, + "Number of times a member dominated it's new classes' leader"); //===----------------------------------------------------------------------===// // GVN Pass @@ -1073,17 +1075,20 @@ void NewGVN::moveValueToNewCongruenceCla if (I == OldClass->NextLeader.first) OldClass->NextLeader = {nullptr, ~0U}; - // The new instruction and new class leader may either be siblings in the - // dominator tree, or the new class leader should dominate the new member - // instruction. We simply check that the member instruction does not properly - // dominate the new class leader. - assert( - !isa<Instruction>(NewClass->RepLeader) || !NewClass->RepLeader || - I == NewClass->RepLeader || - !DT->properlyDominates( + // It's possible, though unlikely, for us to discover equivalences such + // that the current leader does not dominate the old one. + // This statistic tracks how often this happens. + // We assert on phi nodes when this happens, currently, for debugging, because + // we want to make sure we name phi node cycles properly. + if (isa<Instruction>(NewClass->RepLeader) && NewClass->RepLeader && + I != NewClass->RepLeader && + DT->properlyDominates( I->getParent(), - cast<Instruction>(NewClass->RepLeader)->getParent()) && - "New class for instruction should not be dominated by instruction"); + cast<Instruction>(NewClass->RepLeader)->getParent())) { + ++NumGVNNotMostDominatingLeader; + assert(!isa<PHINode>(I) && + "New class for instruction should not be dominated by instruction"); + } if (NewClass->RepLeader != I) { auto DFSNum = InstrDFS.lookup(I); _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits