llvm-project/llvm/lib/Transforms/Utils
Arthur Eubanks e422c0d3b2 [GlobalOpt] Perform store->dominated load forwarding for stored once globals
The initial land incorrectly optimized forwarding non-Constants in non-nosync/norecurse functions. Bail on non-Constants since norecurse should cause global -> alloca promotion anyway.

The initial land also incorrectly assumed that StoredOnceStore was the only store to the global, but it actually means that only one value other than the global initializer is stored. Add a check that there's only one store.

Compile time tracker:
https://llvm-compile-time-tracker.com/compare.php?from=c80b88ee29f34078d2149de94e27600093e6c7c0&to=ef2c2b7772424b6861a75e794f3c31b45167304a&stat=instructions

Reviewed By: nikic, asbirlea, jdoerfert

Differential Revision: https://reviews.llvm.org/D128128
2022-06-24 09:09:26 -07:00
..
AMDGPUEmitPrintf.cpp [AMDGPU] replace hostcall module flag with function attribute 2022-02-11 22:51:56 +05:30
ASanStackFrameLayout.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
AddDiscriminators.cpp [llvm] Don't use Optional::getValue (NFC) 2022-06-20 22:45:45 -07:00
AssumeBundleBuilder.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
BasicBlockUtils.cpp [BasicBlockUtils] Do not move loop metadata if outer loop header. 2022-05-23 16:39:54 -07:00
BreakCriticalEdges.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
BuildLibCalls.cpp BuildLibCalls: infer allockind attributes on relevant functions 2022-05-31 10:01:17 -04:00
BypassSlowDivision.cpp
CMakeLists.txt [misexpect] Re-implement MisExpect Diagnostics 2022-04-19 21:23:48 +00:00
CallGraphUpdater.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
CallPromotionUtils.cpp [WPD] Extend checking mode to support fallback to indirect call 2022-03-14 10:16:28 -07:00
CanonicalizeAliases.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
CanonicalizeFreezeInLoops.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
CloneFunction.cpp [NFC] format InstructionSimplify & lowerCaseFunctionNames 2022-06-09 16:10:08 +02:00
CloneModule.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
CodeExtractor.cpp [NFC] Fix Wswitch warning triggered by 735e6c 2022-06-14 14:45:15 +08:00
CodeLayout.cpp Remove unneeded cl::ZeroOrMore for cl::opt options 2022-06-04 00:10:42 -07:00
CodeMoverUtils.cpp
CtorUtils.cpp [GlobalOpt] Enable optimization of constructors with different priorities 2022-05-13 22:19:29 +00:00
Debugify.cpp [Debugify] Limit number of processed functions for original mode 2022-04-21 13:58:17 +02:00
DemoteRegToStack.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
EntryExitInstrumenter.cpp
EscapeEnumerator.cpp
Evaluator.cpp [OpaquePtr][GlobalOpt] Don't attempt to evaluate global constructors with arguments 2022-04-27 19:00:44 -07:00
FixIrreducible.cpp [llvm][fix-irreducible] ensure that loop subtree under child is correctly reconnected to new loop 2022-05-18 10:45:52 +01:00
FlattenCFG.cpp
FunctionComparator.cpp [FunctionComparator] Use getAlign() instead of getAlignment() 2021-12-15 14:40:56 -08:00
FunctionImportUtils.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
GlobalStatus.cpp [GlobalOpt] Perform store->dominated load forwarding for stored once globals 2022-06-24 09:09:26 -07:00
GuardUtils.cpp [llvm][NFC] Inclusive language: Reword replace uses of sanity in llvm/lib/Transform comments and asserts 2021-11-23 13:22:55 -05:00
HelloWorld.cpp
InjectTLIMappings.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
InlineFunction.cpp [InlineFunction] Slightly clarify noalias scope calculation (NFC) 2022-06-24 12:31:46 +02:00
InstructionNamer.cpp
IntegerDivision.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
LCSSA.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
LibCallsShrinkWrap.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
Local.cpp [llvm] Don't use Optional::getValue (NFC) 2022-06-20 22:45:45 -07:00
LoopPeel.cpp [LoopPeel] Forget SCEV for updated exit phi values. 2022-06-20 13:19:27 +02:00
LoopRotationUtils.cpp Pipe potentially invalid InstructionCost through CodeMetrics 2022-06-09 15:17:24 -07:00
LoopSimplify.cpp [NFC] format InstructionSimplify & lowerCaseFunctionNames 2022-06-09 16:10:08 +02:00
LoopUnroll.cpp [llvm] Don't use Optional::getValue (NFC) 2022-06-20 22:45:45 -07:00
LoopUnrollAndJam.cpp [llvm] Don't use Optional::getValue (NFC) 2022-06-20 22:45:45 -07:00
LoopUnrollRuntime.cpp [NFC] format InstructionSimplify & lowerCaseFunctionNames 2022-06-09 16:10:08 +02:00
LoopUtils.cpp [llvm] Don't use Optional::hasValue (NFC) 2022-06-20 10:38:12 -07:00
LoopVersioning.cpp [PSE] Remove assumption that top level predicate is union from public interface [NFC*] 2022-02-10 16:14:52 -08:00
LowerAtomic.cpp Transforms: Fix code duplication between LowerAtomic and AtomicExpand 2022-04-08 19:06:36 -04:00
LowerGlobalDtors.cpp Reland "Lower `@llvm.global_dtors` using `__cxa_atexit` on MachO" 2022-03-23 18:36:55 -07:00
LowerInvoke.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
LowerMemIntrinsics.cpp Add support for atomic memory copy lowering 2022-04-08 10:41:31 +07:00
LowerSwitch.cpp LowerSwitch: Avoid inserting NewDefault block 2022-04-14 13:30:56 +08:00
MatrixUtils.cpp
Mem2Reg.cpp
MemoryOpRemark.cpp
MemoryTaggingSupport.cpp [MTE] [HWASan] Use LoopInfo for reachability queries. 2022-06-22 15:28:49 -07:00
MetaRenamer.cpp Revert "Rename llvm::array_lengthof into llvm::size to match std::size from C++17" 2022-01-26 16:55:53 +01:00
MisExpect.cpp [llvm][misexpect] Avoid division by 0 when using sample profiling 2022-04-22 22:48:00 +00:00
ModuleUtils.cpp [OpenMP] Use new offloading binary when embedding offloading images 2022-04-15 20:35:26 -04:00
NameAnonGlobals.cpp Cleanup header dependencies in LLVMCore 2022-02-02 06:54:20 +01:00
PredicateInfo.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
PromoteMemoryToRegister.cpp [NFC] format InstructionSimplify & lowerCaseFunctionNames 2022-06-09 16:10:08 +02:00
RelLookupTableConverter.cpp [NFC] Rename Instrinsic to Intrinsic 2022-04-25 18:13:23 +01:00
SCCPSolver.cpp [SCCP] Don't mark edges feasible when resolving undefs 2022-06-22 10:28:27 +02:00
SSAUpdater.cpp Revert "[MachineSSAUpdater] compile time improvement in GetValueInMiddleOfBlock" 2022-06-14 20:27:21 +07:00
SSAUpdaterBulk.cpp
SampleProfileInference.cpp Remove unneeded cl::ZeroOrMore for cl::opt/cl::list options 2022-06-05 00:31:44 -07:00
SampleProfileLoaderBaseUtil.cpp Remove unneeded cl::ZeroOrMore for cl::opt/cl::list options 2022-06-05 00:31:44 -07:00
SanitizerStats.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
ScalarEvolutionExpander.cpp [NFC] format InstructionSimplify & lowerCaseFunctionNames 2022-06-09 16:10:08 +02:00
SimplifyCFG.cpp [SimplifyCFG] Try to merge edge block when threading (PR55765) 2022-06-20 10:29:33 +02:00
SimplifyIndVar.cpp [IndVarSimplify] Don't assert that terminator is not SCEVable (PR55925) 2022-06-09 10:12:13 +02:00
SimplifyLibCalls.cpp [InstCombine] handle subobjects of constant aggregates 2022-06-21 11:55:14 -06:00
SizeOpts.cpp [llvm] Remove unneeded cl::ZeroOrMore for cl::opt options. NFC 2022-06-03 21:59:05 -07:00
SplitModule.cpp
StripGCRelocates.cpp [NFC] Rename Instrinsic to Intrinsic 2022-04-25 18:13:23 +01:00
StripNonLineTableDebugInfo.cpp
SymbolRewriter.cpp Cleanup includes: TransformsUtils 2022-03-01 21:00:07 +01:00
UnifyFunctionExitNodes.cpp
UnifyLoopExits.cpp [UnifyLoopExits] Reduce number of guard blocks 2022-06-22 15:44:23 -05:00
Utils.cpp Reland "Lower `@llvm.global_dtors` using `__cxa_atexit` on MachO" 2022-03-23 18:36:55 -07:00
VNCoercion.cpp [NFC][Alignment] Use getAlign in VNCoercion 2022-06-13 15:13:05 +00:00
ValueMapper.cpp [DebugInfo] ValueMapper impl for DIArgList respects IgnoreMissingLocals 2022-01-17 17:17:32 +00:00