llvm-project/llvm/lib/Transforms/IPO
Andrew Litteken e6ae623314 [IROutliner] Adding support for consolidating functions with different output arguments.
Certain regions can have values introduced inside the region that are
used outside of the region. These may not be the same for each similar
region, so we must create one over arching set of arguments for the
consolidated function.

We do this by iterating over the outputs for each extracted function,
and creating as many different arguments to encapsulate the different
outputs sets. For each output set, we create a different block with the
necessary stores from the value to the output register. There is then
one switch statement, controlled by an argument to the function, to
differentiate which block to use.

Changed Tests for consistency:
llvm/test/Transforms/IROutliner/extraction.ll
llvm/test/Transforms/IROutliner/illegal-assumes.ll
llvm/test/Transforms/IROutliner/illegal-memcpy.ll
llvm/test/Transforms/IROutliner/illegal-memmove.ll
llvm/test/Transforms/IROutliner/illegal-vaarg.ll

Tests to test new functionality:
llvm/test/Transforms/IROutliner/outlining-different-output-blocks.ll
llvm/test/Transforms/IROutliner/outlining-remapped-outputs.ll
llvm/test/Transforms/IROutliner/outlining-same-output-blocks.ll

Reviewers: jroelofs, paquette

Differential Revision: https://reviews.llvm.org/D87296
2020-12-28 16:17:07 -06:00
..
AlwaysInliner.cpp [coroutine] should disable inline before calling coro split 2020-12-08 08:53:08 -08:00
Annotation2Metadata.cpp Add pass to add !annotate metadata from @llvm.global.annotations. 2020-11-16 14:57:11 +00:00
ArgumentPromotion.cpp [Transforms] Use llvm::append_range (NFC) 2020-12-27 09:57:29 -08:00
Attributor.cpp [NFC] Reduce include files dependency. 2020-12-03 18:25:05 +03:00
AttributorAttributes.cpp [NFC] Reduce include files dependency. 2020-12-03 18:25:05 +03:00
BarrierNoopPass.cpp
BlockExtractor.cpp [BlockExtract][NewPM] Port -extract-blocks to NPM 2020-10-21 12:51:11 -07:00
CMakeLists.txt [IRSim][IROutliner] Adding the extraction basics for the IROutliner. 2020-12-17 11:27:26 -06:00
CalledValuePropagation.cpp [IR] Replace all uses of CallBase::getCalledValue() with getCalledOperand(). 2020-04-27 22:17:03 -07:00
ConstantMerge.cpp [Alignment][NFC] migrate DataLayout::getPreferredAlignment 2020-06-29 11:24:36 +00:00
CrossDSOCFI.cpp
DeadArgumentElimination.cpp [DAE] MarkLive in MarkValue(MaybeLive) if any use is live 2020-10-02 10:55:08 -07:00
ElimAvailExtern.cpp
ExtractGV.cpp
ForceFunctionAttrs.cpp Revert "[IR] add fn attr for no_stack_protector; prevent inlining on mismatch" 2020-11-17 17:27:14 -08:00
FunctionAttrs.cpp [NFC] Reduce include files dependency and AA header cleanup (part 2). 2020-12-17 14:04:48 +03:00
FunctionImport.cpp Fix some clang-tidy bugprone-argument-comment issues 2020-09-19 20:41:25 -07:00
GlobalDCE.cpp
GlobalOpt.cpp [SVE]Clarify TypeSize comparisons in llvm/lib/Transforms 2020-10-23 09:15:17 +01:00
GlobalSplit.cpp
HotColdSplitting.cpp [HotColdSplit] Reflect full cost of parameters in split penalty 2020-12-18 17:06:17 -08:00
IPO.cpp [IRSim][IROutliner] Adding the extraction basics for the IROutliner. 2020-12-17 11:27:26 -06:00
IROutliner.cpp [IROutliner] Adding support for consolidating functions with different output arguments. 2020-12-28 16:17:07 -06:00
InferFunctionAttrs.cpp
InlineSimple.cpp Revert "Revert "[llvm][NFC] Cleanup uses of std::function in Inlining-related APIs"" 2020-05-15 12:29:16 -07:00
Inliner.cpp [NFC] Reduce include files dependency and AA header cleanup (part 2). 2020-12-17 14:04:48 +03:00
Internalize.cpp
LoopExtractor.cpp [LoopExtract][NewPM] Port -loop-extract to NPM 2020-10-13 22:55:42 -07:00
LowerTypeTests.cpp [Transforms] Use llvm::append_range (NFC) 2020-12-27 09:57:29 -08:00
MergeFunctions.cpp Migrate deprecated DebugLoc::get to DILocation::get 2020-12-11 12:45:22 -08:00
OpenMPOpt.cpp [OpenMP][NFC] Provide a new remark and documentation 2020-12-17 14:38:26 -06:00
PartialInlining.cpp [PartialInliner]: Handle code regions in a switch stmt cases 2020-11-02 14:32:45 -05:00
PassManagerBuilder.cpp [IRSim][IROutliner] Adding the extraction basics for the IROutliner. 2020-12-17 11:27:26 -06:00
PruneEH.cpp [PruneEH][NFC] Use CallGraphUpdater in PruneEH 2020-09-14 14:43:19 -07:00
SCCP.cpp
SampleContextTracker.cpp [IPO] Fix operator precedence warning. NFCI. 2020-12-07 18:23:54 +00:00
SampleProfile.cpp [CSSPGO] Consume pseudo-probe-based AutoFDO profile 2020-12-16 15:57:18 -08:00
SampleProfileProbe.cpp [CSSPGO] Consume pseudo-probe-based AutoFDO profile 2020-12-16 15:57:18 -08:00
StripDeadPrototypes.cpp
StripSymbols.cpp [NewPM] Port strip* passes to NPM 2020-09-15 18:25:12 -07:00
SyntheticCountsPropagation.cpp [CallGraph] Add support for callback call sites 2020-07-01 13:44:11 -07:00
ThinLTOBitcodeWriter.cpp [NFC] Reduce include files dependency and AA header cleanup (part 2). 2020-12-17 14:04:48 +03:00
WholeProgramDevirt.cpp [Transforms] Use llvm::append_range (NFC) 2020-12-27 09:57:29 -08:00