llvm-project/llvm/lib/Transforms/IPO
Alina Sbirlea 2312a06c87 [SCEV] Add option to forget everything in SCEV.
Summary:
Create a method to forget everything in SCEV.
Add a cl::opt and PassManagerBuilder option to use this in LoopUnroll.

Motivation: Certain Halide applications spend a very long time compiling in forgetLoop, and prefer to forget everything and rebuild SCEV from scratch.
Sample difference in compile time reduction: 21.04 to 14.78 using current ToT release build.
Testcase showcasing this cannot be opensourced and is fairly large.

The option disabled by default, but it may be desirable to enable by
default. Evidence in favor (two difference runs on different days/ToT state):

File Before (s) After (s)
clang-9.bc 7267.91 6639.14
llvm-as.bc 194.12 194.12
llvm-dis.bc 62.50 62.50
opt.bc 1855.85 1857.53

File Before (s) After (s)
clang-9.bc 8588.70 7812.83
llvm-as.bc 196.20 194.78
llvm-dis.bc 61.55 61.97
opt.bc 1739.78 1886.26

Reviewers: sanjoy

Subscribers: mehdi_amini, jlebar, zzheng, javed.absar, dmgreen, jdoerfert, llvm-commits

Tags: #llvm

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

llvm-svn: 358304
2019-04-12 19:16:07 +00:00
..
AlwaysInliner.cpp Provide reason messages for unviable inlining 2019-02-01 10:44:43 +00:00
ArgumentPromotion.cpp [ArgPromotion] Set debug location at updated callsites 2019-04-02 17:42:17 +00:00
BarrierNoopPass.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
BlockExtractor.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CMakeLists.txt Hot cold splitting pass 2018-09-07 15:03:49 +00:00
CalledValuePropagation.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ConstantMerge.cpp [ConstantMerge] Factor out check for un-mergeable globals, NFC 2019-01-20 02:44:43 +00:00
CrossDSOCFI.cpp [opaque pointer types] Add a FunctionCallee wrapper type, and use it. 2019-02-01 02:28:03 +00:00
DeadArgumentElimination.cpp [opaque pointer types] Pass function types to CallInst creation. 2019-02-01 20:43:25 +00:00
ElimAvailExtern.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ExtractGV.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ForceFunctionAttrs.cpp Revert "[Sanitizers] UBSan unreachable incompatible with ASan in the presence of `noreturn` calls" 2019-01-24 18:04:21 +00:00
FunctionAttrs.cpp [IR] Refactor attribute methods in Function class (NFC) 2019-04-04 22:40:06 +00:00
FunctionImport.cpp [ThinLTO] Restructure AliasSummary to contain ValueInfo of Aliasee 2019-03-15 15:11:38 +00:00
GlobalDCE.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
GlobalOpt.cpp [GlobalOpt] Simplify __cxa_atexit elimination 2019-02-09 09:18:37 +00:00
GlobalSplit.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
HotColdSplitting.cpp [IR] Refactor attribute methods in Function class (NFC) 2019-04-04 22:40:06 +00:00
IPConstantPropagation.cpp [IPCP] Don't crash due to arg count/type mismatch between caller/callee 2019-01-29 10:19:44 +00:00
IPO.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
InferFunctionAttrs.cpp [IR] Refactor attribute methods in Function class (NFC) 2019-04-04 22:40:06 +00:00
InlineSimple.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Inliner.cpp [IR] Refactor attribute methods in Function class (NFC) 2019-04-04 22:40:06 +00:00
Internalize.cpp [Internalize] Replace uses of std::set with DenseSet 2019-04-02 09:25:31 +00:00
LLVMBuild.txt Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
LoopExtractor.cpp [CodeExtractor] Update function's assumption cache after extracting blocks from it 2019-02-08 06:55:18 +00:00
LowerTypeTests.cpp [ThinLTO] Detect partially split modules during the thin link 2019-02-14 21:22:50 +00:00
MergeFunctions.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
PartialInlining.cpp [Inliner] Pass nullptr for the ORE param of getInlineCost if RemarkEnabled 2019-02-21 02:57:52 +00:00
PassManagerBuilder.cpp [SCEV] Add option to forget everything in SCEV. 2019-04-12 19:16:07 +00:00
PruneEH.cpp [PruneEH] Don't split musttail call from ret 2019-04-02 15:47:11 +00:00
SCCP.cpp [IPSCCP,PM] Preserve PDT in the new pass manager. 2018-11-11 20:22:45 +00:00
SampleProfile.cpp Change some dyn_cast to more apropriate isa. NFC 2019-04-05 16:16:23 +00:00
StripDeadPrototypes.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
StripSymbols.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
SyntheticCountsPropagation.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ThinLTOBitcodeWriter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
WholeProgramDevirt.cpp [ThinLTO] Detect partially split modules during the thin link 2019-02-14 21:22:50 +00:00