llvm-project/llvm/lib/Transforms/Utils
Joseph Tremoulet e92e0a9042 Fix inliner funclet unwind memoization
Summary:
The inliner may need to determine where a given funclet unwinds to,
and this determination may depend on other funclets throughout the
funclet tree.  The code that performs this walk in getUnwindDestToken
memoizes results to avoid redundant computations.  In the case that
a funclet's unwind destination is derived from its ancestor, there's
code to walk back down the tree from the ancestor updating the memo
map of its descendants to record the unwind destination.  This change
fixes that code to account for the case that some descendant has a
different unwind destination, which can happen if that unwind dest
is a descendant of the EHPad being queried and thus didn't determine
its unwind destination.

Also update test inline-funclets.ll, which is supposed to cover such
scenarios, to include a case that fails an assertion without this fix
but passes with it.

Fixes PR29151.


Reviewers: majnemer

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D24117

llvm-svn: 280610
2016-09-04 01:23:20 +00:00
..
ASanStackFrameLayout.cpp ASan: remove variable only used in assertions build 2016-08-29 19:12:20 +00:00
AddDiscriminators.cpp Consistently use FunctionAnalysisManager 2016-08-09 00:28:15 +00:00
BasicBlockUtils.cpp Apply clang-tidy's modernize-loop-convert to most of lib/Transforms. 2016-06-26 12:28:59 +00:00
BreakCriticalEdges.cpp [PM] Port BreakCriticalEdges to the new PM. 2016-07-22 18:04:25 +00:00
BuildLibCalls.cpp Recommitting r275284: add support to inline __builtin_mempcpy 2016-07-29 18:23:18 +00:00
BypassSlowDivision.cpp Clarify that the bypassSlowDivision optimization operates on a single BB [v2] 2016-01-04 23:18:58 +00:00
CMakeLists.txt Added ThinLTO inlining statistics 2016-07-29 00:27:16 +00:00
CloneFunction.cpp [CloneFunction] Don't remove unrelated nodes from the CGSSC 2016-08-19 16:37:40 +00:00
CloneModule.cpp Apply clang-tidy's modernize-loop-convert to most of lib/Transforms. 2016-06-26 12:28:59 +00:00
CmpInstAnalysis.cpp move decomposeBitTestICmp() to Transforms/Utils; NFC 2016-07-20 17:18:45 +00:00
CodeExtractor.cpp CodeExtractor : Add ability to preserve profile data. 2016-08-02 02:15:45 +00:00
CtorUtils.cpp TransformUtils: Remove implicit ilist iterator conversions, NFC 2015-10-13 02:39:05 +00:00
DemoteRegToStack.cpp TransformUtils: Remove implicit ilist iterator conversions, NFC 2015-10-13 02:39:05 +00:00
Evaluator.cpp Use the range variant of find instead of unpacking begin/end 2016-08-11 22:21:41 +00:00
FlattenCFG.cpp [FlattenCFG] Simplify + remove unused variable. NFCI. 2016-08-05 20:53:35 +00:00
FunctionImportUtils.cpp IR: Introduce local_unnamed_addr attribute. 2016-06-14 21:01:22 +00:00
GlobalStatus.cpp IR: Introduce local_unnamed_addr attribute. 2016-06-14 21:01:22 +00:00
ImportedFunctionsInliningStatistics.cpp Imported statistics types changes 2016-08-02 22:18:47 +00:00
InlineFunction.cpp Fix inliner funclet unwind memoization 2016-09-04 01:23:20 +00:00
InstructionNamer.cpp Apply clang-tidy's modernize-loop-convert to most of lib/Transforms. 2016-06-26 12:28:59 +00:00
IntegerDivision.cpp TransformUtils: Avoid getNodePtrUnchecked() in integer division, NFC 2016-02-21 20:14:29 +00:00
LCSSA.cpp Use the range variant of find instead of unpacking begin/end 2016-08-11 22:21:41 +00:00
LLVMBuild.txt [PM/AA] Remove the last relics of the separate IPA library from LLVM, 2015-08-18 17:51:53 +00:00
Local.cpp Refactor replaceDominatedUsesWith to have a flag to control whether to replace uses in BB itself. 2016-09-01 23:26:48 +00:00
LoopSimplify.cpp [LoopSimplify] Rebuild LCSSA for the inner loop after separating nested loops. 2016-08-09 22:44:56 +00:00
LoopUnroll.cpp [LoopUnroll] Don't clear out the AssumptionCache on each loop 2016-08-16 21:09:46 +00:00
LoopUnrollRuntime.cpp [UNROLL] Postpone ScalarEvolution::forgetLoop after TripCountSC is expanded 2016-08-25 16:17:18 +00:00
LoopUtils.cpp [LoopUnroll] Use OptimizationRemarkEmitter directly not via the analysis pass 2016-08-26 15:58:34 +00:00
LoopVersioning.cpp Rename LoopAccessAnalysis to LoopAccessLegacyAnalysis /NFC 2016-07-08 20:55:26 +00:00
LowerInvoke.cpp [PM] Port LowerInvoke to the new pass manager 2016-08-12 17:28:27 +00:00
LowerSwitch.cpp Use the range variant of remove_if instead of unpacking begin/end 2016-08-12 04:32:37 +00:00
Mem2Reg.cpp Consistently use FunctionAnalysisManager 2016-08-09 00:28:15 +00:00
MemorySSA.cpp [MemorySSA] Remove unused field. NFC. 2016-08-22 23:40:01 +00:00
MetaRenamer.cpp Whoops, remove trailing whitespace. 2015-08-27 05:37:12 +00:00
ModuleUtils.cpp [ThinLTO] Prevent importing of "llvm.used" values 2016-04-20 14:39:45 +00:00
NameAnonFunctions.cpp [PM] Port NameAnonFunction pass to new pass manager 2016-08-12 14:03:36 +00:00
PromoteMemoryToRegister.cpp Correct IDF calculator for ReverseIDF 2016-04-19 06:13:28 +00:00
SSAUpdater.cpp Use the range variant of find instead of unpacking begin/end 2016-08-11 22:21:41 +00:00
SanitizerStats.cpp Fix Clang-tidy modernize-use-nullptr and modernize-use-override warnings; other minor fixes. 2016-01-26 18:48:36 +00:00
SimplifyCFG.cpp [SimplifyCFG] Add a workaround to fix PR30188 2016-09-02 07:29:00 +00:00
SimplifyIndVar.cpp [IndVars] Remove -liv-reduce 2016-06-05 18:01:12 +00:00
SimplifyInstructions.cpp revert r280432: 2016-09-02 01:47:13 +00:00
SimplifyLibCalls.cpp Use range algorithms instead of unpacking begin/end 2016-08-11 21:15:00 +00:00
SplitModule.cpp Move instances of std::function. 2016-06-12 16:13:55 +00:00
SymbolRewriter.cpp [PM] Port SymbolRewriter to the new PM 2016-07-25 20:52:00 +00:00
UnifyFunctionExitNodes.cpp Apply clang-tidy's modernize-loop-convert to most of lib/Transforms. 2016-06-26 12:28:59 +00:00
Utils.cpp [PM] Port LowerInvoke to the new pass manager 2016-08-12 17:28:27 +00:00
ValueMapper.cpp Use range algorithms instead of unpacking begin/end 2016-08-11 21:15:00 +00:00