From cbfeec668bb338cbc46107f568e867d53e242bd9 Mon Sep 17 00:00:00 2001 From: OCHyams Date: Wed, 29 Mar 2023 13:13:45 +0100 Subject: [PATCH] [Assignment Tracking][NFC] Reduce work done in fragment overlap calculation Only calculate fragment overlaps for partially stack homed variables. This filter is already applied to the rest of the analysis - this change simply prevents some unnecessary work. Reviewed By: jmorse Differential Revision: https://reviews.llvm.org/D145515 --- llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp b/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp index e438241..4a4e537 100644 --- a/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp +++ b/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp @@ -1851,6 +1851,7 @@ getUntaggedStoreAssignmentInfo(const Instruction &I, const DataLayout &Layout) { /// to iterate over the function as they can be achieved together in one pass. static AssignmentTrackingLowering::OverlapMap buildOverlapMapAndRecordDeclares( Function &Fn, FunctionVarLocsBuilder *FnVarLocs, + const DenseSet &VarsWithStackSlot, AssignmentTrackingLowering::UntaggedStoreAssignmentMap &UntaggedStoreVars, unsigned &TrackedVariablesVectorSize) { DenseSet Seen; @@ -1871,6 +1872,8 @@ static AssignmentTrackingLowering::OverlapMap buildOverlapMapAndRecordDeclares( } else if (auto *DII = dyn_cast(&I)) { DebugVariable DV = DebugVariable(DII); DebugAggregate DA = {DV.getVariable(), DV.getInlinedAt()}; + if (!VarsWithStackSlot.contains(DA)) + continue; if (Seen.insert(DV).second) FragmentMap[DA].push_back(DV); } else if (auto Info = getUntaggedStoreAssignmentInfo( @@ -1895,6 +1898,8 @@ static AssignmentTrackingLowering::OverlapMap buildOverlapMapAndRecordDeclares( DebugVariable DV = DebugVariable(DAI->getVariable(), FragInfo, DAI->getDebugLoc().getInlinedAt()); DebugAggregate DA = {DV.getVariable(), DV.getInlinedAt()}; + if (!VarsWithStackSlot.contains(DA)) + continue; // Cache this info for later. UntaggedStoreVars[&I].push_back( @@ -1972,7 +1977,8 @@ bool AssignmentTrackingLowering::run(FunctionVarLocsBuilder *FnVarLocsBuilder) { // neither does LiveDebugVariables) because that is difficult to do and // appears to be rare occurance. VarContains = buildOverlapMapAndRecordDeclares( - Fn, FnVarLocs, UntaggedStoreVars, TrackedVariablesVectorSize); + Fn, FnVarLocs, *VarsWithStackSlot, UntaggedStoreVars, + TrackedVariablesVectorSize); // Prepare for traversal. ReversePostOrderTraversal RPOT(&Fn); -- 2.7.4